Cross Site Script
攻击者利用应用程序的动态展示数据功能,在 html 页面里嵌入恶意代码。当用户浏览该页之时,这些嵌入在 html 中的恶意代码会被执行,用户浏览器被攻击者控制,从而达到攻击者的特殊目的。
1.分类
- ?反射型跨站脚本攻击
攻击者会通过社会工程学手段,发送一个 URL 连接给用户打开,在用户打开页面的同时,浏览器会执行页面中嵌入的恶意脚本。 - ✨存储型跨站脚本攻击
攻击者利用 web 应用程序提供的录入或修改数据功能,将数据存储到服务器或用户cookie 中,当其他用户浏览展示该数据的页面时,浏览器会执行页面中嵌入的恶意脚本。所有浏览者都会受到攻击。 - ?DOM型跨站攻击
由于 html 页面中,定义了一段 JS,根据用户的输入,显示一段 html 代码,攻击者可以在输入时,插入一段恶意脚本,最终展示时,会执行恶意脚本。DOM 跨站和以上两个跨站攻击的差别是, DOM 跨站是纯页面脚本的输出,只有规范使用 JAVASCRIPT,才可以防御。
2.危害
- 盗取用户 cookie,伪造用户身份登录。
- 控制用户浏览器。
- 结合浏览器及其插件漏洞,下载病毒木马到浏览者的计算机上执行。
- 衍生 URL 跳转漏洞。
- 让官方网站出现钓鱼页面。
- 蠕虫攻击
3.代码示例
- 直接在html页面展示“用户可控数据”,将直接导致跨站脚本威胁
- java实例,某jsp文件
while(rs.next()){
%>
<tr>
<td><%=rs.getInt("id") %></td>
<td><%=rs.getString("pname")%></td>
<td><%=rs.getString("pdesc")%></td>
<td><%=rs.getString("ptype")%></td>
</tr>
<%
}
代码中这几个加粗的变量“rs.getInt(“id”)、 rs.getString(“pname”)、rs.getString(“pdesc”)、 rs.getString(“ptype”)” ,被直接输出到了页面中,没有做任何安全过滤,一旦让用户可以输入数据,都可能导致用户浏览器把“用户可控数据”当成JS/VBS 脚本执行,或页面元素被“用户可控数据”插入的页面 HTML 代码控制,从而造成攻击。
- php实例
<tr>
<td><?=$row["id"] ?></td>
<td><?=$row["pname"]?></td>
<td><?=$row[