php - tag - tooltip title
Cómo identificar la página solicitada en PHP (5)
-
parse_url($_SERVER[''REQUEST_URI''])
y luegopathinfo($path)
para obtener el nombre de archivo solicitado -
$_SERVER[''PHP_SELF'']
para obtener un nombre de archivo real -
$_SERVER[''SCRIPT_NAME'']
para obtener un nombre de archivo real
¿Hay alguna forma fácil de identificar el archivo que maneja inicialmente la solicitud, ignorando obtener argumentos y manejando (al menos lo básico) las asignaciones como /
a /index.php
?
Idealmente, lo que estoy buscando es algo como $_SERVER[''REQUEST_URI'']
, excepto que devuelve el mismo valor independientemente de los argumentos de obtención y ese valor es el archivo solicitado, no el URI, ni el archivo en ejecución actualmente ( $_SERVER[''PHP_SELF'']
). En otras palabras, un $_SERVER[''REQUESTED_FILE'']
o algo así. No he visto nada de eso. ¿Existe, o necesito escribir algo manualmente?
Actualización Aquí hay algunos ejemplos de URL combinadas con lo que me gustaría que fuera el resultado:
example.com/mypage.php : /mypage.php
example.com/ : /index.php
example.com/foo/?hello=world : /foo/index.php
Y estos valores de retorno son verdaderos incluso en los archivos incluidos. Vea mi respuesta a continuación antes de responder, creo que he encontrado lo que estaba buscando.
Decidí probarlo yo mismo. La variable $_SERVER[''SCRIPT_NAME'']
sirve la ruta al archivo solicitado, incluso si es un archivo de índice, y sin obtener parámetros o cualquier otra cosa. La documentación de PHP indica que contiene la ruta del archivo, pero parece ser relativa a la raíz del documento, al igual que PHP_SELF
, pero sin la vulnerabilidad de seguridad.
Aquí está el código que usé para probar esto: https://gist.github.com/dimo414/5484870
La salida al solicitar example.com/?foo=bar
:
__FILE__: /var/www/index.php
PHP_SELF: /index.php
SCRIPT_NAME: /index.php
REQUEST_URI: /?foo=bar
parse_url(REQUEST_URI): /
__FILE__: /var/www/pathtest.php
PHP_SELF: /index.php
SCRIPT_NAME: /index.php
REQUEST_URI: /?foo=bar
parse_url(REQUEST_URI): /
Y la salida al solicitar example.com/index.php/<strong>XSS</strong>
:
__FILE__: /var/www/index.php
PHP_SELF: /index.php/XSS # note the XSS exploit (this is bold in browser)
SCRIPT_NAME: /index.php # No exploit here
REQUEST_URI: /index.php/%3Cstrong%3EXSS%3C/strong%3E
parse_url(REQUEST_URI): /index.php/%3Cstrong%3EXSS%3C/strong%3E
__FILE__: /var/www/pathtest.php
PHP_SELF: /index.php/XSS
SCRIPT_NAME: /index.php
REQUEST_URI: /index.php/%3Cstrong%3EXSS%3C/strong%3E
parse_url(REQUEST_URI): /index.php/%3Cstrong%3EXSS%3C/strong%3E
Como puede ver, $_SERVER[''SCRIPT_NAME'']
siempre devuelve el archivo que originalmente manejó la solicitud, es decir, el archivo en la URL, sin ningún riesgo de XSS.
Es una pregunta muy antigua y no muy clara también. Lo que entendí es que desea saber qué página está enviando la solicitud GET / POST. Esto puede ser implementado por:
$ _SERVER [''HTTP_REFERER'']
Ahora, para obtener el nombre real de la página, escriba como: = nombre base ($ _ SERVER [''HTTP_REFERER'']);
Esto resolverá su preocupación.
Vaya a obtener el nombre del archivo de la URL solicitada, use el siguiente código.
basename($_SERVER[''URL'']);
basename($_SERVER[''REQUEST_URI'']);
basename($_SERVER[''SCRIPT_NAME'']);
basename($_SERVER[''SCRIPT_FILENAME'']);
basename($_SERVER[''REQUEST_URI'']);
basename($_SERVER[''PATH_TRANSLATED'']);
basename($_SERVER[''PHP_SELF'']);
use cualquiera de todos los que estén en la condición anidada si así no perderá ningún nombre de archivo.
$_SERVER[''PHP_SELF'']
Debe devolver el script real. Pero hay varios métodos .
Tenía un mejor enlace a una matriz de todas las diversas variables de entorno relacionadas con archivos, pero no puedo encontrarlo. Lo editaré si aparece.
Edición: Encontré un buen hilo SO que detalla las diferencias entre ellos .