XSS跨站脚本原理:
? 跨站脚本攻击XSS(Cross Site Scripting),为了不和HTML中的层叠样式表(CSS)缩写混淆,所以将跨站脚本攻击缩写为XSS。恶意攻击者往WEB页面插入恶意Script代码,当用户浏览该页面时,嵌入WEB页面的Script代码被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!
XSS分类:
- 存储型XSS:持续型,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或者过滤不严,那么代码将被存储到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。
- 反射型XSS:非持续型,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中这样没有这样的页面和内容),一般容易出现搜索页面。反射型XSS大多数用户Cookie信息。
- DOM型XSS:不经过后端,DOM型-XSS漏洞是通过url传入参数去控制触发的,其实也属于XSS
XSS常用测试语句有:
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<a href=javascript:alert(1)>
XSS漏洞的挖掘:
黑盒测试:(尽可能的找到一切用户可控并且能够输出在页面代码中的地方)
常见的XSS跨站脚本业务场景:
- 重灾区:评论区、留言区、个人信息、订单信息等
- 针对性:站内信、网页及时通讯、私信意见反馈等
- 存在风险:搜索框、当前目录、图片属性等
白盒测试(代码审计):
? 关于XSS的代码审计主要是从接收参数的地方和一些关键词入手。
? PHP中常见的接收参数的方式有$_GET 、$_POST 、$_REQUEST 等等,可以搜索所有接收参数的地方。然后对接收到的数据进行跟踪,看看有没有输出到页面中,然后看输出到页面中的数据是否进行了过滤和html编码等处理。
? 也可以搜索类似echo 这样的输出语句,跟踪输出的变量是从哪里来的,我们是否能控制,如果从数据库中取的,是否能控制存到数据库中的数据,存到数据库之前有没有进行过滤等等。
? 大多数程序会对接收参数封装在公共文件的函数中统一调用,我们就需要审计这些公共函数看有没有过滤,能否绕过等等。
? 同理审计DOM型注入可以搜索一些JS操作DOM元素的关键词进行审计。
XSS的危害:
防护阻止XSS攻击:
因为XSS漏洞涉及输入和输出俩部分,所以其修复也分为两种:
- 过滤输入的数据,包括单引号,双引号,<,>等非法字符
- 对输出到页面的数据进行相应的编码转换,包括HTML实体编码,JS编码等
- 使用HTTP Only属性保护重要cookie
什么是HTTP Only:
? 很多xss攻击都是来盗用cookie的。
? 如果cookie中设置了HTTP Only属性,那么通过JS脚本将无法读取cookie信息,这样就能有效防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性。
ly属性,那么通过JS脚本将无法读取cookie信息,这样就能有效防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性。
参考链接: XSS(跨站脚本攻击)详解
|