Woola!

Estaba tonteando con el Caín cuando sin quererlo me di cuenta de lo siguiente. Las webs que no encriptan los datos del login de sus usuarios son fácilmente interceptables. Algo obvio pero que había pasado por alto...

Y es que estaba haciendo pruebas con un login en php, que no depende de mysql, y me preguntaba cómo podría hacer para encriptar los datos del form al iniciar sesión. Vamos, proteger la información que se envía de sniffers.

Alguna idea tios?
Imagen

"Be the change you want to see in the world"
para encriptar contraseñas que mejor que md5 o sha1 que son encriptaciones de una vìa, por lo que tendras que hacer es encriptar y comparar.. seria algo como esto:

Código: Seleccionar todo

<?php
$username=$_POST['usuario'];
$passwd=$_POST['password'];
$encriptado=md5($passwd);
con eso tendrìas encriptada la pass en la variable encriptado y podrias hacer lo que quieras con esa variable, ya sea insertarla en una bd para el registro etc etc... como es de una vìa lo que tienes que hacer para ver si la pass es la correcta es encriptar la pass y compararla con la guardada pero eso no viene en tu pregunta xDD saludos bro espero te sirva si no pues se un poco mas especifico y te ayudo
//mHmm..
linkgl escribió:para encriptar contraseñas que mejor que md5 o sha1 que son encriptaciones de una vìa, por lo que tendras que hacer es encriptar y comparar.. seria algo como esto:

Código: Seleccionar todo

<?php
$username=$_POST['usuario'];
$passwd=$_POST['password'];
$encriptado=md5($passwd);
con eso tendrìas encriptada la pass en la variable encriptado y podrias hacer lo que quieras con esa variable, ya sea insertarla en una bd para el registro etc etc... como es de una vìa lo que tienes que hacer para ver si la pass es la correcta es encriptar la pass y compararla con la guardada pero eso no viene en tu pregunta xDD saludos bro espero te sirva si no pues se un poco mas especifico y te ayudo
A ver si lo pillo
Añadiendo una nueva variable $crypt=md5($pass), solo con poner ese "md5" delante de "($pass)" automáticamente encriptaría los datos que se envían en el login? Osea, que si quisiese encriptar en sha1, lo que haría es reemplazar el md5 por sha1, no? jejeje

Eso por un lado. Ahora me pregunto, si es así de simple y lo encripta cool, los datos quedan protegidos de sniffers. Pero cómo verifica el login que los datos enviados son los correctos? Por ahora no estoy trabajando con mysql porque me pierdo. Lo que hago es llamar a otro php para comprobar los datos del login, es decir rellenas los campos del login y si coinciden con los datos que tengo en otro php, pues te loguea. Ya se que es una locura, pero cuando llegue el momento y me vea listo para adentrarme al fabuloso mundo de mysql lo haré.

Ahora no tengo el codigo a mano, a ver si esta tarde encuentro un hueco y lo posteo para que lo eches un ojo.

Thanks colega!
Imagen

"Be the change you want to see in the world"
Pues sí asi de fácil, yo te recomiendo usar md5... para logearte era lo que te menciono, pongamos en el ejemplo de que te quieres registrar, en el form del registro llenas tus datos y cuando das a registrar el php te registra asi:

Código: Seleccionar todo

$user=$_POST['usuario'];
$pass=$_POST['pass'];
$crypt=md5($pass);
//aqui cuando tengas mysql insertaras en la base de datos el $user y el $crypt
ahi obtienes los datos y encriptas la contraseña y insertas la variable user y CRYPT pass no la insertas porque esa tiene el pass sin encriptar esa variable la inutilizas... ahora supongamos que en otra pagina php ya esta la pass insertada y encriptada, entonces ¿Como hacer para leerla si no la puedo desencrptar? Fácil...

imaginemos que en un archivo llamado datos.txt o datos.php tienes la contraseña encriptada solamente la pura contraseña encriptada y nada mas para ver si la pass es correcta se hace lo siguiente:

Creas tu formulario del login y comparas algo asi:

Código: Seleccionar todo

