Estaba yo el código HTML de la web de la Campus Party 2007 cuando me di cuenta de que el desarrollador de la web, muy concienciado con con la seguridad de sus usuarios, había insertado el siguiente código para la autenticación de los usuarios (enviar usuario y contraseña, vamos ;):

 <script>
 function seguridad()
 {
 document.getElementById("pass_public_key").value =Math.random();
 document.getElementById("pass").value = calcMD5c(document.getElementById("pass_public_key").value + calcMD5c(document.getElementById("pass_tmp").value));
 }
 </script>
 [...]
 <A href="#" ONCLICK="seguridad();theF=document.getElementById('loginForm');theF.submit();return false;" class="transparentLink" style="font-size:15px;">Entrar</a>
 

Dejando de un lado lo bonito que pueda ser el código, vemos que el desarrollador ha decidido que la contraseña de sus usuarios es muy importante y no debería viajar sin cifrar por la red. Me parece bastante razonable ya que durante el evento la gente accede a la web, y cualquiera podría enchufar un sniffer y cazar la contraseña por el camino (no sería la primera vez). Además es tan cuidadoso que ni siquiera manda el Hash de la contraseña, sino que manda el Hash de un número aleatorio concatenado el Hash de la contraseña:

MD5(random() || MD5(PASSWORD))

De esta forma, el navegador en lugar de enviar nuestra cotraseña en texto plano de forma que cualquiera podría leerla por el camino, envía el Hash que hemos indicado en la fórmula y el número aleatorio para poder calcular el Hash en el servidor y comprobar si ambos hashes (el calculado en el cliente y el calculado en el servidor) son iguales.

En fin, hasta aquí todo es muy correcto, y son todo muy buenas intenciones, hasta que repasas un poco más el código fuente y te das cuenta de lo siguiente (limpio un poco el código para hacerlo más legible):

 <form method="POST" id="loginForm">
   <input type="hidden" name="login" value="1">
   <input type="text" name="dni" value="DNI" onclick="this.value=''">
   <div>
     <input type="password" name="pass_tmp" id="pass_tmp">
     <input type="hidden" name="pass_public_key" id="pass_public_key" value="">
     <input type="hidden" name="pass" id="pass" value="">
   </div>
 
   <A href="#" ONCLICK="seguridad();theF=document.getElementById('loginForm');theF.submit();return false;">Entrar</a>
   <A href="" onClick="[...]">Recordar contrase&ntilde;a</a><br>
 </form>
 

El desarrollador ha metido el campo donde el usuario introduce la contraseña en texto plano en el formulario que envía al servidor y no lo ha borrado por javascript. Como consecuencia, además del bonito Hash que envía al servidor, también envía siempre la contraseña en texto plano.

En definitiva, la intención era buena, pero la implementación es inútil.