¿Cómo es peligroso SCRIPT_NAME en PHP?

Estoy usando la línea a continuación en mi sitio de blog php, ¿cómo es eso un peligro?

<form action="<?php echo $SCRIPT_NAME. "?id=" . $validentry; ?>" method="post">

He register_global off y magic_quotes_gpc() también apagado.
Estoy usando php 5.2.
Lo intenté $_SERVER['php_self'], pero eso no funcionó.

preguntado el 10 de mayo de 11 a las 13:05

$_SERVER['php_self'] no funcionó porque escribiste la clave en minúsculas. -

Donde hace $validentry ¿viene de? Si es una entrada proporcionada por el usuario o proviene de una base de datos sin verificar el contenido, debe urlencode() eso -

3 Respuestas

SCRIPT_NAME y PHP_SELF en su mayoría contienen el mismo valor. Ambos contienen la versión normalizada por servidor web de REQUEST_URI (es decir, partes de la ruta relativa eliminadas).

Su problema de seguridad real aquí no está usando htmlspecialchars(). Y como se dijo antes, solo use el caso clave correcto para generar PHP_SELF:

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8") . $validentry ...

contestado el 10 de mayo de 11 a las 17:05

Eso no parece suponer ningún peligro, pero sugiere que tiene register_globals Encendido (lo cual, si no tienes mucho cuidado, probablemente sea peligroso). Colocar register_globals en Off en su archivo de configuración y use $_SERVER['SCRIPT_NAME'] o, preferiblemente $_SERVER['PHP_SELF'], ver también esta página en el Manual de PHP sobre el $_SERVER superglobal, este comentario:

$ _SERVER ["SCRIPT_NAME"] => /admin/products.php (ruta virtual) $ _SERVER ["PHP_SELF"] => /admin/products.php/someExtraStuff (ruta virtual)

SCRIPT_NAME se define en la especificación CGI 1.1, PHP_SELF es creado por PHP mismo. Ver http://php.about.com/od/learnphp/qt/_SERVER_PHP.htm para pruebas.

contestado el 10 de mayo de 11 a las 17:05

No creo que esto funcione en PHP5.2 a menos que haya definido $SCRIPT_NAME tú mismo.
El código correcto debe ser $_SERVER['SCRIPT_FILENAME'], en este caso.
SCRIPT_FILENAME no es controlable por el usuario.
$_SERVER['PHP_SELF'] es controlable por el usuario.

contestado el 07 de mayo de 20 a las 20:05

Esta respuesta es más adecuada como comentario, ya que no es una respuesta a la pregunta original ... - Aron Rotteveel

$_SERVER['SCRIPT_NAME'] se define en CGI SAPI. - Alix Axel

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.