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.
Citar
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.
--
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
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')
}
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.
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.
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:
<?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
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
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