Esto previene inyeccion sql if(!ereg("^[a-zA-Z0-9_\.-]+$", trim($user))) ?

Iniciado por sissi, 8 Abril 2011, 02:42 AM

0 Miembros y 1 Visitante están viendo este tema.

sissi

La pregunta es por si uso en php algo como

if(!ereg("^[a-zA-Z0-9_\.-]+$", trim($user)))
{
no realizar query
}
else
{
realizar query (select usuario,password from  usuarios where usuario='$user')
}

es suficiente para impedir inyeccion sql.

De antemano gracias.

Shell Root

Citar
Código (php) [Seleccionar]
int ereg ( string $pattern , string $string [, array &$regs ] )
Warning
Esta función ha sido declarada OBSOLETA desde PHP 5.3.0. Su uso está totalmente desaconsejado.


--

Código (php) [Seleccionar]
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
:http://www.php.net/manual/es/function.preg-match.php
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

sissi

Ok es obsoleta pero previenen o no inyeccion sql?

if(preg_match("/^[a-zA-Z0-9_\.-]+$/", trim($user))==0)
{
no realizar query
}
else
{
realizar query (select usuario,password from  usuarios where usuario='$user')
}

~ Yoya ~

Bueno, en este caso si funciona xD, ya que la forma para manipular la SQL seria insertando comillas simples y no se permiten... Te recomiendo que uses la expresiones regulares en casos especifico ya que pudieras usar otras funciones que serian mas rápido...

También te recomiendo que trates de hacer tus propios patrones, pueda que tomes uno por Internet y sea vulnerable a ReDos y se utilice bypassear el patron.


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

sissi

De verdad funciona entonces evitar la inyeccion sql es tan simple como esto mmm pense que habria formas mas complicadas de evadir esta proteccion bueno gracias.

WHK

El problema está en que sucede si quieres ingresar una comilla a la base de datos?

por ejemplo si hago esto """" '''' ``´´ el foro debería comerse las comillas?

la idea principal no es restringir al visitante o usuario final de una aplicación web, para eso existe la función mysql_real_escape_string() siempre y cuando encierres el valor en comillas, por ejemplo:

Código (php) [Seleccionar]
<?php mysql_query('
select * from users where
nick = "'
.mysql_real_escape_string($_GET['user']).'"
limit 1
'
); ?>


solo para strings, para valores numéricos basta usar (int)$_GET['algo']

Si necesitas mas info pasa por este enlace:
http://foro.elhacker.net/nivel_web/como_evitar_la_inyeccion_sql-t252384.0.html
http://foro.elhacker.net/seguridad/prevenir_sql_injection-t261480.0.html
http://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_31510-t244090.0.html

sissi

si tienes razon si deseo ingresar una comilla pues no valdria.
dos preguntas mas, ¿que piensan de mod_security de apache? y .¿mysql_real_escape_string se puede usar con cualquier otro gestor de base de datos ?

gracias de antemano

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.