关于xss:XSS跨站点脚漏洞概述

33次阅读

共计 2212 个字符,预计需要花费 6 分钟才能阅读完成。

XSS(Cross Site Scripting)跨站点脚本是一种代码注入攻打,攻击者利用 Web 站点的代码破绽,在用户拜访的网页时运行植入的歹意 JS 脚本,从而影响用户拜访或窃取用户信息。

XSS 分类

依据歹意脚本的触发形式,XSS 攻打可分成三种模式,别离是反射型,存储型和 DOM 型。

  • 反射型 XSS:客户端的提交的内容中带 XSS 脚本,服务器端处理不当,间接在页面上输入内容,导致恶意代码被执行。

例如:歹意用户在页面中的文本框中输出脚本代码,表单提交后,服务器程序未对文本框数据进行本义解决,间接打印到页面上,页面返回到客户端展现时,触发脚本执行。

  • 存储型 XSS:攻击者向零碎中注入恶意代码,恶意代码在数据库中保留,用户拜访从数据库中读取的内容生成的页面时,触发恶意代码执行。

例如:歹意用户在论坛发帖内容中蕴含脚本代码,发帖内容提交后保留到服务器数据库中,当其余用户浏览此帖子时,从数据库中读取帖子内容展现,帖子内容触发脚本在浏览器中执行。

  • DOM 型 XSS:反射型 XSS 相似,区别在于带恶意代码的数据不通过服务器端解决,间接由客户端 JS 脚本解决(DOM 树操作)时,触发恶意代码执行。

例如:歹意用户在 URL 参数中植入脚本,用户点击 URL 在浏览器关上后,JS 读取有脚本的参数,未做适当解决,触发脚本执行。

DOM 型 XSS

在不须要和服务器交互状况下,客户端 JS 脚本能够在浏览器中间接查找、操作(增删改)DOM 模型的元素。同时也能读取用户在浏览器的输出,如 URL 对象、location 对象,并提取相干的参数。如果用户输出的内容总蕴含歹意脚本,而程序没有进行无效的解决和过滤(如把传输数据间接交给 eval 执行),就会导致 DOM 型 XSS 攻打。

攻打示例

  • 网页代码

以下示例代码中,JS 代码从浏览器 URL 中读取 param 参数,未经校验和解决,间接写入 document 中,如果参数内容中夹带可执行的 JS 脚本块,脚本就会间接执行。

<!--dom_xss_sample.html-->
<!DOCTYPE html>
<html>
<head>
    <title>DOM XSS</title>
</head>
<body>
    <p>DOM XSS 攻打示例 </p>
</body>
<script>
    var pos=document.URL.indexOf("param=") + 6;
    document.write(decodeURI(document.URL.substring(pos,document.URL.length)));
</script>
</html>
  • 运行成果
  1. 在 URL 中,减少 param=<script>alert(0)</script> 参数,参数内容通过 document.write 间接写入到页面中。

  1. 参数中的脚本代码块间接执行,触发 XSS 攻打。

除了间接在参数中带不言而喻的脚本外,在其余标签中夹杂可执行的事件也是常见形式,如在 img 标签的 onerror 事件中执行脚本。示例如下:param=<img src="null" onerror="alert('1')" />

从以上示例中能够看出,造成 DOM 型 XSS 破绽攻打,次要有两个过程:

  1. 在输出的数据源中夹带了歹意脚本
  2. 程序未对输出进行必要的解决,导致歹意脚本执行

其中,输出除了上述document.URL,还包含如下数据源:

  • document.URL
  • document.URLUnencoded
  • document.location
  • document.referrer
  • window.location
  • location
  • location.href
  • location.search
  • location.hash
  • location.pathname

对输出的解决,除了上述document.write,还包含如下办法:

  1. 间接执行脚本类
  • eval(…)
  • window.execScript(…)
  • window.setInterval(…)
  • window.setTimeout(…)
  1. 写 HTML 页面类
  • document.write(…)
  • document.writeln(…)
  • element.innerHTML(…)
  1. 间接批改 DOM 类
  • document.forms[0].action=…
  • document.attachEvent(…)
  • document.create…(…)
  • document.execCommand(…)
  • document.body. …
  • window.attachEvent(…)
  1. 替换文档 URL 类
  • document.location=…
  • document.location.hostname=…
  • document.location.replace(…)
  • document.location.assign(…)
  • document.URL=…
  • window.navigate(…)
  1. 关上 / 批改窗口类
  • document.open(…)
  • window.open(…)
  • window.location.href=… (and assigning to location’s href, host and hostname)

更多的 DOM 型 XSS 攻打办法,可参考如下文档 DOM Based Cross Site Scripting or XSS of the Third Kind

进攻办法

对于 DOM 型 XSS 的攻打,OWASP 组织提供了 7 条 RULE 和 10 条 GUIDELINE,此处不再累赘,请参考官网原文 DOM based XSS Prevention Cheat Sheet

正文完
 0