Ver Mensaje Individual
  #21 (permalink)  
Antiguo 30/01/2013, 15:08
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Voy a agregar un aporte , se basa en sanear los datos que entrega el cliente al servidor digamos como una capa intermedia , he de explicar que el script solamente esta basado en datos $_GET pero su uso lo aconsejo en todas las variables $GLOBALS globales y sanear segun la necesidad , este script es automatico y sanea todos los datos que provienen de $_GET antes de llamarlo en la aplicacion para su uso , lo que se trata es entregarselo a la aplicacion ya saneado para su uso , la verificacion sen este caso en los $_GET lo he basado solamente en alfanumericos solo dejaremos pasar datos originales que sean alfanumericos de lo contrario retiraremos cualquier caracter invalido , revaluarla como NULL o destruirla totalmente , antes de el saneamiento guardaremos en memoria en una variable de session el dato original , la intencion es verificar los datos que sean alfanumericos de esta manera estamos fortificando el sistema y eliminado varias vulnerabilidades web.

ami me gusta aplicarlo en vez de solo a $_GET en $GLOBALS y segun el array ya sea $_POST , $_FILES , $_REQUEST aplicar el saneamiento correspondiente , asegurandonos de que no entra nada que no tuviera que llegar.

si deseas que no solo deje pasar la puerta a alfanumericos tan solo cambia la funcion ctype_alnum() , este ejemplo es muy basico y espero que sirva como orientacion

el script viene configurado con un ataque simple , despues de ver el ataque descomenta las lineas DE PRUEBA

de una en una , son ejemplos sencillos de que hacer en caso de que la variable no fuera en este caso alfanumerico , retirar caracteres , convertirlos o simplemente dar un valor null al dato , para que no pudiera actuar.

para hacer pruebas viene en el script un get javascript de prueba pero puedes pasar datos via url y automaticamente los escapara , prueba el resultado

una manera muy simple de evitar algunas vulnerabilidades web ya que solo dejando pasar alfanumericos evita muchos posibles ataques

Código PHP:
Ver original
  1. <?php
  2.      
  3.     // creamos la session
  4.     session_start();
  5.      
  6.     // un ejemplo de un get javascript
  7.     $_GET['QUERY']= "<script language='javascript' type='text/javascript'>alert('TU WEB ES VULNERABLE PODRIA HACER MUCHAS COSAS MALAS.');</script>";
  8.      
  9.     // volcado de datos get , dato original.
  10.     var_dump($_GET);
  11.      
  12.     // comprobacion de get
  13.     if( ! isset($_GET) || empty($_GET))
  14.     {
  15.         // mensaje de salida si es false
  16.         print('No existe ninguna variable get');
  17.     }
  18.     else
  19.     {
  20.         // verificacion de datos
  21.         foreach($_GET as $value=>$val)
  22.         {
  23.             // creamos la session con el dato original , guardamos en memoria el dato original antes de actuar
  24.             $_SESSION['GET'][$value] = $val;
  25.      
  26.             // comprobamos si el valor es alfanumérico
  27.             if( ! ctype_alnum($_GET[$value]))
  28.             {
  29.                 // en este caso imaginemos que no existe ningun saneamiento, para ver que podria pasar.
  30.                
  31.                 // PRIMERO PROBAREMOS SIN NINGUN ESCAPADO , DESPUES DESCOMENTAR LOS EJEMPLOS
  32.      
  33.                 // vamos a sanear ahora los datos (convertir caracteres htmlspecialchars)o (retirarlos strip_tags())
  34.      
  35.                 // ejemplo de funciones
  36.      
  37.                 //$_GET[$value] = strip_tags($_GET[$value]);
  38.      
  39.                 // $_GET[$value] = htmlspecialchars($_GET[$value]);
  40.  
  41.                 // $_GET[$value] = NULL;
  42.  
  43.                 // unset($_GET[$value]);
  44.  
  45.  
  46.               /*  tambien podemos añadir verificaciones para otros tipos de datos como por ejemplo un email
  47.  
  48.               if(! preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_GET[$value]))
  49.               {
  50.  
  51.                 $_GET[$value] = NULL;
  52.  
  53.               }
  54.  
  55.               */
  56.  
  57.                      
  58.                    
  59.      
  60.                
  61.            
  62.      
  63.             }
  64.             // ejecutar variable para la prueba
  65.             echo $_GET[$value];
  66.         }
  67.     }
  68.      
  69.     // volcado de datos get , saneados.
  70.     var_dump($_GET);
  71.      
  72. ?>


espero haberme explicado lo mejor posible , no soy muy tecnico sorry!!

Última edición por webankenovi; 30/01/2013 a las 15:52