elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  Nivel Web (Moderadores: sirdarckcat, WHK)
| | | | |-+  Es esto suficiente para evitar SQL Injection?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Es esto suficiente para evitar SQL Injection?  (Leído 3,430 veces)
cybero

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Es esto suficiente para evitar SQL Injection?
« 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;
}
« Última modificación: 30 Abril 2012, 00:32 am por cybero » En línea

Shout

Desconectado Desconectado

Mensajes: 191


Acid


Ver Perfil
Re: Es esto suficiente para evitar SQL Injection?
« Respuesta #1 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. =)
En línea

I'll bring you death and pestilence, I'll bring you down on my own
cybero

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Re: Es esto suficiente para evitar SQL Injection?
« Respuesta #2 en: 30 Abril 2012, 01:42 am »

que fallos le ves a mi método ?
En línea

cybero

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Re: Es esto suficiente para evitar SQL Injection?
« Respuesta #3 en: 30 Abril 2012, 12:58 pm »

up
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines