¿cómo evitar inyección sql en php?

Iniciado por kinos, 8 Octubre 2010, 23:35 PM

0 Miembros y 2 Visitantes están viendo este tema.

kinos

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 (php) [Seleccionar]
<?php
function addslashes__recursive($var){
if (!
is_array($var))
return 
addslashes($var);
$new_var = array();
foreach (
$var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
return 
$new_var;
}
$_POST=addslashes__recursive($_POST);
$_GET=addslashes__recursive($_GET);
$_REQUEST=addslashes__recursive($_REQUEST);
$_SERVER=addslashes__recursive($_SERVER);
$_COOKIE=addslashes__recursive($_COOKIE);
?>


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?

~ Yoya ~

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

kinos

Y utilizando esa función ya no es necesario nada mas?

~ Yoya ~

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.


jdc

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.

kinos

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 (html4strict) [Seleccionar]
<BR SIZE="&{alert('XSS')}">
<FK STYLE="behavior: url(http://yoursite/xss.htc);">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">


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.?

xassiz~

Es aconsejable utilizar mysql_real_escape_string() para guardar en la bd y htmlentities() para imprimir los datos.

Si lo que coges siempre es un número también puedes evitarte todo con un is_numeric().

Saludos!

Shell Root

Cita de: pablomi en 10 Octubre 2010, 15: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.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

WHK

en el foro de bugs y exploits a nivel web están las mil y un formas de evitar ataques xss, sqli, csrf, etc