Me gustan esos pequeños detalles que le metes al código
'Espere...'// mostramos un mensaje de espere para que sea mas profesional xD

else
{
echo "Login incorrecto";//si no, que se joda
header("location: login.html?loginfailed=yes");
}
Qué crack! Por cierto muy bien comentado, ahora ya entiendo algo mejor el js, pero hay alguna cosilla que se me escapa, como por ejemplo en esta parte:

Código: Seleccionar todo

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;
    }
  }
}
Siempre se inicia así el js? Qué es lo que se hace al llamar a las funciones "(elemento,objeto,funcion,boleano)". A qué corresponde cada una? Solo aparecen en esa parte del js.

Lo que era curiosidad por proteger el login de sniffers, se está convirtiendo en un reto Ahora no encripta ningun dato del login Y no redirecciona al introducir los datos correctos... ahí algo por ahí que no debe de estar bien jeje.
Imagen


Estoy contigo, p*to IExplorer... pero por ahora hay algun que otro script que solo corre 100% funcional bajo ie

Ah! Le estoy echando un ojo a la web donde comentas que aprendiste ajax... está bastante bien.
Imagen

"Be the change you want to see in the world"
jaja ráyos, lo que pasa que en ajax (js) no es posible encriptar facilmente, por lo que creí que al mandar la informacion por privado el sniffer no lo pillaría, ahora que veo que si, la unica solucion lógica es encriptar y mandar... prueba este código, lo hize para que ENCRIPTARA ANTES y luego envie datos, espero este no sea interceptado, seria mas facil si js tuviera algun metodo de encriptacio pero como no lo tiene me las arregle asi:

form 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>
pass.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=='' & $pwd != '')//aqui recibimos la contraseña para encriptar
{
  $pwd=md5($pwd);//encriptamos
  echo $pwd;//enviamos
}
else
{
  if (( $usr == "usuario" ) && ( $pwd == md5("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

Código: Seleccionar todo

//by LInkgl
var conectar;
var passEncryptada;
var conectar1;

//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('p');
  addEvent(dom,'blur',encriptar,false);//aqui cambie el evento a cuando se desenfoque la pass la encripte
}

function encriptar()//cree la funcion encriptar
{
  var pass=document.getElementById('p').value;//obtenemos la pass
  var bton=document.getElementById('Login');//el login
  conectar1=HttpRequest();//abrimos conexion
  conectar1.onreadystatechange=obtenerPass;//abrimos la funcion de obtener la pass YA encriptada
  conectar1.open('GET','pass.php?p='+pass+'&id=');//mandamos SOLO La pass para poder encriptarla 
  conectar1.send(null);//aqui no enviamos nada 

  addEvent(bton,'click',comparar,false);//añadimos el evento clic al login para cuando se presione ir a la funcion comparar

}

function obtenerPass()//obtenemos las pass
{
  if(conectar1.readyState==4)//si estamos conectados recibimos la pass encriptada
  {
    passEncryptada=conectar1.responseText;
  }
  else
  {
    document.getElementById('mostrar').innerHTML='Espere...';//si no mostramos un mensaje de espere para que sea mas profesional xD
  }
}



//esta funcion obtiene todos los campos con sus respectivos valores 
function comparar()
{
  var boton=document.getElementById('Login');
  var user=document.getElementById('user');
  //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='+passEncryptada+'&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
  }
}
El form no ha cambiado
EL php un poco
El js si xD

ahora nos queda orar hermanos para que funcione, xD y si el sniffer se convirtio en todo un reto, pero se que podemos pasarlo xD aver te explico lo que no entiendes esta parte:

Código: Seleccionar todo

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;
    }
  }
}
Es una funcion que aprendí donde aprendi Ajax, aunque NO es necesaria, y el JS NO siempre se inicia asi se inicia como sea no tiene una orden si usas funciones, el orden esta en como llamas a las funciones... te explico mira, esa funcion se crea por una razon:

que lea el codigo en TODOS los navegadores, lo que pasa que la funcion addEventListener es una funcion que me sirve para insertar funciones a los objetos, pero lo que pasa que el fuck navegador de IE (tenia que ser) no lee esa funcion, ie reemplaza esa funcion por attachEvent, entonces lo que hacemos ahi es si no funciona attachEvent usamos addEventListener, osea para que si no funcione una use la otra, ahora

elemento,objeto,funcion,boleano

esas son VARIABLES, son los parametros que debe recibir la funcion, elemento=id del campo por ejemplo <input type="text" ID="esto"> eso identifica al objeto de texto, entonecs elemento es para obtener el id, objeto, es el evento, la funcion que se usara ya sea (onClick, onBlur, onFocus) etc, como vb6, funcion es la funcion que se va a ejecutar cuando se ejecute el evento, boleano es true o false, por defecto es false prueba el codigo anterior y me cuentas, estoy ansioso
//mHmm..
Y tras un par de oraciones y sesiones de vudú...
Lo conseguiste!! Eres un crack!! jajajaja

Thanks por la explicación de lo de las variables que te pregunté antes. Con la tontería esta me estás dando clases avanzadas de ajax by the face jajaja

