如何做一次xss攻击
xss攻击是攻击者向某个网页注入恶意代码。那么如何向一个网页注入代码?
- 表单,我们在浏览器中输入的内容会被当做浏览器url的查询参数
- url,可以在url直接设定参数
- 使用js伪协议,参考:https://www.jb51.net/article/52358.htm
特别是最后一种伪协议,很多人都没用过。
xss攻击分类有多形式,我先按照dom和非dom模式进行区分。
非dom模式
在非dom模式中,注入的恶意代码都会被发往服务器,服务器对于这段恶意代码会有不同的处理。
1.假设发送过来的数据(内部其实是恶意代码)是评论这类所有用户都可见的内容的话,这个数据要保存在数据库中。以后所有的用户如果需要访问这条评论的话都会执行这段恶意代码
这类xss攻击称为存储型xss攻击
2.假设发过来的数据仅仅是经由服务端做简单的处理之后返回给客户端的话,客户端会执行这段恶意代码。这类攻击称为反射型xss攻击
基于DOM的xss攻击
dom这个多层次的文档对象模型就不需要过多的介绍。
这种攻击方式不会将恶意代码发送到服务器,仅仅是将你的恶意代码在前端执行,很多人疑惑这段代码是怎么执行的,使用的就是伪协议。
<a href="javascript:alert('aa')">hello</a>
可以将这段代码放置在HTML进行尝试下,点击之后就会提示警告
当然还有其他方式,比如在 style 属性和标签中,包含类似 background-image:url(“javascript:…”); 的代码(新版本浏览器已经可以防范)。
防范
可以看到三种攻击方式的本质就是两点:
1.攻击者提交恶意代码到服务器
2.浏览器本地执行恶意代码
美团前端团队的文章讲述的很好了