superglobal request_uri http_referer http_host array _server php forms

request_uri - array superglobal php



¿Por qué usar $_SERVER[''PHP_SELF''] en lugar de "" (6)

Además de las respuestas anteriores, otra forma de hacerlo es $_SERVER[''PHP_SELF''] o simplemente usar una cadena vacía es usar __DIR__ .
O
Si tiene una versión PHP más baja (<5.3), una alternativa más común es usar dirname(__FILE__)
Both devuelve el nombre de la carpeta del archivo en contexto.

EDITAR
Como Boann señaló que esto devuelve la ubicación en el disco del archivo. Lo que no idealmente exponer como una url. En ese caso dirname($_SERVER[''PHP_SELF'']) puede devolver el nombre de la carpeta del archivo en contexto.

En un formulario en una página PHP, puede usar:

<form action="<?php echo $_SERVER[''PHP_SELF'']; ?>" ...>

o

<form action="#" ...>

o

<form action="" ...>

en el atributo de acción de la forma. Como echo $_SERVER[''PHP_SELF''] no pasa variables para usar GET y tiene que usar "" , ¿por qué usar eso o "#" ?

Lo estoy preguntando porque me llevó algo de tiempo descubrir que las variables no se pasan con $_SERVER[''PHP_SELF''] . Gracias.


Cuando inserte CUALQUIER variable en HTML, a menos que desee que el navegador interprete la variable en sí misma como HTML, es mejor usar htmlspecialchars() en ella. Entre otras cosas, evita que los piratas informáticos inserten HTML arbitrario en su página.

El valor de $_SERVER[''PHP_SELF''] se toma directamente de la URL ingresada en el navegador. Por lo tanto, si lo usa sin htmlspecialchars() , está permitiendo que los hackers manipulen directamente la salida de su código.

Por ejemplo, si le envío un enlace por correo electrónico a http://example.com/"><script>malicious_code_here()</script><span class=" y tiene <form action="<?php echo $_SERVER[''PHP_SELF''] ?>"> , La salida será:

<form action="http://example.com/"><script>malicious_code_here()</script><span class="">

Mi script se ejecutará y no serás más prudente. Si ha iniciado sesión, es posible que haya robado sus cookies o que haya robado información confidencial de su página.

Sin embargo, si utilizó <form action="<?php echo htmlspecialchars($_SERVER[''PHP_SELF'']) ?>"> , El resultado sería:

<form action="http://example.com/&quot;&gt;&lt;script&gt;cookie_stealing_code()&lt;/script&gt;&lt;span class=&quot;">

Cuando enviaste el formulario, tendrías una URL extraña, pero al menos mi secuencia de comandos malvada no se ejecutó.

Por otro lado, si usaste <form action=""> , entonces el resultado sería el mismo sin importar lo que agregué a mi enlace. Esta es la opción que recomendaría.


El atributo de action se establecerá de manera predeterminada en la URL actual. Es la manera más confiable y fácil de decir "enviar el formulario al mismo lugar de donde vino".

No hay ninguna razón para usar $_SERVER[''PHP_SELF''] , y # no envía el formulario en absoluto (a menos que haya un controlador de eventos de submit adjunto que maneje el envío).


No hay diferencia. El $ _SERVER [''PHP_SELF''] solo hace que el tiempo de ejecución sea más lento por 0.000001 segundos.


Sé que la pregunta tiene dos años, pero fue el primer resultado de lo que estoy buscando. Encontré buenas respuestas y espero poder ayudar a otros usuarios.

Mira este

Voy a hacer esto breve:

  • use la variable $_SERVER["PHP_SELF"] con htmlspecialchars ():

    `htmlspecialchars($_SERVER["PHP_SELF"]);`

  • PHP_SELF devuelve el nombre de archivo del script en ejecución.

  • La función htmlspecialchars () convierte caracteres especiales en entidades HTML. -> NO XSS

Usar una cadena vacía está perfectamente bien y en realidad es mucho más seguro que simplemente usar $_SERVER[''PHP_SELF''] .

Al usar $_SERVER[''PHP_SELF''] es muy fácil inyectar datos maliciosos simplemente añadiendo /<script>... después de la parte whatever.php de la URL, por lo que no debe usar este método y dejar de usar cualquier tutorial PHP que lo sugiere