Librería en JavaScript para validar formularios y evitar el XSS (Cross Site Scripting)



El XSS o Cross Site Scripting, es una vulnerabilidad que se da en aplicaciones web por un mal filtro de las variables. Esto quiere decir que un usuario mal intencionado puede agregar “código maligno” en forma de scripts y ejecutarlo, obteniendo así un mal funcionamiento de nuestro script, una redirección o en el peor de los casos acceso al servidor.

Vamos a ver un ejemplo. Supongamos que tenemos una especie de libro de visitas en PHP, que guarda sus datos en un archivo de texto y luego los muestra. Algo como esto:

<?php
if(isset($_POST['nombre'])){
    $nombre = $_POST['nombre'];
    $fichero=fopen('libro.txt','w');
    fwrite($fichero,$nombre);
    fclose($fichero);
}
?>

<html>
<head>
<title>Demostración del Cross Site Scripting</title>
</head>
<body>
<form name="formulario" method="post" action="index.php">
<table>
<tr>
<td>Ingresa tu nombre </td>
<td><input type="text" name="nombre" /></td>
<td><input type="submit" name="enviar" value="Enviar"</td>
</tr>
</table>
</form>
<?php
$fichero = fopen('libro.txt',"r+");
while ($linea = fgets($fichero,1024)){
    $texto = $linea;
    echo "Tu nombre es: ".$texto;
}
fclose($fichero);
?>
</body>
</html>

Si analizan el código anterior, pueden ver que si llegáramos a insertar código JavaScript a nuestro formulario, este lo interpretará y se ejecutará el código normalmente, por lo que hay XSS.

Un XSS se puede prevenir añadiendo un filtro a las variables, y evitando que se puedan insertar caracteres especiales, esto lo podemos hacer con JSValidate, pero también existe otra librería que podemos añadir a nuestro script PHP:

// JavaScript Document
function permite(elEvento, permitidos) {
  // Variables que definen los caracteres permitidos
  var numeros = "0123456789";
  var caracteres = " abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
  var numeros_caracteres = numeros + caracteres;
  var teclas_especiales = [8, 37, 39, 46, 9];
  // 8 = BackSpace, 46 = Supr, 37 = flecha izquierda, 39 = flecha derecha 9=suprimir

  // Seleccionar los caracteres a partir del parámetro de la función
  switch(permitidos) {
    case 'num':
      permitidos = numeros;
      break;
    case 'car':
      permitidos = caracteres;
      break;
    case 'num_car':
      permitidos = numeros_caracteres;
      break;
  }

  // Obtener la tecla pulsada
  var evento = elEvento || window.event;
  var codigoCaracter = evento.charCode || evento.keyCode;
  var caracter = String.fromCharCode(codigoCaracter);

  // Comprobar si la tecla pulsada es alguna de las teclas especiales
  // (teclas de borrado y flechas horizontales)
  var tecla_especial = false;
  for(var i in teclas_especiales) {
    if(codigoCaracter == teclas_especiales[i]) {
      tecla_especial = true;
      break;
    }
  }

  // Comprobar si la tecla pulsada se encuentra en los caracteres permitidos
  // o si es una tecla especial
  return permitidos.indexOf(caracter) != -1 || tecla_especial;
}

La forma de llamarlo sería en el evento OnKeypress del campo de texto y añadiendole como parámetro el nombre que hace referencia a los caracteres permitidos. es decir, “num” para solo números, “car” para solo caracteres, y “num_car” para números y letras.

<input name=”id_usu” size=”25″ onkeypress=”return permite(event, ‘num’)”/>

Desconozco el autor de la librería.

[htm]<td><input name=”id_usu” size=”25″ onkeypress=”return permite(event, ‘num’)”/></td>[/html]
VN:F [1.8.7_1070]
Rating: 0.0/10 (0 votes cast)
VN:F [1.8.7_1070]
Rating: 0 (from 0 votes)
Si te gusto este artículo ayudame a divulgarlo:
  • Facebook
  • Google Bookmarks
  • Meneame
  • Identi.ca
  • Twitter
  • BarraPunto
  • Bitacoras.com
  • del.icio.us
  • Digg
  • LinkedIn
  • MisterWong
  • MySpace
  • Reddit
  • Technorati

También te puede interesar...