vulnerables vulnerabilities tutorial site significa sheet script reflected que paginas hacer evitar cross como cheat caracteristicas ataque javascript html security xss

javascript - vulnerabilities - xss php



¿Qué hace que una entrada sea vulnerable a XSS? (5)

Deberías "inyectar" el script. Entonces, si tienes una entrada de texto, debes ponerla en la forma:

" /> <script>alert();</script>

De esta manera, primero cierra el atributo del HTML existente y luego inyecta su propio código. La idea es escapar de las citas.

He estado leyendo sobre XSS e hice un formulario simple con un texto y una entrada de envío, pero cuando ejecuto <script>alert();</script> en él, no ocurre nada, el servidor obtiene esa cadena y eso es todo.

¿Qué tengo que hacer para hacerlo vulnerable? (Entonces aprenderé lo que no debería hacer, jeje)

Aclamaciones.


Haga que el servidor devuelva la entrada al cliente.


Tres cosas simples:

  1. Si no está entregando datos no confiables a la página en algún momento, no hay oportunidad para XSS
  2. Todos sus datos no confidenciales (formularios, querystrings, encabezados, etc.) deben validarse en una lista blanca para garantizar que se encuentren dentro de un rango aceptable
  3. Toda su salida a la pantalla debe estar codificada con una biblioteca apropiada (es decir, Anti-XSS para .NET) en el idioma apropiado (HTML, CSS, JS, etc.).

Más información con ejemplos en OWASP Top 10 para desarrolladores de .NET parte 2: Cross-Site Scripting (XSS) .


De hecho, solo deje que el servidor lo muestre para que la cadena de entrada se incruste efectivamente en el código fuente HTML y se devuelva al cliente.

Ejemplo de PHP:

<!doctype html> <html lang="en"> <head><title>XSS test</title></head> <body> <form><input type="text" name="xss"><input type="submit"></form> <p>Result: <?= $_GET[''xss''] ?></p> </body> </html>

Ejemplo de JSP:

<!doctype html> <html lang="en"> <head><title>XSS test</title></head> <body> <form><input type="text" name="xss"><input type="submit"></form> <p>Result: ${param.xss}</p> </body> </html>

Alternativamente, puede volver a mostrar el valor en los elementos de entrada, que también se ve a menudo:

<input type="text" name="xss" value="<?= $_GET[''xss''] ?>">

resp.

<input type="text" name="xss" value="${param.xss}">

De esta manera cadenas de ataque "raras" como "/><script>alert(''xss'')</script><br class=" funcionarán porque el servidor lo renderizará después de todo como

<input type="text" name="xss" value=""/><script>alert(''xss'')</script><br class="">

Las soluciones de prevención XSS son, entre otras, htmlspecialchars() y fn:escapeXml() para PHP y JSP, respectivamente. Esos reemplazarán entre otros < , > y " por &lt; &gt; y &quot; modo que la entrada del usuario final no quede literalmente incrustada en el código HTML, sino que se muestre tal como se ingresó.


Google hizo un tutorial increíble que cubre XSS y otras vulnerabilidades de seguridad aquí . Puede ayudarlo a comprender cómo se explotan estos problemas en aplicaciones reales.