Bienvenido

Esta es una comunidad de programadores freelance

Puedes registrarte para acceder a todas las opciones del foro. Una vez registrado, podrás crear nuevas temas, responder y ganar reputación en la comunidad, enviar mensajes privados, y muchas opciones más.


+ Responder Tema + Crear Nuevo Tema
Resultados 1 al 2 de 2

Tema: Como evitar el XSS
  • Share This Thread!
    • Share on Facebook
    1. #1
      Member Fabián Rodríguez va por un camino distinguido Avatar de Fabián Rodríguez
      Fecha de Ingreso
      29 ene, 10
      Ubicación
      Colombia
      Mensajes
      92

      Talking Como evitar el XSS

      Como evitar el XSS
      JavaScript

      Bueno a pesar de que estamos en foro de PHP, el código que entregaré a continuación hace referencia más a JavaScript, aún así hay que explicar algo de código PHP.

      En PHP si las variables no tienen un filtro o lo tiene pero es inadecuado puede resultar un total peligro para el sitio y comprometer la seguridad del sitio exponiéndolo a un ataque.

      Una página PHP es vulnerable si por ejemplo no impedimos que los usuarios de un foro o libro de visitas inserten cualquier tipo de caracteres, por lo que si no agregamos ese filtro podemos agregar código HTML y JavaScript y la página lo interpretará también, y fácilmente podrían redireccionar nuestra página a otro sitio o cosas así.

      Existe un función en PHP que es htmlentities() que si la agregamos a nuestro código PHP los caracteres raros no se visualizaran como script si no mas bien como texto.

      Sin embargo podemos utilizar código JavaScript para esto. En el tiempo que llevo como programador he visto varias funciones y la que más me ha ayudado es esta:


      [highlight=javascript]
      // JavaScript Document
      function permite(elEvento, permitidos) {
      // Variables que definen los caracteres permitidos
      var numeros = "0123456789";
      var caracteres = " abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUV WXYZ";
      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;
      }[/highlight]

      Si la añadimos por ejemplo a un código como este:
      Código PHP:
      <td>Nombre de usuario:</td><td><input name="id_usu" size="25" onkeypress="return permite(event, 'num')"/></td
      Cada vez que el usuario maliciosos o no inserte un caracter extraño no podra hacerlo ya que la función lo impide.

      Su uso es relativamente fácil de ver, en el evento Onkeypress agregamos return permite(event, 'num') con eso le estamos diciendo que acepte solo números, de resto no aceptará ni letras ni nada.

    2. #2
      Junior Member diego_pereyra_90 va por un camino distinguido
      Fecha de Ingreso
      03 feb, 10
      Ubicación
      capital federal
      Mensajes
      5

      Predeterminado

      Es buena la función pero también sería conveniente comprobarlo desde el lado del servidor. Que pasaría si el usuario malintencionado desactivara javascript de su navegador?.

      Saludos

    + Responder Tema

    Etiquetas para este Tema