Este tipo de ataque es posible, pero este es el camino equivocado para prevenir contra ella. Si un hacker puede cambiar los detalles del formulario, puede enviar fácilmente los datos secretos a través de un AJAX GET
sin enviar el formulario. La forma correcta de prevenir un ataque XSS es asegurarse de codificar todo el contenido que no sea de confianza en la página, de forma tal que, en primer lugar, un hacker no tenga la capacidad de ejecutar su propio JavaScript.
Más sobre la codificación ...
El código de muestra en StackOverflow es un excelente ejemplo de codificación. Imagínese qué desastre sería si cada vez que alguien publicara algún ejemplo de JavaScript, realmente se ejecutara en el navegador. Por ejemplo,
<script type="text/javascript">alert('foo');</script>
Si no fuera por el hecho de que codificaba el fragmento anterior, se habría visto simplemente un cuadro de alerta. Este es, por supuesto, un guión bastante inocuo: podría haber codificado un código JavaScript que secuestró su cookie de sesión y lo envió a evil.com/hacked-sessions. Afortunadamente, sin embargo, SO no supone que todos tengan buenas intenciones, y en realidad codifica el contenido. Si se va a ver la fuente, por ejemplo, se vería que también lo ha codificado mi HTML perfectamente válido y JavaScript en esto:
<script type="text/javascript">alert('foo');</script>
Así, en lugar de incorporar reales <
y >
caracteres en el que los utilizó, han sido reemplazados por sus equivalentes codificados en HTML (<
y >
), lo que significa que mi código ya no representa una etiqueta de script.
De todos modos, esa es la idea general detrás de la codificación. Para obtener más información sobre cómo debe codificar, eso depende de lo que esté usando en el lado del servidor, pero la mayoría de todos los marcos web incluyen algún tipo de utilidad de codificación HTML "lista para usar". Su responsabilidad es garantizar que el contenido proporcionado por el usuario (o que no sea de confianza) sea SIEMPRE codificado antes de ser procesado.
¿Cómo sería el JavaScript malicioso entrar en el formulario en primer lugar? ¿El formulario de pago permite que se muestre el contenido enviado por el usuario (XSS)? Ese sería un formulario de pago inusual. –