<?php
$user=$_POST['user_login'];
$pass=$_POST['pass']; //aqui obtenemos el pass del formulario SIN encriptar
$crypt=md5($pass); //aqui ya esta encriptado ahora lo coomparamos para ver si es correcto
$f=file_get_contents("datos.php");//abrimos el archivo datos.php y obtenemos la contraseña encriptada del  archivo
if($crypt==$f)//comparamos si crypt (osea la pass del formulario encriptada) es igual que la pass encriptada dentro del archivo son iguales entonces es correcto 
{
  echo "La contraseña es correcta porque si encriptamos ambas son igualitas";
}
else
{
  echo "La contraseña es incorrecta porque si encriptamos ambas son distintas";
}
?>
asi deberia quedar, con mysql cambia un poco pues necesitas conectarte a la bd leer los datos y compararlos, pero igual es facil,. si necesitas ayuda igual en mysql pss me dices, es muy facil de aprender
//mHmm..
Me parece que lo que quieres decir es encriptar los datos antes de enviarlos al servidor(donde esta el php), si lo que te refieres es a eso, con javascript podrias encriptar la contraseña con cualquier formato, ya sea MD5, SHA1...
No se si te referias a eso o no
Saludos
sod escribió:Me parece que lo que quieres decir es encriptar los datos antes de enviarlos al servidor(donde esta el php), si lo que te refieres es a eso, con javascript podrias encriptar la contraseña con cualquier formato, ya sea MD5, SHA1...
No se si te referias a eso o no
Saludos
Pues si, me refiero a encriptar los datos y luego compararlos, ya encriptados, pero con javascript no, tendrias que usar ajax para enviar los datos al servidor, y eso es un poco mas complejo, lo basico seria directamente desde php. saludos bro's
//mHmm..
linkgl escribió:
sod escribió:Me parece que lo que quieres decir es encriptar los datos antes de enviarlos al servidor(donde esta el php), si lo que te refieres es a eso, con javascript podrias encriptar la contraseña con cualquier formato, ya sea MD5, SHA1...
No se si te referias a eso o no
Saludos
Pues si, me refiero a encriptar los datos y luego compararlos, ya encriptados, pero con javascript no, tendrias que usar ajax para enviar los datos al servidor, y eso es un poco mas complejo, lo basico seria directamente desde php. saludos bro's
Pero si lo encripta con php entonces el sniffer pillaria, porque manda al servidor los datos sin encriptar, entonces por narices tiene que usar ajax([Offtopic]que porcierto acabo de empezar a leerme un libro sobre ajax y se ve muy interesante[/Offtopic]) como dices.
Saludos
sod escribió:
linkgl escribió:
sod escribió:Me parece que lo que quieres decir es encriptar los datos antes de enviarlos al servidor(donde esta el php), si lo que te refieres es a eso, con javascript podrias encriptar la contraseña con cualquier formato, ya sea MD5, SHA1...
No se si te referias a eso o no
Saludos
Pues si, me refiero a encriptar los datos y luego compararlos, ya encriptados, pero con javascript no, tendrias que usar ajax para enviar los datos al servidor, y eso es un poco mas complejo, lo basico seria directamente desde php. saludos bro's
Pero si lo encripta con php entonces el sniffer pillaria, porque manda al servidor los datos sin encriptar, entonces por narices tiene que usar ajax([Offtopic]que porcierto acabo de empezar a leerme un libro sobre ajax y se ve muy interesante[/Offtopic]) como dices.
Saludos
pues no si pones un captcha y haces el login en la misma pagina usando alguna variable $_GET asi no dejaria pasar al sniffer a la pagina siguiente, y bueno esto era para que en la pagina que inserta los datos, el sniffer no pudiera obtener los datos al insertar o buscar en la base de datos jeje, pero igual y si es mas seguro con ajax.

[Offtopic]
Si te interesa aprender ajax, pues yo aprendí de ajaxya.com.ar un exelentisimo tutorial, almenos eso me pareció ami
[/OFftopic]

Saludos
//mHmm..
Sorry tios!
Estaba estudiando, que mañana tengo un examen!!

