原理
恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
攻击条件
用户能控制输入
原本程序要执行的代码,拼接了用户输入的数据然后执行
类型
反射型xss
非持久型,需要欺骗用户自己去点击链接才能触发xss代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型xss大多数用来盗取用户的cookie信息。
存储型xss
持久型,代码是存储在服务器中的,如在个人信息或发表文章的地方,插入代码,如果没有过滤或过滤不严,那么这些代码将存储到服务器中,用户访问该页面的时候触发代码执行。非常危险,易造成蠕虫、盗取cookie等危害。
DOM型xss
不经过后端(所以我认为这就是反射型),是基于文档对象模型的一种漏洞,DOM-XSS也是通过URL传参去控制触发的。
DOM型就是输入语句原本不能造成XSS,但经过JS处理之后就产生了xss。
构建js执行
执行js语句一般要构建
<script></script>
伪协议执行
javascript:alert(1)
经典代码:<a href=javascript:alert(1)>test</a>
扩展:javascript实际上是一个伪协议,伪协议不同于因特网上真实存在的协议,如http://,https://,ftp://,伪协议只有关联应用能够使用,比如php://,tencent://(关联QQ).
javascript:伪协议实际上声明了URL的主体使任意的javascript代码。
事件执行
常用的事件有:
onerror(在错误发生时运行的脚本)
onload(成功加载执行)
oninput(有输入框,输入的时候触发)
onfocus(当元素获得焦点时运行的脚本)
eg:
οnerrοr=alert(2)
javascript支持编码:NATIVE