Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Problema clase mysql

Estas en el tema de Problema clase mysql en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas a todos, estoy desarrollando una clase para tener mas a mano las funciones de mysql, el codigo de la parte que nos concierne es ...
  #1 (permalink)  
Antiguo 10/05/2010, 17:54
 
Fecha de Ingreso: abril-2008
Mensajes: 435
Antigüedad: 16 años
Puntos: 10
Problema clase mysql

Buenas a todos, estoy desarrollando una clase para tener mas a mano las funciones de mysql, el codigo de la parte que nos concierne es el siguiente

Código PHP:
public function query($sql) {
        
$sql $this->security($sql);
        
$this->consulta mysql_query($sql$this->link);
        
$this->result();
    }
    
    protected function 
result() {
        if(
is_resource($this->consulta)) {
            while (
$this->fila mysql_fetch_array($this->consultaMYSQL_ASSOC)) {
                
$this->salida[] = $this->fila;
            }
        }
    }
    
    public function 
security($string) {
        
$string strip_tags($string);
        
$string htmlentities($stringENT_QUOTES"UTF-8");
        
$string mysql_real_escape_string($string);
        return 
$string;
    } 
el asunto es que al pasarle el metodo de seguridad me hace mal la cadena de la consulta y me falla el query, sin embargo si uso el metodo security por si solo me devuelve una cadena valida, la verdad estoy medio desconcertado

si llamo a la consulta del query de esta forma y con esta cadena

Código PHP:
echo $mysql->query("INSERT INTO staff (nombre) VALUES ('<script>alert();</script>')") or die(mysql_error()); 
me devuelve esto

Código PHP:
You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near ''alert();')' at line 1 
sin embargo si paso la cadena por el metodo security

Código PHP:
echo $mysql->security("INSERT INTO staff (nombre) VALUES ('<script>alert();</script>')"); 
me devuelve
Código PHP:
INSERT INTO staff (nombreVALUES ('alert();'
que es una cadena valida....

de antemano gracias
saludos
  #2 (permalink)  
Antiguo 10/05/2010, 18:40
rpv
 
Fecha de Ingreso: febrero-2010
Mensajes: 275
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: Problema clase mysql

Le aplica la función security() a la SQL, entonces tu query se debe ejecutar algo así:


Query como es enviada:
Código SQL:
Ver original
  1. INSERT INTO staff (nombre) VALUES ('<script>alert();</script>')

Query resuelta por la función security()
Código SQL:
Ver original
  1. INSERT INTO staff (nombre) VALUES (\'<script>alert();</script>\')

Donde se escapan los caracteres como la comilla simple (').
  #3 (permalink)  
Antiguo 10/05/2010, 19:06
 
Fecha de Ingreso: abril-2008
Mensajes: 435
Antigüedad: 16 años
Puntos: 10
Respuesta: Problema clase mysql

pero si los caracteres estan escapados no deberia funcionar bien?

edito: entiendo el punto, pero que sugeris para corregirlo?
  #4 (permalink)  
Antiguo 10/05/2010, 19:12
rpv
 
Fecha de Ingreso: febrero-2010
Mensajes: 275
Antigüedad: 14 años, 2 meses
Puntos: 10
Respuesta: Problema clase mysql

Cita:
Iniciado por Adell Ver Mensaje
pero si los caracteres estan escapados no deberia funcionar bien?

edito: entiendo el punto, pero que sugeris para corregirlo?
De esta forma... NO.

Se debe escapar los valores, no la query entera.

ejemplo:


Código PHP:
Ver original
  1. $mysql->query("INSERT INTO staff (nombre) VALUES ('".$mysql->security("<script>alert();</script>")."')") or die(mysql_error());

obviamente, se debe quitar la ejecución de security() en la función query() ($sql = $this->security($sql);)
  #5 (permalink)  
Antiguo 10/05/2010, 19:22
 
Fecha de Ingreso: abril-2008
Mensajes: 435
Antigüedad: 16 años
Puntos: 10
Respuesta: Problema clase mysql

es verdad... estoy escapando la query entera como que recien caigo en eso

gracias por mostrarme la luz
saludos
  #6 (permalink)  
Antiguo 11/05/2010, 09:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Tema movido desde PHP a PHP orientado a objetos

Etiquetas: clase, mysql
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:23.