PHP - Vulnerabilidades Web

   
Vista:

Vulnerabilidades Web

Publicado por Isnel González Díaz (4 intervenciones) el 12/05/2014 18:42:35
Hola a los gurús! Estoy en problemas con un proyecto y necesito su ayuda.

Es un sitio Web en el que utilizo PDO, pero realmente estoy enfrascado en la seguridad del mismo (XSS, SQL Injection, etc.) y aún no estoy familiarizado con esto último. Ahí necesito su ayuda.

Puede alguien por favor decirme cuál/es Script PHP usar para la parte de SQL Injection?

Gracias a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Vulnerabilidades Web

Publicado por xve (5519 intervenciones) el 12/05/2014 19:40:39
Hola Isnel, una de las ventajas de utilizar PDO, es que no hay posibilidad de ejecutar sqlinyection, ya que no utilizas ningún tipo de comillas... el mismo control lo gestiona.

Todo, esto, siempre y cuando utilices PDO como es debido... si sigues utilizando la manera típica, puedes tener problemas...

La manera tipica es poniendo los valores dentro de la cadena... algo así:

"select * from tabla where id=".$varPHP." AND ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Vulnerabilidades Web

Publicado por Isnel (4 intervenciones) el 12/05/2014 21:53:34
Muchas gracias XVE por responder tan prontamente; y ya han sido varios los archivos que no presentan vulnerabilidades cuando paso el software VEGA (no sé qué tan confiable sea) al sitio, pero aún muestra algunas después de arreglarlas como la siguiente:

/contacto/ [enviado=enviado titulo=1 nombre=1 correo=1' AND 1=2 -- telefono=1 motivo=1 comentario=1 verificacion=1 informacion=on aviso=on ]

Me dice que es del tipo Blind Text Injection Differential, aún estando desarrollado el script PHP utilizando PDO. Utilizo además mysql_real_escape_string, que según algunos expertos es, entre otros, uno de los más importantes para resolver este problema. Quizá pueda indicarme usted alguna otra manera de resolver este asunto XVE, si su tiempo y deseo se lo permiten.

Nuevamente muchas gracias por su contestación y su apoyo. Gracias muchas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Vulnerabilidades Web

Publicado por xve (5519 intervenciones) el 13/05/2014 08:54:01
Hola Isnel, nos puedes mostrar como utilizas las consultas con PDO?
No hay que escapar las variables en PDO si lo haces correctamente.

Revisa este ejemplo:
http://www.lawebdelprogramador.com/codigo/PHP/2284-Ejemplo_de_como_guardar_un_formulario_en_base_de_datos_con_PDO.html

Yo no lo utilizo así, ya que yo utilizo los interrogantes (?) pero sirve.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Vulnerabilidades Web

Publicado por Isnel (4 intervenciones) el 13/05/2014 18:24:35
Nuevamente muchísimas gracias XVE por responder.

Pues utilizo el PDO (y todo se inserta correctamente en MySQL) como sigue a continuación (hay más variables POST pero solo puse estas como ejemplo):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@ $postEnviado = $_POST [ 'enviado' ];
@ $postNombre = trim ( $_POST [ 'nombre' ] );
@ $postCorreo = trim ( $_POST [ 'correo' ] );
@ $postComentario = trim ( $_POST [ 'comentario' ] );
 
if ( $postEnviado ) {
   require_once ( '../_script/siteCore.php' );
   try {
      $objContacto = new PDO ( 'mysql:charset=' . $charset . ';host=' . $host . ';dbname=' . $dbase, $user, $pass );
      $stmContacto = $objContacto -> prepare ( '
         INSERT INTO bes_contactanos (
            Nombre,
            Email,
            Comentario
         )
         VALUES (
            :nombre,
            :email,
            :comentario
         )'
      );
      $stmContacto -> bindParam ( 'nombre', $postNombre, PDO::PARAM_STR );
      $stmContacto -> bindParam ( 'email', $postCorreo, PDO::PARAM_STR );
      $stmContacto -> bindParam ( 'comentario', $postComentario, PDO::PARAM_STR );
      $stmContacto -> execute ();
      $objContacto = null;
      }
   catch ( PDOException $exception ) {
      include_once ( '../_script/exceptionPDO.php' );   // Página dónde muestro un error genérico
   }
   $objContacto = null;
}
 
echo '<form name="contacto" action="./" method="post">';
   echo '<input type="hidden" name="enviado" value="enviado">';
   echo '<span>Nombre completo</span> *';
   echo '<br>';
   echo '<input title="Nombre completo" type="text" name="nombre" placeholder="Su nombre completo" value="' . $postNombre. '" spellcheck="false">';
   echo '<br>';
   echo '<span>Correo electr&oacute;nico</span> *';
   echo '<br>';
   echo '<input title="Correo electr&oacute;nico" type="text" name="correo" placeholder="nombre@dominio.com" value="' . $postCorreo. '" spellcheck="false">';
   echo '<br>';
   echo '<span>Comentario</span> *';
   echo '<br>';
   echo '<textarea title="Comentario" name="comentario" placeholder="&iquest;Cu&aacute;les son sus comentarios o dudas?">' . $postComentario. '</textarea>';
   echo '<br>';
   echo '<input title="Enviar" type="submit" value="Enviar">';
echo '</form>';

Lo que sucede es que en en la página -'../_script/siteCore.php'- que llamo encima están las funciones de inputFilter (de seguro sabe usted que se tratan de procedimientos para limpiar las variables GET y POST que entren a la página) porque así es como aconsejan en Internet algunos expertos, peo no las está limpiando.

Me dice usted que no hace falta y le entiendo, pero es que sigue esta página de contacto sin limpiar esas variables de formulario.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar