Foros del Web » Programando para Internet » PHP »

Como prevenir SQL Injection

Estas en el tema de Como prevenir SQL Injection en el foro de PHP en Foros del Web. Hola! me gustaria saber como prevenir este problema que esta tan de moda... ¿hay alguna especie de clase, funcion o filtro que se aplique de ...
  #1 (permalink)  
Antiguo 23/03/2012, 09:30
 
Fecha de Ingreso: marzo-2008
Mensajes: 170
Antigüedad: 16 años, 1 mes
Puntos: 0
Como prevenir SQL Injection

Hola! me gustaria saber como prevenir este problema que esta tan de moda... ¿hay alguna especie de clase, funcion o filtro que se aplique de forma facil y proteja nuestro trabajo?

Utilizo AdoDB, por si alguien sabe la forma en concreto para este framework, aun asi, cualquier ayuda o indicación me vale.

Gracias chicos.

EDIT:

He leido que se puede usar esto:

mysql_real_escape_string($usuario),
mysql_real_escape_string($password);

¿se usaria asi?

$usuario = mysql_real_escape_string($_POST['usuario']);

GRACIAS!

Última edición por gilberdesigns; 23/03/2012 a las 09:37
  #2 (permalink)  
Antiguo 23/03/2012, 10:06
Avatar de weissbier  
Fecha de Ingreso: febrero-2012
Ubicación: Nella mia casa
Mensajes: 31
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Como prevenir SQL Injection

Exacto, usa mysql_real_escape_string() para evitar la injección SQL. Con eso y limitando los valores que contiene tu variable... no tendrás problemas.
  #3 (permalink)  
Antiguo 23/03/2012, 10:40
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 10 meses
Puntos: 53
Respuesta: Como prevenir SQL Injection

Anexo a weissbier:

Personalmente me baso en permisos de usuario en el gestor de base de datos y expresiones regulares aplicadas tanto en cliente como en servidor para limitar las entradas de datos.

Y por si en algún caso debo llevar caracteres especiales a mi base de datos utilizo htmlspecialchars(), evitando incoherencia a la hora de mostrar los registros.

Documentación: http://php.net/manual/es/function.htmlspecialchars.php
__________________
Programar dejó de ser una profesión acusada en la oscuridad y disfrutada fríamente... para convertirse en un arte.
  #4 (permalink)  
Antiguo 23/03/2012, 11:11
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Como prevenir SQL Injection

Bueno, para este tipo de ataque, yo haría algo así:

En el archivo determinado, de esta forma escapo los caracteres:
Código PHP:
$id scape($_POST['formID']); 
Y esa función obviamente estaría en un archivo de funciones, así:
Código PHP:
function scape($text){
  if(!
get_magic_quotes_gpc()) $text addslashes($text);
  return 
trim($text);

NOTA. Esto es solo una forma de prevenir un ataque a tu base de datos, puesto que existen muchas maneras de atacar... y para eso, ya tendrias que ver temas bien detallados sobre ataques a la base de datos.

Suerte
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #5 (permalink)  
Antiguo 23/03/2012, 12:27
 
Fecha de Ingreso: marzo-2008
Mensajes: 170
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Como prevenir SQL Injection

Gracias por responder, lo tengo claro entonces.

Masterojitos que le estas diciendo que haga a esa funcion? que si no existen magic_quotes que haga / delante de las ' ?¿
  #6 (permalink)  
Antiguo 23/03/2012, 12:41
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: Como prevenir SQL Injection

Otra opción muy interesantes sería usar PDO y sus consultas preparadas. evitando así inyecciones SQL.

Realmente PDO ofrece más ventajas como el permitirte conectarte a otros motores como PostgreSQL, SQLite, etc.

Saludos,
  #7 (permalink)  
Antiguo 23/03/2012, 14:09
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Como prevenir SQL Injection

gilberdesigns, SI ^^
Ya que si tienes activado magic_quotes, este escapa las comillas, de tenerlo desactivado, ahi es cuando se utiliza addslashes.
Y toma muy encuenta lo de OsSk4R, ya que eso tambien te lo hiba a sugerir, pero al ver que usabas ADODB, pues seria un poco dificil cambiar todo el codigo de tu proyecto a PDO.... pero si tienes la oportunidad.... usa PDO ;)
Suerte
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #8 (permalink)  
Antiguo 23/03/2012, 16:53
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 2
Respuesta: Como prevenir SQL Injection

Una cosa, yo uso el objeto pdo para conectar a la base de datos y utilizo sus comandos para ejecutar consultas y aún así pude inyectar código sql. Hice una prueba y receurdo que en el login o password, si ponía algo como '"drop table usuarios"'; lo insertaba como código sql en la consulta y la ejecutaba ( lo que puse no es exacto, lo estoy haciendo a ojo ) qué tendría que hacer para evitar algo así ?
  #9 (permalink)  
Antiguo 24/03/2012, 08:13
Avatar de lambar  
Fecha de Ingreso: marzo-2005
Ubicación: Murcia Fumeta
Mensajes: 55
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Como prevenir SQL Injection

ésta es la función que utiliza oscommerce y la que yo utilizo

Código PHP:
function tep_db_input($string$link 'db_link') {
  global $
$link;

  if (
function_exists('mysql_real_escape_string')) {
    return 
mysql_real_escape_string($string, $$link);
  } elseif (
function_exists('mysql_escape_string')) {
    return 
mysql_escape_string($string);
  }

  return 
addslashes($string);

  #10 (permalink)  
Antiguo 24/03/2012, 10:11
 
Fecha de Ingreso: abril-2011
Mensajes: 33
Antigüedad: 13 años
Puntos: 7
Respuesta: Como prevenir SQL Injection

yo utilizo esa función, si tienes instalado php 5.3 puedes filtrar con varfilter

Código PHP:
Ver original
  1. function SanitizeInputSQL($dirty_input) {
  2.     if (get_magic_quotes_gpc()) $value = stripslashes($dirty_input);
  3.     $value = mysql_real_escape_string($dirty_input);
  4.     return $value;
  5. }

Extraida de [URL="http://www.webserveis.com/115/sanitizar-entrada-prevenir-inyeccion-sql-en-php/"]aqui[/URL]
__________________
www.webserveis.com
  #11 (permalink)  
Antiguo 24/03/2012, 11:04
 
Fecha de Ingreso: marzo-2008
Mensajes: 170
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Como prevenir SQL Injection

Gracias a todos!

Voy a darle caña a ver ;)

Etiquetas: injection, prevenir, sql
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 20:26.