Foros del Web » Programando para Internet » PHP »

Basta con esta funcion para evitar ataques sql?

Estas en el tema de Basta con esta funcion para evitar ataques sql? en el foro de PHP en Foros del Web. Basta con esta funcion para evitar ataques sql por medio de las variables externas? solo para las variables externas, pues se que se puede por ...
  #1 (permalink)  
Antiguo 04/05/2011, 17:03
Avatar de RichBoy  
Fecha de Ingreso: agosto-2010
Mensajes: 177
Antigüedad: 13 años, 7 meses
Puntos: 7
Basta con esta funcion para evitar ataques sql?

Basta con esta funcion para evitar ataques sql por medio de las variables externas? solo para las variables externas, pues se que se puede por otros medios pero por el momento quiero saver si con esta funcion estamos seguros de que no van a inyectar algun codigo maligno atraves de las variable externas.


http://www.forosdelweb.com/f18/ejemp...4/#post2351131

Código PHP:
Ver original
  1. if (!function_exists("GetSQLValueString")) {
  2. function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")  
  3. {
  4.   $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  5.  
  6.   $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  7.  
  8.   switch ($theType) {
  9.     case "text":
  10.       $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  11.       break;    
  12.     case "long":
  13.     case "int":
  14.       $theValue = ($theValue != "") ? intval($theValue) : "NULL";
  15.       break;
  16.     case "double":
  17.       $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
  18.       break;
  19.     case "date":
  20.       $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  21.       break;
  22.     case "defined":
  23.       $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
  24.       break;
  25.   }
  26.   return $theValue;
  27. }
  28. }

ejemplo de llamando a la funcion:
Código PHP:
Ver original
  1. $variable=GetSQLValueString($_GET['Id'],"int");
  #2 (permalink)  
Antiguo 04/05/2011, 23:39
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 7 meses
Puntos: 2237
Respuesta: Basta con esta funcion para evitar ataques sql?

Tengo entendido que esa es una funcion creada por medio de DreamWeaver y si, es util para evitar inyecciones SQL.

Cita:
Iniciado por RichBoy
Basta con esta funcion para evitar ataques sql por medio de las variables externas? solo para las variables externas, pues se que se puede por otros medios...
Creo que necesito un poco de actualizacion... me puedes comentar algo sobre otros medios que se pueden usar para inyeccion SQL?
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 05/05/2011, 02:25
Avatar de RichBoy  
Fecha de Ingreso: agosto-2010
Mensajes: 177
Antigüedad: 13 años, 7 meses
Puntos: 7
Respuesta: Basta con esta funcion para evitar ataques sql?

preguntaselo a HackmanC quien asegura que No, no hay una función definitiva para evitar ataques, inyecciones sql y que ademas no hay una, ni dos, ni cientos, hay miles de formas de hacer iyecciones sql.

Eso me tiene algo confundido, pues yo quiero hacer mi aplicacion segura y evitar ataques, iyecciones sql, pero este man me tiene algo confundido con todo eso que me dice. Me gustaria saver como hacer mi aplicacion segura y es por eso que sigo investigando sobre el tema...

Última edición por RichBoy; 05/05/2011 a las 03:33
  #4 (permalink)  
Antiguo 05/05/2011, 05:29
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Basta con esta funcion para evitar ataques sql?

Bueno, desconozco que quiso indicar, pero mysql_real_escape_string evita primer grado de sql injection.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 05/05/2011, 07:00
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 5 meses
Puntos: 334
Respuesta: Basta con esta funcion para evitar ataques sql?

Bueno como a todos les recomiendo.. si quieres protegerte lo mejor es conocer al enemigo..
te recomiendo te leas una guía de inyecciones SQL para q entiendas las formas comúnmente utilizadas para quebrar la seguridad de los sitios.. una vez entiendas como atacar.. te sera mas fácil defender ^^


saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #6 (permalink)  
Antiguo 05/05/2011, 17:31
Avatar de RichBoy  
Fecha de Ingreso: agosto-2010
Mensajes: 177
Antigüedad: 13 años, 7 meses
Puntos: 7
Respuesta: Basta con esta funcion para evitar ataques sql?

Gracias, bueno para los interesados me encontre este link que se ve bastante bien...

http://phpbarcelona.org/files/phpwor...ckWeb-v1-4.pdf
  #7 (permalink)  
Antiguo 15/05/2011, 03:29
Avatar de C2am  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 2.005
Antigüedad: 15 años, 2 meses
Puntos: 306
Respuesta: Basta con esta funcion para evitar ataques sql?

Tengo una consulta sobre esa función
¿siempre deberá ser "int"'
Digo:
Código HTML:
Ver original
  1. $variable=GetSQLValueString($_GET['Id'],"int");
Porque cuando pongo por ejemplo.
Código HTML:
Ver original
  1. $variable=GetSQLValueString($_POST['titulo'],"text");
, me salta un error al querer guardar en la base de datos.
En cambio si uso "int", a pesar de ser texto no tengo ningun problema.

Si alguien me puede explicar el funcionamiento de la misma le estaría muy agradecido

BUENO, listo, ya comprendí el por qué del error.
Lo que pasa es que en cada case a la variable le agrega comillas simples, lo cual rompía el codigo sql que uso, ya que no utilizo el sprintf() generado por dreamweaver, sino directamente la consulta. aplicando el filtro o función previamente a introducirla en el SELECT o INTO etc.

Lo único que hice fue agregar otro case llamando "texto" donde reemplazo "'" por " "
Código PHP:
Ver original
  1. switch ($theType) {
  2.     case "text":
  3.       $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  4.       break;    
  5. case "texto":
  6.       $theValue = ($theValue != "") ? " " . $theValue . " " : "NULL";
  7.       break;    
  8.     case "long":
  9.     case "int":
  10.       $theValue = ($theValue != "") ? intval($theValue) : "NULL";
  11.       break;
__________________
El mundo nada puede contra un hombre que canta en la miseria.
-- Ernesto Sábato--

Última edición por C2am; 15/05/2011 a las 05:19 Razón: YA ENTENDÍ

Etiquetas: ataques, funcion, 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 03:06.