w3schools php_self form _server php xss

form - php echo $_ server['' php_self '']



PHP_SELF y XSS (4)

He encontrado un artículo que afirma que $_SERVER[''PHP_SELF''] es vulnerable a XSS.

No estoy seguro de haberlo entendido correctamente, pero estoy casi seguro de que está mal.

¿Cómo puede ser esto vulnerable a los ataques XSS?

<form method="post" action="<?php echo $_SERVER[''PHP_SELF'']; ?>"> <!-- form contents --> </form>


De hecho, es una vulnerabilidad XSS. Entiendo que usted crea que no puede dañar su sitio web, pero esto no significa que no sea real.

Si no lo crees, prueba lo siguiente:

Suponemos que tiene una página como "registration.php". Suponemos que tiene un formulario donde la acción es:

<?php echo $_SERVER[''PHP_SELF'']; ?>

como lo dejaste de hecho:

<form method="post" action="<?php echo $_SERVER[''PHP_SELF'']; ?>"> <!-- form contents --> </form>

Ahora simplemente agregue la cadena abajo

%27%22/%3E%3Cscript%3Ealert(1)%3C/script%3E

En realidad no es difícil de entender, porque PHP_SELF es un reflejo de la URL, tu aplicación leerá todo lo que coloques en la URL y lo hará eco. Es simple como eso.

htmlspecialchars debería encargarse del asunto, no hay razón para disputar la evidencia.

<form method="post" action="<?php echo htmlspecialchars($_SERVER[''PHP_SELF'']); ?>"> <!-- form contents --> </form>

Sin embargo, incluso este es un primer paso para armar una cookie, no es que tenga lugar automáticamente. Incluso si es bastante fácil crear el ataque (ya que el atacante se registrará en su sitio y verá cómo se ve la cookie ... etc.), una serie de otros factores deben ser ciertos para llegar al punto de tener una cookie acerada situación. Por ejemplo, la cookie no debe estar vencida. Depende de qué tan compleja es la cookie. ¡Quizás tengas otras precauciones en el servidor, no tiene que ser toda la autenticación en función de la presencia de cookies!

Si bien creo que es una programación bastante difícil y realmente mala para todas las condiciones (incluso si yahoo.mail por ejemplo tenía esa vulnerabilidad y si miras en Internet encontrarás incluso el exploit y el decodificador de cookies), el XSS es real y quién sabe qué puede hacer un atacante astuto si tu sitio lo sufre. La cura es simple ...


Debería usar filter_input() para acceder a superglobales en PHP. Si configura el filtro como FILTER_SANITIZE_FULL_SPECIAL_CHARS , eliminará los caracteres inseguros que se suelen utilizar en XSS. Dado tu ejemplo:

<form method="post" action="<?php filter_input(INPUT_SERVER, ''PHP_SELF'', FILTER_SANITIZE_FULL_SPECIAL_CHARS); ?>"> <!-- form contents --> </form>


El mismo artículo que vinculó te da:

http://www.example.com/form.php/%22%3E%3Cscript%3Ealert(‘xss attack’)%3C/script%3E%3Cbr%20class=%22irrelevant

lo que no está claro?

Editar: este es un ataque XSS porque puedo ocultar un enlace de mi sitio al suyo con algunos JS añadidos a la URL que me envía las cookies, así que, en el momento en que hace clic en ese enlace, es pwnd.