Foros del Web » Programando para Internet » PHP »

Me lo podeis explicar??

Estas en el tema de Me lo podeis explicar?? en el foro de PHP en Foros del Web. Hola a todos, buscando en este foro (antes de postear a lo loco, mas de uno me lo agradecera) sobre la seguridad para evitar las ...
  #1 (permalink)  
Antiguo 27/11/2008, 14:57
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Pregunta Me lo podeis explicar??

Hola a todos, buscando en este foro (antes de postear a lo loco, mas de uno me lo agradecera) sobre la seguridad para evitar las temidas inyecciones sql, me tope con este codigo:

usa esta funcion para todas las variables externas $_GET $_POST $_COOKIE etc...

Código PHP:

Código PHP
:

if (!
function_exists("GetSQLValueString")) { 
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue "")  

  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); 

  switch (
$theType) { 
    case 
"text"
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL"
      break;     
    case 
"long"
    case 
"int"
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL"
      break; 
    case 
"double"
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL"
      break; 
    case 
"date"
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL"
      break; 
    case 
"defined"
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue
      break; 
  } 
  return 
$theValue


ejemplo de llamando a la funcion:

Código PHP:
$variable=GetSQLValueString($_GET['Id'],"int"); 
Mi pregunta es: ¿alquien me lo puede explicar como funciona y que debo modificar? Supuestamente sirve para eliminar las comillas y codigo malicioso que intenta hacerse pasar por usuario.
Gracias por lo menos por leer ;)
  #2 (permalink)  
Antiguo 27/11/2008, 15:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Me lo podeis explicar??

si te fijas ahí se usa alguna de estas dos funciones

mysql_real_escape_string

mysql_escape_string

lo mejor, es que leas el manual de PHP al respecto

también, si deseas saber mas de SQLInjection ... busca, hay bastante información en la red...

suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/11/2008, 15:11
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Me lo podeis explicar??

Gracias pateketrueke, no esperaba que me lo dieras machacado pero tampoco asi. de todas maneras gracias por contestar
  #4 (permalink)  
Antiguo 27/11/2008, 15:16
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Me lo podeis explicar??

otra cosilla, su funcionamiento es que en cada una que pone $thevalue, tengo que poner una a una las variables que llevo a las consultas sql?? Ya digo que de este codigo no tengo ni idea
  #5 (permalink)  
Antiguo 27/11/2008, 15:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Me lo podeis explicar??

si, es algo así ....

cada variable que necesites la puedes pasar por aquí, si es a lo que te refieres...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 27/11/2008, 15:53
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Me lo podeis explicar??

Y si pruebas prepared statements??

Un link (en español)
Otro link (en inglés)

Creo que es mejor dejárselo al mismo motor

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #7 (permalink)  
Antiguo 27/11/2008, 16:29
Avatar de srsombrero  
Fecha de Ingreso: marzo-2008
Mensajes: 128
Antigüedad: 16 años
Puntos: 0
Respuesta: Me lo podeis explicar??

Código PHP:
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue
Aca esta utilizando el operador ternario.
Si esta definida la directiva get_magic_quotes_gpc() en el php.ini, le quita los slashes o el "escape de las comillas simples" a el valor para consultar que esta en la variable $theValue, lo que hace magic_quotes_gpc es escapar automaticamente a todas las variables que pases con $_GET o $_POST. Es decir si pasaste pagina.php?Busqueda=Esta ' Es la busqueda, automaticamente sin que tengas que utilizar la funcion magic_quotes_gpc lo dejara asi Esta \' Es la busqueda.

En este caso lo quita automaticamente.

Y luego

Código PHP:
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); 
Hace lo mismo, si se puede utilizar la funcion mysql_real_escape_string lo hace por real_scape_string, sino lo hace por mysql_escape_string.

La funcion mysqsl_escape_string actua similarmente a addslashes...
Pero dicen por ahi que es mejor...
En todo caso lo que hace es escapar tambien las comillas, caracteres especiales...
etc.


Código PHP:
switch ($theType) { 
    case 
"text"
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL"
      break;     
    case 
"long"
    case 
"int"
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL"
      break; 
    case 
"double"
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL"
      break; 
    case 
"date"
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL"
      break; 
    case 
"defined"
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue
      break; 
  } 
Este switch convierte al tipo que le pasaste a la funcion, a la variable que le pasaste.

Por ejemplo si le pasas double, te devuelve el valor entero de la variable, y le agrega las comillas para anidarlo a la consulta.

si le pasaste por ejemplo...

GetSQLValueString(175.6,'double');

la funcion te va a retornar el valor entero y escapado con las comillas agregadas de 175.6
es decir '175.6'

pero no lo hace para el valor int

Lo que no entendi en verdad es:

Código PHP:
case "defined"
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue
ya que no afecta a la variable $theValue, ni tampoco retorna nada......
es decir no va a hacer nada si le pasas GetSQLValueString(175.6,'defined','cualquiercosa', 'cualquiercosa');

Saludos.

Última edición por srsombrero; 27/11/2008 a las 16:34
  #8 (permalink)  
Antiguo 27/11/2008, 16:46
 
Fecha de Ingreso: agosto-2007
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Me lo podeis explicar??

Gracias a todos, mañana me pondre con ello que hoy es tarde pero gracias por contestar
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 23:59.