Mañana pruebo lo que me comentas Linkgl, está muy bien explicado y supongo que no me supondrá problemas jejeje. Lo único que no me molaría para nada poner Captchas en un login, resultaría un pelín incomodo

En cuanto a lo que comentas, Sod, dices que con un javascript podría aumentar la seguridad del log aun más? Mmm, interesante.

Desviándonos del tema ¿jquery o ajax?

Thanks por vuestras soluciones! En cuanto las pruebe escribo otra vez algo por aquí...
Imagen

"Be the change you want to see in the world"
de nadap, jeje mira igual como estaba aburrido te pongo un ejemplo de lo que quizo decir sod con javascript:

el formulario html:

Código: Seleccionar todo

<html>
<head>
<script src="funciones.js" language="JavaScript"></script>

</head>
<body>
Prueba contra sniffer ajax<br />
Escriba una contraseña para compararla en la base de datos<br />
<input type="password" name="pass" id="pass"><br />
<input type="button" id="enviar" value="comparar"><br />
<div id="mostrar"></div>
</body>
</html>
el php:

Código: Seleccionar todo

<?php
//by linkgl
$a=$_REQUEST['encriptada'];
$x=file_get_contents("pass.txt");
if($a==$x)
{
  echo "la pass es correcta";
}
else
{
  echo "las pass son incorrectas";
}
?>
el javascript(aqui la parte buena):

Código: Seleccionar todo

//by LInkgl

var conectar;

function addEvent(elemento,objeto,funcion,boleano)
{
  if (elemento.attachEvent)
  {
    elemento.attachEvent('on'+objeto,funcion);
    return true;
  }
  else
  {  
    if (elemento.addEventListener)
    {
      elemento.addEventListener(objeto,funcion,boleano);
      return true;
    }
    else
    {
      return false;
    }
  }
}

addEvent(window,'load',inicio,false);

function inicio()
{
  var dom=document.getElementById('enviar');
  addEvent(dom,'click',comparar,false);
}

function comparar()
{
  var pass=document.getElementById('pass');
  var boton=document.getElementById('enviar');
  var crypt=pass.value;
  conectar=HttpRequest();
  conectar.onreadystatechange=dibujar;
  conectar.open('GET','pass.php?encriptada='+crypt,true);
  conectar.send(null);
}

function dibujar()
{
  if(conectar.readyState==4)
  {
    document.getElementById('mostrar').innerHTML=conectar.responseText;
  }
  else
  {
    document.getElementById('mostrar').innerHTML='Espere...';
  }
}



