Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: kinos en 8 Octubre 2010, 23:35 pm



Título: ¿cómo evitar inyección sql en php?
Publicado por: kinos en 8 Octubre 2010, 23:35 pm
Buenas:

Llevo varios días leyendo sobre cómo evitar inyección sql en php y hay mucha información y cada cual hace lo que le parece aplicando lo que cree conveniente. Entre otras cosas esto:

  • Filtrar con expresiones regulares.
  • Filtrar palabras clave como AND, OR, WHERE, SELECT, DELETE, etc..
  • Reemplazar caracteres del tipo ', ", *, ;, etc...
  • Verificar la longitud de las variables.
  • Utilizar Stored Procedure (no se porque es mas seguro...)
  • Utilizar funciones del tipo addslashes().
  • Limitar permisos del usuario en la base de datos.

Se que en Java, por ejemplo tenemos los PreparedStatement que supuestamente te evitan ese tipo de problemas y son bastante cómodos de utilizar.

También he visto en el foro esta función:

Código
  1. <?php
  2. function addslashes__recursive($var){
  3. if (!is_array($var))
  4. return addslashes($var);
  5. $new_var = array();
  6. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  7. return $new_var;
  8. }
  9. $_POST=addslashes__recursive($_POST);
  10. $_GET=addslashes__recursive($_GET);
  11. $_REQUEST=addslashes__recursive($_REQUEST);
  12. $_SERVER=addslashes__recursive($_SERVER);
  13. $_COOKIE=addslashes__recursive($_COOKIE);
  14. ?>

http://foro.elhacker.net/php/pequenos_trucos_en_php-t152467.0.html (http://foro.elhacker.net/php/pequenos_trucos_en_php-t152467.0.html)

Después de haber visto tantas cosas no tengo nada claro que proceso seguir. ¿Vosotros cómo hacéis? ¿Tenéis una formula mágica :P 100% segura?


Título: Re: ¿cómo evitar inyección sql en php?
Publicado por: ~ Yoya ~ en 8 Octubre 2010, 23:49 pm
En PHP lo correcto es usar mysql_real_escape_string() (http://php.net/manual/es/function.mysql-real-escape-string.php)


Título: Re: ¿cómo evitar inyección sql en php?
Publicado por: kinos en 9 Octubre 2010, 00:01 am
Y utilizando esa función ya no es necesario nada mas?


Título: Re: ¿cómo evitar inyección sql en php?
Publicado por: ~ Yoya ~ en 9 Octubre 2010, 01:26 am
no


Título: Re: ¿cómo evitar inyección sql en php?
Publicado por: kinos en 9 Octubre 2010, 01:45 am
Ok


Título: Re: ¿cómo evitar inyección sql en php?
Publicado por: jdc en 9 Octubre 2010, 02:29 am
Esa función cuando ingresés datos a la db y para mostrar htmlspecialchars($variable, ENT_QUOTES) y evitas xss.
 
Con esa política tu sitio será mas seguro.


Título: Re: ¿cómo evitar inyección sql en php?
Publicado por: kinos en 10 Octubre 2010, 14:52 pm
umm... gracias. Eso del xss no lo sabía.

Si no es esto corrígeme.

xss Directo: Por ejemplo, cuando tienes un blog y un usuario te inserta en los comentarios código html con malas intenciones. Del tipo:

Código
  1. <BR SIZE="&{alert('XSS')}">
  2. <FK STYLE="behavior: url(http://yoursite/xss.htc);">
  3. <DIV STYLE="background-image: url(javascript:alert('XSS'))">
  4.  

xss Indirecto: Si encuentras una vulnerabilidad en el facebook y la utilizas para que un usuario X visite un enlace con dominio www.facebook.com que tu has modificado y así poder robarle las cookies.

El indirecto no lo veo tan sencillo.

Ahmmm... y este "htmlentities()" lo sueles utilizar también o no es aconsejable.?


Título: Re: ¿cómo evitar inyección sql en php?
Publicado por: xassiz~ en 10 Octubre 2010, 15:30 pm
Es aconsejable utilizar mysql_real_escape_string() (http://php.net/manual/es/function.mysql-real-escape-string.php) para guardar en la bd y htmlentities() (http://php.net/manual/es/function.htmlentities.php) para imprimir los datos.

Si lo que coges siempre es un número también puedes evitarte todo con un is_numeric() (http://php.net/manual/es/function.is-numeric.php).

Saludos!


Título: Re: ¿cómo evitar inyección sql en php?
Publicado por: Shell Root en 10 Octubre 2010, 17:30 pm
...htmlentities()[/url] para imprimir los datos.
Pero hay que saber usarlo, porque aún así teniendo esa función se puede generar un XSS.


Título: Re: ¿cómo evitar inyección sql en php?
Publicado por: WHK en 11 Octubre 2010, 13:33 pm
en el foro de bugs y exploits a nivel web están las mil y un formas de evitar ataques xss, sqli, csrf, etc


Título: Re: ¿cómo evitar inyección sql en php?
Publicado por: el-brujo en 11 Octubre 2010, 23:27 pm
http://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_9510-t244090.0.html

En el apartado prevención:

Prevención
  • Como evitar la inyeccion sql (http://foro.elhacker.net/nivel_web/como_evitar_la_inyeccion_sql-t252384.0.html)
  • Prevenir SQL Injection ? (http://foro.elhacker.net/seguridad/prevenir_sql_injection-t261480.0.html)
  • Evitar XSS en eval() de ‭‬‭‬‭‬‭‬‭‬‭‬‭‬‭‬javascript (http://foro.elhacker.net/nivel_web/evitar_xss_en_eval-t274302.0.html)
  • PHP upload security (http://foro.elhacker.net/nivel_web/php_upload_security-t277601.0.html)