Test Foro de elhacker.net SMF 2.1

Seguridad Informática => Bugs y Exploits => Hacking => Nivel Web => Mensaje iniciado por: cybero en 30 Abril 2012, 00:30 AM

Título: Es esto suficiente para evitar SQL Injection?
Publicado por: cybero en 30 Abril 2012, 00:30 AM
que opinas de este método para PHP?

consiste en comprobar si los caracteres que introducimos en los campos de formularios se encuentran todos en una lista (a-zA-Z0-9), y en caso de que algun caracter no aparezca en esa lista lanzamos el error y no ejecutamos la consulta/inserción ...

Qué opinas ??? crees que esto mantendrá a salvo ?

function comprobar_nombre_usuario($nombre_usuario){
//compruebo que el tamaño del string sea válido.
if (strlen($nombre_usuario)<3 || strlen($nombre_usuario)>20){
echo $nombre_usuario . " no es válido<br>";
return false;
}

//compruebo que los caracteres sean los permitidos
$permitidos = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
for ($i=0; $i<strlen($nombre_usuario); $i++){
if (strpos($permitidos, substr($nombre_usuario,$i,1))===false){
echo $nombre_usuario . " no es válido<br>";
return false;
}
}
echo $nombre_usuario . " es válido<br>";
return true;
}
Título: Re: Es esto suficiente para evitar SQL Injection?
Publicado por: Shout en 30 Abril 2012, 01:24 AM
No, lo mejor es que uses preg_match:
Código (php) [Seleccionar]

El nick<?
$nick = '´s.-dasdPOAeru0203842u3482947thwef';
if(!preg_match('/^([a-z0-9_\-]{3,20})$/i', $nick)){
echo ' no ';
}else{
echo ' si ';
}
?>es válido.


Es el mejor modo para filtrar un nick.


Ahora, si quieres evitar el SQLi, lo mejor es filtrar CADA dato que te da el usuario con mysql_real_escape_string:
Código (php) [Seleccionar]

<?
mysql_query("SELECT * FROM usuarios WHERE nick = '".mysql_real_escape_string($_GET['nick'])."'");
?>


Con eso estás protegido. =)
Título: Re: Es esto suficiente para evitar SQL Injection?
Publicado por: cybero en 30 Abril 2012, 01:42 AM
que fallos le ves a mi método ?
Título: Re: Es esto suficiente para evitar SQL Injection?
Publicado por: cybero en 30 Abril 2012, 12:58 PM
up