Foros del Web » Programando para Internet » PHP »

Funcion Anti SQL Injection [PHP,ExpReg.]

Estas en el tema de Funcion Anti SQL Injection [PHP,ExpReg.] en el foro de PHP en Foros del Web. Hola a todos, necesito implementar en el servidor de la empresa una funcion que evite las inyecciones SQL XSS y otras cosas potencialmente peligrosas... Ya ...
  #1 (permalink)  
Antiguo 21/01/2010, 15:34
 
Fecha de Ingreso: mayo-2009
Mensajes: 13
Antigüedad: 15 años, 6 meses
Puntos: 0
Exclamación Funcion Anti SQL Injection [PHP,ExpReg.]

Hola a todos, necesito implementar en el servidor de la empresa una funcion que evite las inyecciones SQL XSS y otras cosas potencialmente peligrosas...
Ya tengo lo siguiente:

Código PHP:
function AntiSQLi($variable) {
$inyecciones  'union|\/\*\*\/|having|select|and|order|group|insert|\;|0x|\..\/|document\.|\.(php|asp|cfm|txt|html|htm|doc)|shadow|';
$expreg "/(?:".$inyecciones.")/i";
if (
preg_match_all($expreg,urldecode($variable),$encontrado)) { echo '<h3>Tu acceso ha sido bloqueado.</h3>'$hacking=true// Email al webmaster + Banear al usuario }

Esa funcion se la paso a todas las variables que puedan venir en un llamado a la pagina con por ejemplo esto otro:

Código PHP:
foreach($_REQUEST as $variable=>$valor){ 
$found AntiSQLi($_REQUEST[$variable]);

Entonces hasta ahi esta bien, pero necesito validar con expresiones regulares lo siguiente $inyecciones = 'having|select|and|order|group|'; y que despues de cada sub patron venga necesariamente uno de los siguiente signos: / o + o un espacio en blanco o su equivalente en codigo ASCII, me hago entender ???
el slash me lo toma pero no el signo +, incluso escapandolo con el backslash asi: \+ y el espacio en blanco no se como pedirlo con expresiones regulares...


Muchas Gracias de antemano
  #2 (permalink)  
Antiguo 21/01/2010, 17:24
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: Funcion Anti SQL Injection [PHP,ExpReg.]

Y porque no usas mysql_real_escape_string()????
Si queres hallar esas palabras la expresion regular seria algo asi creo

Código PHP:
Ver original
  1. /\bselect\b/i
  2. /\border\b/i
  3. /\bgroup\b/i
  4. // Y asi con las demas

Para quitar los espacios en blanco si no me equivoco existe la funcion trim()
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 21/01/2010, 22:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Funcion Anti SQL Injection [PHP,ExpReg.]

además, no se me hace justo que elimines texto de la entrada..

imaginemos que el texto que vamos a "escapar" contiene código SQL, pues dicha función arruinaría todo el sentido...

prevenir un ataque de SQL no es eliminar porciones de texto deliberadamente, sino que que se trata de limpiar la entrada, pero eso no quiere decir "eliminar" la información...

vamos, tan solo hay que escapar los caracteres débiles en cuanto a seguridad... no mas!! (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 22/01/2010, 06:12
 
Fecha de Ingreso: mayo-2009
Mensajes: 13
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Funcion Anti SQL Injection [PHP,ExpReg.]

jackson666 Muchas gracias, me funciono como queria con /\bselect\b/i , ah y la funcion mysql_real_escape_string() no es totalmente segura y ademas no me da los resultados que yo deseo.

pateketrueke Tienes mucha razon, sin embargo, debes saber que mi intencion no es eliminar esas palabras claves de las variables sino que a partir de la deteccion de intento de inyeccion pueda enviar un correo al webmaster, guardar en base de datos y banear al usuario o IP.
Es un sistema de auditoria de seguridad de una aplicacion Web.
Y eso de que se pueda pasar consulta SQL por medio de una variable no me parece para nada, incluso creo que cae en las malas practicas de un Programador, es como dejar una Inyeccion SQL con intencion, posibilitando al atacante realizar consultas sin impedimento alguno.

de todas maneras gracias por sus comentarios.
Saludos
  #5 (permalink)  
Antiguo 29/05/2010, 20:34
 
Fecha de Ingreso: octubre-2007
Mensajes: 21
Antigüedad: 17 años
Puntos: 0
Respuesta: Funcion Anti SQL Injection [PHP,ExpReg.]

Cita:
Iniciado por izrrah Ver Mensaje
jackson666 Muchas gracias, me funciono como queria con /\bselect\b/i , ah y la funcion mysql_real_escape_string() no es totalmente segura y ademas no me da los resultados que yo deseo.

pateketrueke Tienes mucha razon, sin embargo, debes saber que mi intencion no es eliminar esas palabras claves de las variables sino que a partir de la deteccion de intento de inyeccion pueda enviar un correo al webmaster, guardar en base de datos y banear al usuario o IP.
Es un sistema de auditoria de seguridad de una aplicacion Web.
Y eso de que se pueda pasar consulta SQL por medio de una variable no me parece para nada, incluso creo que cae en las malas practicas de un Programador, es como dejar una Inyeccion SQL con intencion, posibilitando al atacante realizar consultas sin impedimento alguno.

de todas maneras gracias por sus comentarios.
Saludos
Hola izrrah podrias compartir la funcion completa de antisql con lo añadido de select group

Etiquetas: funcion, injection, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:16.