2010-01-23 23 views
5

¿Debo usar la función mysql_real_escape_string() en mis consultas MySQL para las variables $_SESSION? Teóricamente, las variables $_SESSION no pueden ser modificadas por el usuario final a diferencia de las variables $_GET o $_POST, ¿verdad?

Gracias :)

Respuesta

4

Independientemente de si el usuario puede modificar los datos, es probable que quieren escapar de todos modos, en caso de que necesite los datos que contienen caracteres que romperían el SQL (comillas, etc.).

Mejor aún, use parámetros vinculados y no tendrá que preocuparse por ello.

+0

Gracias Andrew. ¿Puedo preguntar qué son los "Parámetros vinculados"? – Lyon

+0

Es un medio de declarar marcadores de posición en su SQL y luego enviar los valores de datos al servidor "fuera de banda" de modo que posiblemente no se puedan interpretar como SQL, eliminando la posibilidad de inyección SQL. Ver, por ejemplo: http://usphp.com/manual/en/function.mysqli-stmt-bind-param.php –

+0

Hmm ... Ya veo. Después de su información, comencé a leer acerca de bind params y su soporte en mysqli. Actualmente estoy usando ext/mysql y creo que no es compatible con los parámetros vinculantes. Muchas gracias. Tendré que realizar mis consultas sobre la migración de mysql a mysqli en otro hilo (como usar mysqli sin declaraciones preparadas). – Lyon

4

No escape/cite/codifique texto hasta que esté en el punto donde lo necesita. Las representaciones internas deben ser lo más "brutas" posible.

+0

+1, exactamente lo que estaba pensando. – Inshallah

3

Puede responder a la pregunta usted mismo siguiendo esta línea de razonamiento:

¿El valor de $ _SESSION originan a partir de la entrada del usuario?

Si es así, ¿ya se ha desinfectado?

+0

Sí lo tiene. Es por eso que me preguntaba si debería escaparse nuevamente antes de usarlo en una declaración sql. – Lyon

+0

Entonces no me escaparía de nuevo, sería mejor insertarlo en la base de datos con el menor procesamiento posible –

+0

Mi opinión: si genera su SQL de forma dinámica, al concatenar datos, la desinfección y la concatenación deben ser hecho en el mismo lugar Debería ser obvio que está construyendo el SQL correctamente y desinfectar todo correctamente, simplemente mirando el código de concatenación. – Inshallah

1

Teóricamente, las variables $ _SESSION no pueden ser modificados por el usuario final

No, pero los datos debe tener venir de alguna parte.

Debe evitar cualquier salida de PHP, utilizando el método adecuado para el destino en el punto en el que deja PHP.

C.

+0

gracias symcbean :) Supongo que "dejando PHP" implica ya sea mysql o escribir en un archivo? Solía ​​usar htmlspecialchars pero ahora uso exclusivamente filter_var y mysql_real_escape_string para procesar cualquier entrada de los usuarios. – Lyon

+0

Aclaración: para procesar entradas de usuarios para su uso en mysql, primero desinfecto la entrada, luego uso mysql_real_escape_string. De modo que se usarán htmlentities (a diferencia de htmlspecialchars) cuando publique cualquier dato para mostrar en el navegador del cliente. – Lyon

Cuestiones relacionadas