Foro de elhacker.net

Seguridad Informática => 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 ?

Código:
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
  1. El nick<?
  2. $nick = '´s.-dasdPOAeru0203842u3482947thwef';
  3. if(!preg_match('/^([a-z0-9_\-]{3,20})$/i', $nick)){
  4. echo ' no ';
  5. }else{
  6. echo ' si ';
  7. }
  8. ?>es válido.
  9.  

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
  1. <?
  2. mysql_query("SELECT * FROM usuarios WHERE nick = '".mysql_real_escape_string($_GET['nick'])."'");
  3. ?>
  4.  

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