XSS漏洞分类

跨站脚本攻击

防范手段:

  • 对输入进行过滤
  • 对输出进行转义

反射性XSS

利用网页对用户输入的处理不当,将恶意脚本注入到网页中,从而在用户的浏览器中执行。此类攻击通常在用户点击链接或提交表单后发生,恶意脚本会反射回用户的浏览器。

产生过程:

  • 用户输入:用户访问一个网页并输入数据
  • 未经过滤的输出: 服务将这些数据直接返回给用户浏览器,没有进行过滤和编码。
  • 执行恶意代码:如果攻击者构造了一个特殊的输入,例如包含 JavaScript 代码,这段代码就会在用户的浏览器中执行。

GET反射性XSS

XSS攻击通常通过URL查询参数实现,常使用形式.

http://example.com/?name=<script>alert('XSS攻击');</script>

特点:

  • 容易进行分享,直接传递url就行。
  • 利用浏览器地址栏,搜索引擎可能会进行索引。

POST反射性XSS

通过表单提交实现。当用户通过表单提交数据时,攻击者可以将恶意脚本作为表单字段的值提交到服务器。如果服务器在处理 POST 请求时直接将用户输入返回,且未对输出进行编码,脚本将被执行。

# 常见形式
<form method="POST" action="http://example.com/">
    <input type="text" name="name" value="<script>alert('XSS攻击');</script>">
    <input type="submit">
</form>

特点:

  • 不易分享,需要手动进行提交。
  • 可以通过AJAX请求发送数据

防御措施

  • 输出编码: 进行适当的html编码,避免直接被插入。
  • 输入验证: 验证用户输入,拒绝不合规内容
  • 内容安全策略: 使用CSP限制可以执行的脚本来源。
  • HttpOnly Cookies:确保敏感信息不能被js访问。

存储型XSS

攻击者通过在服务器存储恶意脚本代码,导致在其它用户访问相关网站时自动执行该代码。这种攻击方式与反射性XSS不同,后者依赖于用户输入立即反射回页面。存储型XSS危害更大,因为它可以影响到多个用户。

攻击原理:

  • 恶意代码注入: 攻击者首先通过恶意脚本注入到应用程序的可存储部分,例如数据库、文件系统或其它持久化存储中。通常位于评论、帖子和用户配置等。
  • 存储: 服务器接受到输入后,没有对恶意内容进行过滤和转义等操作,直接将其存储。
  • 触发执行: 当其它用户访问该网页是,浏览器直接从服务器加载该内容,并执行其中的脚本。由于该脚本从受信任的源加载,浏览器不会阻止执行。

防范手段

  1. 输入进行验证: 严格检验用户的输入
  2. 输出编码: 将用户输入输出到网页之前,对其进行适当HTML编码,避免脚本被执行。或者直接全部当成字符串处理。
  3. 内容安全策略: CSP限制可执行的脚本来源,防止加载未授权的脚本。
  4. 使用安全库: 使用成熟的库和框架来处理用户输入和输出,减少漏洞风险

DOM型XSS

通过操作文档对象模型(DOM)实现攻击。DOM型的XSS不依赖于服务器的响应,而是完全在客户端的浏览器中进行,利用js在网页中动态修改内容。

工作原理:

  1. 恶意输入: 攻击者首先构造一个包含恶意 JavaScript 代码的 URL 或通过其他方式(如参数传递)将其注入到网页中。这个输入可以是 URL 的查询参数、哈希值等。
  2. 客户端执行: 当用户访问这个含有恶意代码的 URL 时,网页的 js 代码会根据传入的参数直接操作 DOM。
  3. 执行恶意代码:如果网页没有对用户输入进行适当的验证和编码,攻击者的 JavaScript 代码将会被执行,从而导致安全漏洞。

防护措施

  1. 输入验证: 确保对用户输入进行严格验证,限制允许的字符和格式。
  2. 输出编码: 将用户输入插入到DOM中之前,进行适当html编码。
  3. 使用安全的DOM操作方法: 尽量使用textContentsetAttribute等方法,而不直接使用innnerHtml,以防止直接插入HTML标签。
  4. 内容安全策略

常用js代码

//获取用户cookie
<script>
 cookies = document.cookie;
 console.log(cookies);
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值