Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: sissi en 8 Abril 2011, 02:42 am



Título: Esto previene inyeccion sql if(!ereg("^[a-zA-Z0-9_\.-]+$", trim($user))) ?
Publicado por: sissi en 8 Abril 2011, 02:42 am
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.


Título: Re: Esto previene inyeccion sql if(!ereg("^[a-zA-Z0-9_\.-]+$", trim($user))) ?
Publicado por: Shell Root en 8 Abril 2011, 03:22 am
Citar
Código
  1. 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
  1. 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


Título: Re: Esto previene inyeccion sql if(!ereg("^[a-zA-Z0-9_\.-]+$", trim($user))) ?
Publicado por: sissi en 8 Abril 2011, 05:50 am
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')
}


Título: Re: Esto previene inyeccion sql if(!ereg("^[a-zA-Z0-9_\.-]+$", trim($user))) ?
Publicado por: ~ Yoya ~ en 8 Abril 2011, 14:20 pm
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.


Título: Re: Esto previene inyeccion sql if(!ereg("^[a-zA-Z0-9_\.-]+$", trim($user))) ?
Publicado por: sissi en 16 Abril 2011, 02:08 am
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.


Título: Re: Esto previene inyeccion sql if(!ereg("^[a-zA-Z0-9_\.-]+$", trim($user))) ?
Publicado por: WHK en 17 Abril 2011, 06:34 am
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
  1. <?php mysql_query('
  2. select * from users where
  3. nick = "'.mysql_real_escape_string($_GET['user']).'"
  4. limit 1
  5. '); ?>

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


Título: Re: Esto previene inyeccion sql if(!ereg("^[a-zA-Z0-9_\.-]+$", trim($user))) ?
Publicado por: sissi en 23 Junio 2011, 08:35 am
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


Título: Re: Esto previene inyeccion sql if(!ereg("^[a-zA-Z0-9_\.-]+$", trim($user))) ?
Publicado por: Shell Root en 23 Junio 2011, 19:16 pm
Con PDO es mucho más fácil y sirve para cualquier motor de base de datos...

:http://www.phpbuilder.com/manual/function.pdo-quote.php