1 .
Elegir contraseña y página
2 .
Página de introducción de la contraseña
Os mostramos otra manera, algo más flexible que la anterior, de proteger
contra intrusos vuestras páginas.
Elegir contraseña y página
La mayor crítica que tenía el modo anteriormente propuesto era la
obligatoriedad de que la contraseña y el nombre de la página coincidieran.
En este caso, lo que haremos será codificar tanto la contraseña como el
nombre de la página de una manera un tanto extraña.
Teclead una constraseña y un nombre de página cualquiera teniendo
en cuenta las siguientes restricciones:
- Sólo pueden contener letras, no números ni otros caracteres.
- La página acabará en .html
- Si el nombre de la página excede en longitud en más de un carácter a la
contraseña, esos caracteres de más no estarán codificados.
En el código de la página tendremos dos variables que contendrán
la codificación de contraseña y página. Es difícil decodificarlos a mano
sin tener la contraseña pero, ojo, no es imposible. De hecho, es probable
que un buen hacker lo considere sencillo. Esta protección nos salvaguardará
de la mayoría de los usuarios, pero no de todos.
Página de introducción de la contraseña
Suponiendo que nuestra página tenga como contraseña
password y como página
bienvenido, éste sería el código
a utilizar:
password.html
<HTML>
<HEAD>
<TITLE>Introduce la contraseña</TITLE>
<SCRIPT LANGUAGE="Javascript">
<!-- Esconde el codigo a navegadores antiguos
var alfabeto= "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI"
var cod1 = "42691";
var cod2 = "COHOWITQHO";
function decodificar(formulario) {
passcod = codificarC(formulario.password.value,3);
if (passcod == cod1) {
aux = "" + codificarC(formulario.password.value,10)
pagina = decodificarP(cod2, aux);
location.href = pagina + ".html";
}
else
alert("La contraseña es incorrecta");
}
function codificarC(passw,num) {
var codigo = 0;
texto = passw.toUpperCase();
for (i=0; i<texto.length; i++) {
letra = texto.substring(i,i+1);
c = alfabeto.indexOf(letra,0) + 1;
codigo = codigo * num + c;
}
return codigo;
}
function decodificarP(pagina,num) {
var result="";
for (i=0;i<pagina.length;i++) {
letra=pagina.substring(i,i+1).toUpperCase();
a=alfabeto.indexOf(letra,0);
a-=(num.substring(i,i+1)*1);
if (a<0) a+=26;
result += alfabeto.substring(a,a+1).toLowerCase();
}
return result;
}
// -->
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="decodificador" onSubmit="decodificar(this); return false;">
Contraseña: <INPUT TYPE="password" NAME="password">
<INPUT TYPE="submit" VALUE="Entrar">
</FORM>
</BODY>
</HTML>
Es complicado y no voy a dar más que algunas pistas sobre cómo funciona,
ya que cuanto más se entienda este script, más probable es que alguien cree
un "rompedor" de contraseñas para él. Básicamente, lo que hace es codificar
la contraseña que le indiquemos y comprobar si coincide con la contraseña
codificada que tiene en la variable cod1.
En caso afirmativo, ya sabe que la contraseña es correcta y pasa a
decodificar la página.
La codificación de la página (contenida en la variable
cod2) es un conjunto de letras de igual longitud
que el nombre real de la página. Cada letra se separa de la letra original por
un número que depende de una codificación algo distinta de la contraseña. Es debido
a la naturaleza de dicha codificación a lo que se debe la restricción de las
longitudes a la que antes hacía referencia.
Podéis probar el ejemplo que acabamos de describir
Por supuesto, este ejemplo siempre se puede mejorar, con cosas como
soporte a varios usuarios. Pero eso es otra historia, y debe ser contada
en otra ocasión (si os interesa saberlo, claro está).