2010-09-17 24 views
8

Estoy pasando PHPSESSID a una página PHP (a través de POST) y me preguntaba cuál es la mejor manera de desinfectar la entrada. ¿Sería suficiente con mysql_real_escape_string? ¿Hay algo especial que deba tener en cuenta cuando trato con ID de sesión (es decir, solo pueden ser letras y números, ¿no?)?Desinfección PHPSESSID

EDIT: Para aclarar la cuestión, lo que realmente quiero saber es: si alguien altere los datos POST, ¿puede enviar una cadena maliciosa como PHPSESSID que hacer algo desagradable cuando llamo session_id($_GET['PHPSESSID'])? personalmente no puedo pensar en ninguna, pero es mejor prevenir que curar ...

Gracias

nico

+0

¿Por qué quieres desinfectarlo? Es (en la mayoría de los casos) autogenerado. – fabrik

+1

1 para una buena seguridad pensamiento consciente –

+0

@abrik: Por supuesto que se genera automáticamente, sólo estaba preocupado de que alguien podría suplantar los datos POST y hacer algo desagradable con él. No estoy seguro de lo que podrían hacer, pero es por eso que estaba haciendo la pregunta! – nico

Respuesta

7

Bien pensado, pero por lo que puedo ver, no hay necesidad de sanear esta entrada. El PHPSESSID se pasará al session_id().

session_id de hecho tiene some limitations:

Dependiendo del gestor de sesiones, no todos los caracteres están permitidos dentro del identificador de sesión. Por ejemplo, el manejador de sesión de archivos solo permite caracteres en el rango a-z A-Z 0-9, (coma) y - (menos)!

Pero session_id() debe tratar con las desviaciones de estas reglas con un mensaje de error. (Es posible que desee capturar ese mensaje de error y finalizar el script en caso de error.)

El único peligro real que puedo ver es cuando utiliza un controlador de sesión personalizado que, p. se conecta a una base de datos. Usted tendrá que desinfectar la entrada en ese caso, p. usando mysql_real_escape_string(). Sin embargo, eso es algo que debería tener lugar dentro de el controlador de sesión personalizado.

No hace falta decir que si utiliza la ID de sesión en otro contexto, por ejemplo, como un parámetro en formato HTML, debe tomar las medidas de saneamiento necesarias para esa salida específica (en ese caso, htmlspecialchars()).

+4

Gracias Pekka, eso fue lo que pensé, pero pensé que era mejor hacer una pregunta estúpida que cometer un error estúpido. :) – nico

2

Si realmente necesita pasar una ID de sesión a través de POST (no puedo ver por qué realmente ...) y usted sabe qué caracteres quiere permitir, usaría una expresión regular para verificar eso.

mysql_real_escape_string es para la entrada de la base de datos y requiere una conexión de base de datos y no está desinfectando nada, solo escapando algunos caracteres especiales.

+0

Gracias por la respuesta. Estoy usando un script que se basa en Flash y necesito pasar PHPSESSID porque Flash no lo hace automágicamente para mí ... es solo una página y no estaba seguro de cuáles eran los peligros con PHPSESSID (si había alguno)) La secuencia de comandos se conecta a una base de datos de todos modos, por lo que 'mysql_real_escape_string' me vino a la mente, pero no estaba seguro de si era necesario. – nico

1

¿Sería suficiente mysql_real_escape_string?

Wrong. Siempre debe desinfectar los datos utilizando un método apropiado para el lugar donde está escribiendo el valor. Solo usará mysql_real_escape_string() si/cuando escribe un valor en una base de datos MySQL.

No está claro por tu comentario exactamente lo que estás haciendo. ¿Quiere decir que está usando curl en PHP para crear el POST? Si es así, no se requiere desinfección (no es estrictamente cierto, pero Curl lo hace por usted) si pasa CURLOPT_POSTFIELDS como una matriz, pero necesita urlencode el valor si está pasando CURLOPT_POSTFIELDS como una cadena.

¿Estás escribiendo el valor cabo al navegador de modo que el usuario puede enviar el valor? En ese caso, usaría htmlentities() para escribir el valor en el campo de formulario.

¿Algo más?

+0

Haces un buen punto sobre 'htmlentities', gracias. Como estaba diciendo que jeroen, Flash llama a la página y las sesiones no se transmiten, así que simplemente estoy PUBLICANDO el PHPSESSID, para recrear la sesión en el archivo PHP llamado por Flash. (Estoy usando JQuery Uploadify http://www.uploadify.com/ y pasando la identificación de la sesión con el parámetro scriptData, como sugieren hacer). – nico

Cuestiones relacionadas