¿Se pueden evitar las vulnerabilidades de URL si se utiliza el método de publicación?

2

Si tengo un formulario que acepta entradas a través del método GET y se pueden generar vulnerabilidades como XSS.

El uso del método POST es posible para prevenir vulnerabilidades que pueden generarse a través de las URL?

Por ejemplo, el siguiente código es vulnerable a XSS, si la url es:

example.com/?nickname=<script>alert("XSS")</script> .

<form method="get" action="">
    <input type="text" name="nickname"/>
    <input type="submit" value="Send">
</form>

<?php
  if(isset($_GET['nickname'])){
    $nickname= $_GET['nickname'];
    echo "<div>Your nickname is $nickname</div>\n";
  }
?>

El uso del método de publicación puede evitar completamente esta vulnerabilidad, o puedes continuar explotando?

    
pregunta Juan Pinzón 15.08.2016 - 19:35
fuente

3 respuestas

9

No, usar POST no es una defensa contra XSS en absoluto.

Claro, un atacante no puede simplemente enviarle un enlace que contenga la carga útil, pero puede enviarle un enlace a una página web que contiene HTML / JavaScript que envía la carga útil.

Ejemplo:

<form method="post" action="http://yourserver.com/yourscript.php" id="myform">
    <input type="hidden" name="[XSS payload]"/>
    <input type="hidden" value="Send">
</form>
<script>
document.getElementById('myform').submit();
</script>

El atacante también podría enviar el formulario en un iframe oculto u ocultar el ataque para que la víctima no lo note.

Si, por otro lado, tiene protección CSRF para sus solicitudes POST (que debería tener), explotar los ataques XSS reflejados a través de POST será más difícil o imposible.

Hay muy pocas clases de vulnerabilidad que se vuelven menos beneficiosas para los ataques si se realizan a través de POST; Open Redirect sería un ejemplo (ya no es posible el phishing, pero la protección CSRF que se basa en una comprobación de referencia puede aún ser explotada en algunos situaciones).

    
respondido por el tim 15.08.2016 - 20:08
fuente
2

El uso de POST ofrece las siguientes ventajas sobre GET:

Evita el historial de URL del navegador . Los datos confidenciales en el formulario no se pasan en la URL, lo que significa que los datos en el formulario no son visibles en el historial del navegador y no se pueden navegar de forma conjunta una vez enviados. (Nota: el cuerpo del formulario a veces se almacena, según el navegador y la configuración, pero generalmente no está visible).

Capacidad para pasar tokens ocultos . El uso de POST le da a su aplicación la flexibilidad de incluir más campos (hay un límite estricto en la duración de una solicitud GET), incluyendo cosas importantes como tokens CSRF, sumas de comprobación de ViewState MAC, etc. No querría mostrar estos campos en el barra de direcciones.

Menos registro . Los datos en la propia URL se guardan en un encabezado HTTP, que es más probable que sea registrado por dispositivos de red intermedios (por ejemplo, si se utiliza la descarga de SSL o la inspección profunda de paquetes), o por los registros del servidor web. IIS, por ejemplo, registra la URL completa y la cadena de consulta con todas y cada una de las solicitudes, de forma predeterminada, y esto se almacena en un archivo plano que permanece en su servidor web para siempre. Los datos en el cuerpo del formulario, por otro lado, no se registran de forma predeterminada.

Evita enviar PII a las analíticas . Si hay información confidencial en la URL, corre el riesgo de que los datos terminen siendo enviados a cualquier solución de análisis o terceros que esté utilizando. En general, los datos en el cuerpo del formulario no terminarán siendo enviados a menos que usted haya hecho un esfuerzo para codificarlos.

¿El uso de POST mitiga automáticamente el riesgo de CSRF? ¡NO! Pero, por lo general, una mitigación CSRF implicará el uso de HTTP POST + un token anti-CSRF, por lo que podría ver por qué pensarían que van juntas. Sin el token, el verbo POST no hace nada en sí mismo para mitigar CSRF a través de XSS reflejado o almacenado.

    
respondido por el John Wu 16.08.2016 - 01:23
fuente
-3

No, el saneamiento de entrada es el control más efectivo para mitigar XSS en este caso: enlace

    
respondido por el Jerry 16.08.2016 - 00:06
fuente

Lea otras preguntas en las etiquetas