Resultados 1 al 7 de 7

Como protegerme de SQL injection y XSS

  1. #1 Como protegerme de SQL injection y XSS 
    Iniciado
    Fecha de ingreso
    Apr 2012
    Mensajes
    2
    Descargas
    0
    Uploads
    0
    Hola señores, cual es la mejor forma de protegerme frente a estos ataques en PHP ?

    Estoy usando la librería PDO para hacer todo el tema de la conexión, consultas, inserción ...

    Gracias.
    Citar  
     

  2. #2  
    Colaborador HH
    Fecha de ingreso
    Jun 2006
    Ubicación
    Uruguay
    Mensajes
    1.451
    Descargas
    11
    Uploads
    0
    Usando las mejores prácticas para programación
    http://www.odi.ch/prog/design/php/guide.php

    Saludos,
    Louis Armstrong le dice a Ella Fitzgerald
    "take another drink of wine, and maybe you change your mind"
    Citar  
     

  3. #3  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Escribe algún fragmento de código que consideres vulnerable y la respuesta será más sencilla para indicarte las pautas a seguir.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  4. #4  
    Iniciado
    Fecha de ingreso
    Apr 2012
    Mensajes
    2
    Descargas
    0
    Uploads
    0
    que opinas de este método para PHP?

    consiste en comprobar si los caracteres que introducimos en los campos de formularios se encuentran todos en una lista (a-zA-Z0-9), y en caso de que algun caracter no aparezca en esa lista lanzamos el error y no ejecutamos la consulta/inserción ...

    Qué opinas ??? crees que esto me mantendrá a salvo ?


    function comprobar_nombre_usuario($nombre_usuario){
    //compruebo que el tamaño del string sea válido.
    if (strlen($nombre_usuario)<3 || strlen($nombre_usuario)>20){
    echo $nombre_usuario . " no es válido<br>";
    return false;
    }

    //compruebo que los caracteres sean los permitidos
    $permitidos = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ0123456789";
    for ($i=0; $i<strlen($nombre_usuario); $i++){
    if (strpos($permitidos, substr($nombre_usuario,$i,1))===false){
    echo $nombre_usuario . " no es válido<br>";
    return false;
    }
    }
    echo $nombre_usuario . " es válido<br>";
    return true;
    }
    Citar  
     

  5. #5  
    Moderador HH
    Fecha de ingreso
    Apr 2010
    Mensajes
    1.052
    Descargas
    7
    Uploads
    0
    Cita Iniciado por shairva Ver mensaje
    que opinas de este método para PHP?

    consiste en comprobar si los caracteres que introducimos en los campos de formularios se encuentran todos en una lista (a-zA-Z0-9), y en caso de que algun caracter no aparezca en esa lista lanzamos el error y no ejecutamos la consulta/inserción ...

    Qué opinas ??? crees que esto me mantendrá a salvo ?
    A mí me parece más efectivo controlar lo que el usuario introduce, por lo tanto restringir sólo los caracteres que podrían ser peligrosos (comillas, signos de etiquetas...etc). Con tu código, el usuario no podrá introducir caracteres como la @, las barras / o \ o caracteres como $,#,(),?,¿....etc.

    Un saludo.
    • Taller de programación HackHispano: http://tallerdeprogramacion.es
    • Wargame HackHispano: [PRÓXIMAMENTE]
    • Normas del foro: http://foro.hackhispano.com/announcement.php?f=2
    Citar  
     

  6. #6  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Ok...

    Tu función parece que no cumple la seguridad que esperas y es vulnerable a un XSS. Para el caso de que la función devuelve "false", al ejecutar en cualquiera de los dos casos de los if, la línea:

    Código:
    echo $nombre_usuario . "no valido<br>";
    Estás representando en pantalla lo que el usuario ha escrito. En este caso, si el valor de la variable $nombre fuera:

    Código:
    <script>alert('hola');</script>
    Efectivamente, la función devuelve "false", pues la longitud es superior a 20, y además la variable $nombre_usuario, contiene caracteres: <, > (, ', ;, /, que no están permitidos por tu función, pero sin embargo, está mostrando el mensaje "hola" en el navegador.

    Corrigiendo este defecto, parece que cumple con asegurar ante ataques SQL injections y XSS para el parámetro $nombre_usuario, en cierta medida, pero sólo le bastaría añadir a la cadena de $permitidos, los caracteres comentados (<, >, /, -, ', +, etc...), por una simple cuestión de requisitos de la aplicación y la seguridad que has implementado no será la que esperas, siendo por tanto vulnerable a cualquier inyección de código, logrando que un atacante pueda llevar a cabo otros muchos ataques.

    Un saludo.
    Última edición por hystd; 01-05-2012 a las 00:21
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  7. #7  
    Avanzado
    Fecha de ingreso
    Oct 2010
    Mensajes
    401
    Descargas
    24
    Uploads
    0
    Lo suyo seria sustituir o eliminar los caracteres peligrosos que puedan introducir algun usuario malintencionado, hay una funcion muy util llamada str_replace y str_ireplace para trabajar con arrays, q de seguro te sera util.

    De todas fomas si borras el echo $nombre_usuario, desapareceria el XSS.
    René Pérez Joglar: Pa' tener a un listo que no dice nada prefiero a un idiota que hable mucho.
    Citar  
     

Temas similares

  1. XPath Injection
    Por LUK en el foro INTRUSION
    Respuestas: 0
    Último mensaje: 22-07-2010, 18:55
  2. sql injection
    Por chico1988 en el foro VULNERABILIDADES
    Respuestas: 2
    Último mensaje: 09-06-2009, 00:24
  3. SQL Injection
    Por chico1988 en el foro VULNERABILIDADES
    Respuestas: 12
    Último mensaje: 15-07-2007, 13:48
  4. SQL Injection - SMF 1.0 RC2
    Por JØK en el foro VULNERABILIDADES
    Respuestas: 4
    Último mensaje: 09-08-2006, 16:05
  5. Injection SQL
    Por The_chacal en el foro VULNERABILIDADES
    Respuestas: 1
    Último mensaje: 15-06-2004, 21:25

Marcadores

Marcadores