Mira:
Imagen


Pero ahora hay otro mini problema... no redirige y clona el "login form"
Te pongo un par de imágenes:

Encriptando y enviando datos:
Imagen


Y despues pasa esto, Wtf?
Imagen



Por cierto, en el php:

Código: Seleccionar todo

if($usr=='' & $pwd != '')
Quiza´s sea una tontería tio, pero ese If es así? No sería algo más como esta otra sentencia: ¿?

Código: Seleccionar todo

if( $usr == '' ) && ( $pwd == '' )
Qué es "lo que niega" la exclamación de tu code?
Imagen

"Be the change you want to see in the world"
WTF ?¿ el doble login no tengo ni idea de porque te pasa, acabo de probar y probar en windows/linux y no pasa eso y si me equivoque en esa linea pero no en el != sino en el & ahi si son dos && xD, bueno es un error tonto... quiza te pasa por eso, y si ya vi que no redirecciona pero eso lo arregle desde el javascript, usando window.location, entonces para finalizar el php quedaria:

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=='' && $pwd != '')//aqui recibimos la contraseña para encriptar
{
  $pwd=md5($pwd);//encriptamos
  echo $pwd;//enviamos
}
else
{
  if (( $usr == "usuario" ) && ( $pwd == md5("password") ))//comparamos
  {
    echo "Login Correcto";//si todo va bien mostramos el mensaje y redireccionamos
  }
  else
  {
    echo "Login incorrecto";//si no, que se joda
  }
}
?>
Y el Js queda:

Código: Seleccionar todo

//by LInkgl
var conectar;
var passEncryptada;
var conectar1;

//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('p');
  addEvent(dom,'blur',encriptar,false);//aqui cambie el evento a cuando se desenfoque la pass la encripte
}

function encriptar()//cree la funcion encriptar
{
  var pass=document.getElementById('p').value;//obtenemos la pass
  var bton=document.getElementById('Login');//el login
  conectar1=HttpRequest();//abrimos conexion
  conectar1.onreadystatechange=obtenerPass;//abrimos la funcion de obtener la pass YA encriptada
  conectar1.open('GET','pass.php?p='+pass+'&id=');//mandamos SOLO La pass para poder encriptarla
  conectar1.send(null);//aqui no enviamos nada

  addEvent(bton,'click',comparar,false);//añadimos el evento clic al login para cuando se presione ir a la funcion comparar

}

function obtenerPass()//obtenemos las pass
{
  if(conectar1.readyState==4)//si estamos conectados recibimos la pass encriptada
  {
    passEncryptada=conectar1.responseText;
  }
  else
  {
    document.getElementById('mostrar').innerHTML='Espere...';//si no mostramos un mensaje de espere para que sea mas profesional xD
  }
}



//esta funcion obtiene todos los campos con sus respectivos valores
function comparar()
{
  var boton=document.getElementById('Login');
  var user=document.getElementById('user');
  //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='+passEncryptada+'&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;
    if(conectar.responseText=='Login Correcto')
    {
      window.location='http://indetectables.net';//aqui si puso todo bien lo redireccionamos 
    }
    else
    {
      window.location='login.html?loginfailed=yes';//aqui lo mandamos al chorizo si devuelve false
    }
  }
  else
  {
    document.getElementById('mostrar').innerHTML='Espere...';//si no mostramos un mensaje de espere para que sea mas profesional xD
  }
}
en location='aqui la url para redireccionar' para cambiar las redirecciones, y bueno insisto el login doble no me pasa y estuve probando y probando pero no salia el doble login, ahora si redirecciona y encripta antes de enviar y segun dices el sniffer no lo toca asi que creo que lo logramos xD si te sigue apareciendo el doble login tal vez cambiaste algo, si es asi pega lo que cambiaste para ver que puede andar mal

ahh y el != es para recibir el primer parametro la pura pass y encriptarla en esa linea que comentas:

if($usr=='' & $pwd != '')

es asi:

if($usr=='' && $pwd != '') (ya la corregi en el php) y lo que hace es si usr es igual a nada, y password es diferente de nada (osea que tiene texto) entonces encripta la pura pass, es para encriptar solo el password abajo ya obtiene de nuevo el usuario
//mHmm..
Perfect colega!

Ya descubrí el fallo, no era por retocar el código, sino por crossbrowsing.
Es compatible con el firefox e ie, pero yo que llevo desde que salió el Chrome enganchado a él... pues sorpresa
Resulta que con Chrome no es compatible, me lo debí de imaginar... no es la primera vez que me da un sustillo.
A ver si se ponen un poco mas las pilas los chicos de Google


Esta vez la curiosidad no mató al gato sino que le llenó la cabeza de conocimientos, gracias Linkgl!

Si alguna vez puedo echarte una mano con algo, coméntame, que aunque no tenga tantos conocimientos como tú en determinados temas, podría ayudarte a agilizar algún proyectillo o algo jejeje...

Nos vemos por el foro bro
Imagen

"Be the change you want to see in the world"
Responder

Volver a “PHP”