Recientemente, salieron noticias. Cuatro empleados del departamento de seguridad de red de Alibaba utilizaron vulnerabilidades de la página web para escribir scripts JS para tomar pasteles de luna, por lo que estaban intrigados. Querían saber cómo escribir este script JS y cómo implementar varios órdenes y agarres de armas.
¿Qué es un ataque de inyección de JavaScript?
1. Siempre que el contenido ingresado por el usuario y redisliado, el sitio web es vulnerable a los ataques de inyección de JavaScript. Veamos una aplicación específica que es vulnerable a los ataques de inyección de JavaScript. Supongamos que se ha creado un sitio web de comentarios de clientes. Los clientes pueden visitar el sitio web e ingresar información de comentarios sobre el producto. Cuando un cliente envía comentarios, la información de comentarios se vuelve a mostrar en la página de comentarios.
El sitio web de comentarios de los clientes es un sitio web simple. Desafortunadamente, este sitio web es vulnerable a los ataques de inyección de JavaScript.
Supongamos que se ingresa el siguiente texto en el formulario de comentarios del cliente:
<script> alerta (ataque!) </script>
Este texto representa un script JavaScript que muestra el cuadro de mensaje de advertencia. Después de que alguien envíe este script al formulario de comentarios del cliente, ¡el ataque de mensaje! se mostrará cuando alguien visite el sitio web de comentarios de los clientes en el futuro.
2. Otro tipo es ingresar una pieza de código JS en la barra de direcciones del navegador para cambiar el contenido de las variables y etiquetas de la página de la página.
Usando la inyección de JavaScript, los usuarios pueden cambiar su contenido sin cerrar o guardar páginas web, que se realiza en la barra de direcciones del navegador. La sintaxis del comando es la siguiente:
JavaScript: Alert (#comando#)
Por ejemplo, si desea ver un cuadro de advertencia de alerta en el sitio http://www.example.com, primero ingrese la URL en la barra de direcciones y espere a que se cargue la página, luego elimine la URL e ingrese:
JavaScript: Alerta (Hello World)
Como una nueva URL. Esto aparecerá un cuadro de advertencia Hello World, utilizando esta técnica para cambiar casi cualquier cosa en una página web, como una imagen. Supongamos que hay una imagen del logotipo del sitio web, y encontramos uno de los códigos HTML mirando el archivo fuente de la página:
<Img name = Hola src = hello.gif>
La imagen se llama hola, el archivo fuente es hello.gif, queremos cambiarla a el archivo bye.jpeg almacenado en nuestro sitio (http://www.mysite.com), por lo que la dirección de URL completa de la imagen es http://www.mysite.com/bye.jpeg, usando inyección de javascript, solo necesitamos entrar en la barra de la dirección:
JavaScript: Alert (document.hi.src = http: //www.mysite.com/bye.jpeg)
Verá una ventana emergente de advertencia de http://www.mysite.com/bye.jpegalert, y la imagen cambia. ¡Cabe señalar que estos cambios son solo temporales! Si actualiza la página o vuelve a ingresar, sus cambios desaparecerán porque acaba de hacer estos cambios en su PC, no en el servidor web.
Usando el mismo método que podemos ver o cambiar el valor de la variable, por ejemplo, encontramos un código como este en una página web:
<Script language = javaScript> var a = test </script>
Significa que el valor de la variable A es la prueba, y ahora ingresamos:
JavaScript: Alerta (a)
Luego cambiamos su valor a Hello:
JavaScript: alerta (a = hola)
La inyección de JavaScript generalmente se usa para cambiar las propiedades de formulario, suponiendo que hay un código como este:
<Form name = format Action = send.php método = post> <input type = Hidden name = mail [email protected]> <input type = text name = name> <input type = shit value = envit> </form>
Queremos que el formulario se envíe a nuestro buzón, no a [email protected]. Puede usar el siguiente comando:
JavaScript: alerta ([email protected])
• Quizás haya notado la relación jerárquica de estos comandos:
• Explicamos en orden de izquierda a derecha:
• 1) El documento más izquierdo es
• 2) Luego está el nombre del objeto que queremos cambiar (como document.hi.src) o el objeto que contiene (como document.format.mail.value)
• 3) Finalmente, existe la propiedad que queremos cambiar (como la ruta de origen: document.hi.src, o valor variable: document.format.mail.value)
• 4) Usar. Separación de número
• 5) Cuando queremos cambiar el valor del atributo, usamos el signo = y el nuevo valor de atributo
•*Nota: Cuando el nuevo valor de atributo es una cadena (por ejemplo: [email protected]) debe encerrarse en cotizaciones dobles.
• Si queremos usarlo como un valor para una variable, no necesitamos usar cotizaciones dobles. Por ejemplo, si queremos asignar el valor de la variable B a la variable A, podemos ingresar JavaScript: Alert (a = B).
• Sin embargo, la mayoría de las etiquetas en la página no tienen nombres, como:
<Form Action = Send.php Method = Post> <input type = Hidden name = mail value@[email protected]> <input type = text name = name> <input type = shit value = envit> </form>
No hay nombre de formulario en este código. Según la información anterior, puede usar este comando:
JavaScript: Alert (documento. .mail.value = [email protected])
En este caso debemos contar y encontrar el número de secuencia de formulario, y el siguiente es un ejemplo:
<form de acción = send.php método = post> <input type = text name = name> <input type = subbit value = subt> </form> <form de formación action = send.php Method = post> <input type = Hidden name = mail [email protected]> <input type = text name> <input type = enviar value = enviar> </formul type = Subt value = Envit> </form>
• En el código anterior, vemos 3 formularios, pero solo estamos interesados en el segundo, por lo que el número de formulario que queremos es 2. No olvide que comenzamos desde 1, como 1, 2, 3, 4 ... mientras que JavaScript comienza desde 0, como 0, 1, 2, 3 ... por lo que el número de forma real es 1, no 2. Por lo general, tenemos que colocar el número de forma encontrada por uno. Usaremos este número de serie para completar nuestro comando:
JavaScript: alerta (document.forms [1] .mail.value = [email protected])
• De esta manera, puede cambiar la imagen o el enlace sin un nombre, y puede cambiar los formularios a cualquier tipo de etiqueta que desee. Para fotos
JavaScript: alerta (document.Images [3] .src =#La url de la imagen que desea#)
Porque el enlace es
JavaScript: alert (document.links [0] .href =#La URL que desea#)
Finalmente, podemos usar esta técnica para editar cookies. El siguiente comando está escrito por Dr_amado de TriviaseCurity.net, y lo modifiqué solo un poco para que aparezca antes de que el usuario lo edite. Solo necesita copiarlos en la barra de direcciones:
javascript: alert (window.c = function a (n, v, nv) {c = document.cookie; c = c.substring (c.indexof (n)+n.length, c.length); c = c.substring (1, ((c.indexof (;)>-1)? C.indexof (;)::: c.length)); nc = unescape (c) .replace (v, nv); document.cookie = n+=+escudo (nc); return unescape (document.cookie);}); alert ('la cookie es:'+document.cookie+''); alerta (c (indicador (el nombre de la cookie:), indicador (cambio este valor:), indicador (con este: con este:));// Si desea cambiar manualmente su cookie, puede usar el siguiente comando:
JavaScript: alerta (document.cookie)
Esto mostrará su cookie actual, suponiendo userId = 1, si desea cambiarla a userId = 2, puede usar el siguiente comando:
JavaScript: alert (document.cookie = userId = 2)
¡Finalmente tengo que enfatizar que todos los cambios están solo en el lado del cliente! Es como guardar una página web en su PC y modificarla. Aún así, usando este truco aún puede engañar a la página (como cookies) o omitir la verificación de seguridad. Por ejemplo, algunas páginas web detectarán la ubicación donde el usuario envía datos. Si envía datos desde http://www.test.com/form.php a http://www.test.com/check.php, check.php puede detectar si los datos provienen del formulario en http://www.test.com/form.php. Además de eso, si planea ingresar su propio código JavaScript en la página, utilizando algunos de estos trucos, ¡podrá cambiar la imagen y dejarla igual!
Finalmente, dado que la inyección JS es tan terrible, ¿qué soluciones tenemos para prevenir la inyección de JS en el sitio web que escribimos nosotros mismos?
Método 1:
Una manera fácil de evitar ataques de inyección de JavaScript es codificar datos ingresados por cualquier usuario del sitio web en HTML al redisir los datos en la vista.
Por ejemplo: <%= html.Encode (fownles.message)%>
¿Cuál es el significado de usar HTML para codificar una cadena? Cuando se usa HTML para codificar cadenas, los caracteres peligrosos como <y> se reemplazan con entidades HTML como <y>. Entonces, cuando la cadena <script> alerta (boo!) </script> está codificada usando html, se convertirá en <script> alerta (ataque!) </script>. El navegador ya no ejecuta scripts de JavaScript al analizar cadenas codificadas. En cambio, muestra páginas inofensivas.
Método 2:
Además de usar HTML para codificar datos al mostrar datos en una vista, también puede usar HTML para codificar datos antes de enviarlos a la base de datos.
StringScapeUtils.escapehtml (datos enviados por la recepción);
A menudo, las personas prefieren usar el primer método discutido en este tutorial y no el segundo método. El problema con el segundo enfoque es que los datos codificados por HTML eventualmente se conservarán en la base de datos. En otras palabras, los datos en la base de datos contendrán caracteres extraños. ¿Cuál es la desventaja de esto? Si necesita mostrar datos de la base de datos en un formulario que no sea una página web, encontrará problemas. Por ejemplo, los datos no se pueden mostrar fácilmente en aplicaciones de formularios de Windows.
Gracias a los internautas por compartir: http://zxf-noimp.iteye.com/blog/1130771
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.