Es esto suficiente para evitar SQL Injection?

Iniciado por cybero, 30 Abril 2012, 00:30 AM

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

cybero

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;
}

Shout

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. =)
I'll bring you death and pestilence, I'll bring you down on my own

cybero