Seguridad WEB, una breve discusión sobre los ataques XSS (con ejemplos simples)

¿Qué es XSS?

XSS( Cross-Site-Scripting), ataque de secuencias de comandos entre sitios, porque la abreviatura CSSse superpone con otras y fue reemplazada por otras, por lo que solo se puede llamar XSS.

Un atacante podría aprovechar esta vulnerabilidad para inyectar código malicioso del lado del cliente en el sitio web. Si la víctima ejecuta este código malicioso, el atacante puede eludir las restricciones de acceso del sitio web y hacerse pasar por la víctima.

Estos ataques pueden tener éxito fácilmente si Webla aplicación no implementa una verificación de seguridad adecuada. Los navegadores no pueden detectar que estos scripts maliciosos no son confiables, por lo que estos scripts pueden leer contenido arbitrario cookieu session tokensotra información confidencial de sitios web, o permitir que scripts maliciosos reescriban HTMLel contenido.

Clasificación de XSS

tipo de almacenamiento

Persistencia, el código se almacena en el servidor (base de datos), como donde se agrega alguna entrada de texto (contenido del blog, contenido de comentarios, etc.), si no se realiza el filtrado correspondiente, estos se activarán cuando el usuario acceda a estas páginas. El código es más peligroso.

reflexivo

No persistente, debe engañar al usuario para que haga clic en el enlace para activar el código XSS (no existe tal página ni contenido en el servidor) y, en general, es fácil de aparecer en la página de búsqueda.

Posible daño

Aquí hay un ejemplo simple: tenemos un servicio de blog que admite la función de comentarios. Ahora hemos comentado el siguiente contenido:

<p style="color:red;">你这篇文章写的真不错,祝火</p>

Insertar descripción de la imagen aquí

Si no se puede escapar, aparecerá una cadena de palabras rojas al renderizar, lo que parece no tener ningún impacto en la seguridad.

Esto no es necesariamente cierto, ¿qué pasa si ingresamos al siguiente párrafo?

<a href="javascript:alert('霓虹灯');">是兄弟就来砍我</a>

En este momento, siempre que hagamos clic en esta aetiqueta, se ejecutará el script correspondiente y aparecerán los tres caracteres "Neon Light". Si el script se puede ejecutar, el espacio operativo será grande.

Actualmente, existen muchos productos que colocan o almacenan el inicio de sesión tokenu otra información de verificación en el cliente . En este momento, si no tomamos ninguna medida defensiva, el atacante puede fácilmente permitir que el navegador acceda directamente al servidor (el servidor lo dejará ir porque reconoce la información de autenticación), lo que implica otro ataque (no explicado en este artículo). .cookielocalStorageXSScookiewebCSRF

ejemplo

Aquí hay un ejemplo simple de un front-end puro que simula comentarios. El código es muy simple y es solo para demostración. Debido a que se insertan datos, se puede usar el ataque innerHTMLanterior .XSS

<html>
<head>
    <style>
        .txrow {
      
      
            flex-direction: row;
            width:50%;
        }
        #cmtInput {
      
      
            width:100%;
            height:100px;
        }
    </style>
    <script>
        function comment() {
      
      
            let input = document.getElementById("cmtInput")
            let c = document.getElementById("cmtContent")

            let newDiv = document.createElement("div")
            newDiv.innerHTML = input.value
            c.appendChild(newDiv)
        }
    </script>
</head>
<body>
    <div style="display:flex;">
        <div class="txrow">
            <textarea id="cmtInput"></textarea><button onclick="comment();">评论</button>
        </div>
        <div style="width:10px;"></div>
        <div class="txrow" id="cmtContent"></div>
    </div>
</body>
</html>

Se pueden introducir las siguientes cadenas:

<a href="javascript:alert('倚天剑999');">是兄弟就来砍我</a>

<img onerror="alert(123)" src="fsd"/>

Insertar descripción de la imagen aquí

Detección XSS

  1. XSSDetecte vulnerabilidades manualmente utilizando cadenas de ataque comunes XSS.
  2. Utilice herramientas de escaneo para detectar XSSvulnerabilidades automáticamente, como: Arachni , Mozilla HTTP Observatory , etc.

prevención

  • Al renderizar la interfaz en el front-end, intente utilizar htmlla función de escape que viene con el motor de plantillas para evitar el uso de createElementotros tipos de métodos.
  • Cuando el backend guarda datos en la base de datos, también es mejor imponer algunas restricciones a los datos correspondientes e ingresarlos en la base de datos después de escapar, como: restricciones de longitud, restricciones de caracteres, etc. para apodos, direcciones de correo electrónico, presentaciones, etc. .
  • Intente evitar el uso de datos directamente en eventos en línea, por ejemplo: onload="go('{xxx}')".
  • Esté siempre atento y tome estrictas precauciones al insertar atributos DOM, enlaces, etc.
  • Hazlo con antelación. XSSDetecta y descubre vulnerabilidades automáticamente.

Resumir

¿Por qué decimos que no debería hacer clic en anuncios emergentes ($999 por dólar) en algunos sitios web, especialmente en sitios web en los que ya ha iniciado sesión? Es probable que las filtraciones de información personal se filtren desde aquí.

Dado que XSSeste método de ataque es muy común y básico, la mayoría de los webframeworks actuales lo han adaptado, no necesitamos preocuparnos demasiado por este problema de seguridad, pero aún necesitamos saber que existe y poder Hay tratamiento correspondiente planes.

Hoy en día, la mayoría de los proyectos están separados del front-end y el back-end. Tanto el front-end como el back-end necesitan XSSsaber algo al respecto. En el desarrollo real, debemos considerar más problemas de seguridad de este tipo.

referencia

Guess you like

Origin blog.csdn.net/DisMisPres/article/details/128486386