Foros del Web » Programando para Internet » PHP »

Evitar Inyección SQL

Estas en el tema de Evitar Inyección SQL en el foro de PHP en Foros del Web. Hola. Estoy implementando un sistema de registro y login de usuarios y estoy un poco obsesionado con la inyección SQL que pudiera llegan a intentar ...
  #1 (permalink)  
Antiguo 31/10/2011, 17:54
 
Fecha de Ingreso: enero-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Evitar Inyección SQL

Hola.

Estoy implementando un sistema de registro y login de usuarios y estoy un poco obsesionado con la inyección SQL que pudiera llegan a intentar algún piratilla malintencionado.

El campo login consta de 2 textbox: usuario (email) y contraseña.

Para validar el campo de usuario (email) uso:
Código PHP:
Ver original
  1. public function mailControl($email){           
  2.             $mail_correcto = 0;
  3.             //compruebo unas cosas primeras
  4.             if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){
  5.                 if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) {
  6.                 //miro si tiene caracter .
  7.                     if (substr_count($email,".")>= 1){
  8.                         //obtengo la terminacion del dominio
  9.                         $term_dom = substr(strrchr ($email, '.'),1);
  10.                         //compruebo que la terminación del dominio sea correcta
  11.                         if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ){
  12.                             //compruebo que lo de antes del dominio sea correcto
  13.                             $antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1);
  14.                             $caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1);
  15.                             if ($caracter_ult != "@" && $caracter_ult != "."){
  16.                                 $mail_correcto = 1;
  17.                             }
  18.                         }
  19.                     }
  20.                 }
  21.             }
  22.             if ($mail_correcto) return true;
  23.             else                return false;          
  24.         }

Para validar la integridad del campo contraseña, solo permito valores alfanumericos. No quiero que puedan poner ni comas, ni puntos, ni apostrofes ni mierdas extrañas, solo numeros y letras. para ellos uso:

Código PHP:
Ver original
  1. public function varcharControl($valor){
  2.     return ctype_alnum($valor);
  3. }

Una vez compruebo q el usuario y contraseña cumplen la integridad exigida paso los 2 campos codificados por md5.


Uso una buena seguridad? Es mejorable? Hay algún agujero que se me escapa?
  #2 (permalink)  
Antiguo 31/10/2011, 17:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Evitar Inyección SQL

Creo que la seguridad que implementas está bien, preferible validar que escapar.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 31/10/2011, 18:06
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Evitar Inyección SQL

Hola que tal.

En el foro se ha discutido mucho este tema, lo que te recomiendo es que búsques andes de preguntar checa esto http://www.forosdelweb.com/search.ph...nyeccion%20sql

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125

Etiquetas: inyección, registro, sql, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:42.