function HttpRequest() 
{
  var xmlHttp=null;
  if (window.ActiveXObject)
  { 
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else
  { 
    if (window.XMLHttpRequest) 
    {
      xmlHttp = new XMLHttpRequest();
    }
  }
  return xmlHttp;
}

y listo tendrias todo en ajax, solo faltaria encriptar la cadena porque no existe la funcion md5 en js pero existen librerias y funciones inventadas para la misma seria cosa de ponerla debajo y poner:

var crypt=md5(pass.value);

no lo pongo para no hacer largo el codigo porque quedaría larguisimo por la funcion md5, je un saludo! y bueno el captcha tambien es facil hay prediseñados es cosa de buscar en google
//mHmm..
Jajaja linkgl, muchas thanks otra vez! ^^
Queda muy poca gente que cuando se aburre lo pasa tan bien como nosotros

Lo del Captcha, no es problema... implementé uno hace tiempo. Lo usé en un mailer anónimo muajaja.

Lo dicho, a medida que vaya probando cosillas os comento. Y thanks again!
Imagen

"Be the change you want to see in the world"
Linkgl, tío, a través del js que me pasaste ayer va perfect
Lo único que yo sería totalmente incapaz de elaborar un código tan complejo, hay algunas partes que no entiendo He intentado adaptarlo a un login similar al que posteo más abajo pero nada, tampoco lo logro hacer funcionar Mis conocimientos de js a días de hoy son muy limitadillos ^^

Luego, a través del método php md5... Usando sniffers sigo pillando la pass... me parece que es porque la variable $crypt=md5($pwd) no la estoy usando donde debería... jumm. Veo que es imposible que funcione así, pero no se sino dónde intercalar el $crypt.


Un ejemplo de cómo la estoy introduciendo sería el siguiente:

Código: Seleccionar todo

<?
$usr = $_POST ['id'];
$pwd = $_POST ['p'];
$crypt=md5($pwd);
if ( ( $usr == "usuario" ) && ( $pwd == "password" ) )
header("location: http://www.indetectables.net");
else
header("location: login.html?loginfailed=yes");
?>
este sería el login form previo:

Código: Seleccionar todo

<html>
<body>
<form method="post" action="check.php">
        Usuario: <input type="text" name="id" /> 
        Pass: <input type="password" name="p" />
<input name=Login type=submit id="Login" value="Login" />
</form>
</body>
</html>
A ver si me puedes iluminar un poco, que lo que ayer me parecía muy obvio hoy se está convirtiendo en una rayada mental

Thanks bro!
Imagen

"Be the change you want to see in the world"
rdnmlln escribió:Linkgl, tío, a través del js que me pasaste ayer va perfect
Lo único que yo sería totalmente incapaz de elaborar un código tan complejo, hay algunas partes que no entiendo He intentado adaptarlo a un login similar al que posteo más abajo pero nada, tampoco lo logro hacer funcionar Mis conocimientos de js a días de hoy son muy limitadillos ^^

Luego, a través del método php md5... Usando sniffers sigo pillando la pass... me parece que es porque la variable $crypt=md5($pwd) no la estoy usando donde debería... jumm. Veo que es imposible que funcione así, pero no se sino dónde intercalar el $crypt.


Un ejemplo de cómo la estoy introduciendo sería el siguiente:

Código: Seleccionar todo

<?
$usr = $_POST ['id'];
$pwd = $_POST ['p'];
$crypt=md5($pwd);
if ( ( $usr == "usuario" ) && ( $pwd == "password" ) )
header("location: http://www.indetectables.net");
else
header("location: login.html?loginfailed=yes");
?>
este sería el login form previo:

Código: Seleccionar todo

<html>
<body>
<form method="post" action="check.php">
        Usuario: <input type="text" name="id" /> 
        Pass: <input type="password" name="p" />
<input name=Login type=submit id="Login" value="Login" />
</form>
</body>
</html>
A ver si me puedes iluminar un poco, que lo que ayer me parecía muy obvio hoy se está convirtiendo en una rayada mental

Thanks bro!

deberia quedarte el php asi:

Código: Seleccionar todo

<?
$usr = $_POST ['id'];
$pwd = md5($_POST ['p']);

if ( ( $usr == "usuario" ) && ( $pwd == md5("password") ) )
header("location: http://www.indetectables.net");
else
header("location: login.html?loginfailed=yes");
?>
prueba y nos cuentas, lo de ajax pues si haha es mas complicado pero igual te lo puedo adaptar al login si quieres, pero prueba ese codigo anterior si no pues no nos queda mas que probar el temido ajax xDD
//mHmm..
Jajaja, estaba poniéndolo donde no era, gracias por la remod

Ahora si que lo encripta, o eso creo,

Y jajaja,el sniffer me pilla en el campo 'id' "Login" (en vez de "usuario") Hasta ahí perfect, porque quiere decir que el sniffer se pierde y no traduce bien los paquetes de datos. Pero en el campo 'p' pilla toda la contraseña

Imagen


Si tienes un rato, sin compromiso eh, a ver si puedes hacerme una adaptacion del js al ejemplo de antes ^^.

Por cierto, me parece que empiezo a ser un incordio, corrígeme si me equivoco ... pero juas, estoy aprendiendo cosas nuevas e interesantes. ^^


Thanks tio!
Imagen

"Be the change you want to see in the world"
pues lo prometido es deuda, (o algo asi va la frase) xDD el punto es que creo que ya quedó, si aun tu sniffer lo detecta, creo que me quedan un par de trucos bajo la manga haha, mira lo que hace el javascript es mandar los datos al php y luego mostrarlos en pantalla asi sin encriptar, si funciona y el sniffer no detecta los datos genial, si no pues habra que agregar mas lineas al js o probar otra solución, igual te comente un poco el code, aqui el codigo:

Forumulario HTML

Código: Seleccionar todo

<html>
<head>
<script language="JavaScript" type="text/javascript" src="funciones.js"></script>
</head>
<body>
Usuario: <input type="text" name="id" id="user"/>
Pass: <input type="password" name="p" id="p" />
<input name="Login" type="button" id="Login" value="Login" />
<div id="mostrar"></div>
</body>
</html>
Ahi eliminamos el form, porque no lo necesitamos, aca javascript hara todo por nosotros

el PHP debe llamarse pass.php, igual la pag no sera mostrada ni cargada directamente al navegador:
código PHP:

Código: Seleccionar todo

<?php
$usr = $_GET ['id'];//obtenemos los datos con get porque el javascript los envia con ese metodo
$pwd = $_GET ['p'];//podriamos usar $_POST pero se me hace mas incomodo en el js 
if (( $usr == "usuario" ) && ( $pwd == "password" ))//comparamos
{
echo "Login Correcto";//si todo va bien mostramos el mensaje y redireccionamos
header("location: http://www.indetectables.net");
}
else
{
echo "Login incorrecto";//si no, que se joda
header("location: login.html?loginfailed=yes");
}
?>
funciones.js (asi debe llamarse el archivo javascript)

Código: Seleccionar todo

//by LInkgl
var conectar;

//Estas funciones son OPCIONALES para simplificar el uso de addEvetnListener o attachEvent
//dependiendo del navegador para que ande en TODOS los navegadores, ojo yo no la invente
// me la aprendi de donde aprendi ajax
function addEvent(elemento,objeto,funcion,boleano)
{
  if (elemento.attachEvent)
  {
    elemento.attachEvent('on'+objeto,funcion);
    return true;
  }
  else
  {  
    if (elemento.addEventListener)
    {
      elemento.addEventListener(objeto,funcion,boleano);
      return true;
    }
    else
    {
      return false;
    }
  }
}
//esta funcion hace lo mismo simplificar para ambos navegadores la peticion de xmlhttp
//porque el puto de ie nos quiere joder la vida y usa un control active, los demas xmlhttprequest
function HttpRequest() 
{
  var xmlHttp=null;
  if (window.ActiveXObject)
  { 
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else
  { 
    if (window.XMLHttpRequest) 
    {
      xmlHttp = new XMLHttpRequest();
    }
  }
  return xmlHttp;
}


//aplicamos la funcion simplificada que al cargar totalmente la pagina inicien las funciones
addEvent(window,'load',inicio,false);
//la primer funcion al presionar el boton login se activa la funcion comparar
function inicio()
{
  var dom=document.getElementById('Login');
  addEvent(dom,'click',comparar,false);
}
//esta funcion obtiene todos los campos con sus respectivos valores 
function comparar()
{
  var pass=document.getElementById('p');
  var boton=document.getElementById('Login');
  var user=document.getElementById('user');
  var crypt=pass.value;
  //activamos la peticion http
  conectar=HttpRequest();
  //si el estado cambia o es diferente a 0 iniciamos la funcion dibujar (mostrar los datos)
  conectar.onreadystatechange=dibujar;
  //abrimos una peticion por http con el metodo GET la pagina en este caso pass.php y los datos en variables
  conectar.open('GET','pass.php?p='+crypt+'&id='+user.value,true);
  //aqui enviariamos datos si usaramos el metodo $_POST pero me da flojera
  conectar.send(null);
}
//aca mostramos en pantalla
function dibujar()
{
  if(conectar.readyState==4)//si estamos conectados mostramos la respuesta del php
  {
    document.getElementById('mostrar').innerHTML=conectar.responseText;
  }
  else
  {
    document.getElementById('mostrar').innerHTML='Espere...';//si no mostramos un mensaje de espere para que sea mas profesional xD
  }
}
//mHmm..
Responder

Volver a “PHP”