XSS攻击原理及应对策略

参考自 网络攻击-XSS攻击详解

参考自 浅谈XSS攻击原理与解决方法

参考自 WEB漏洞 XSS(一)

XSS:跨站脚本攻击。

XSS攻击是web攻击中最常用的一种。它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的。

攻击条件

  • 1:需要向web页面注入恶意代码
  • 2:被浏览器成功执行

XSS分类

  • 反射性xss:一般出现在URL参数中,以及网站搜索栏中,由于需要点击包含恶意代码的URL才可以触发,并且只能触发一次,也称为非持久性xss。
  • 存储型xss:一般出现在留言板上,评论处,个人资料填写,等需要用户可以对网站写入数据的地方,比如一个论坛处由于对用户输入过滤不严格,导致攻击者在写入一段窃取cookie的恶意JavaScript代码到评论处,这段恶意代码会写入数据库中,当其他用户浏览写入代码的页面时,网站从数据库中读取恶意代码显示到网页中被浏览器执行,导致用户的cookie被窃取攻击者无需受害者密码既可以登陆账户,所以也被成为持久性xss,持久性xss比反射性xss危害性大得多。
  • DOM型xss:DOM xss是基于dom文件对象模型的,前端脚本通过dom动态修改页面,由于不予服务端运行交互,而且代码是可见的,从前端获取dom中的数据在本地执行。常见的可以操作的dom对象有:url、location、referrer等。dom型的xss比较特殊,是一种基于dom树的xss,服务器端经常使用document.body.innertHtml等动态函数生成HTML页面,如果这些函数在引用某些变量时没有进行过滤检查,就会产生dom型的xss。dom型的xss可能是存储型的也可能是反射性的。

防范

  • 1 入参字符过滤:  在源头控制,把输入的一些不合法的东西都过滤掉,从而保证安全性。如移除用户提交的的DOM属性如onerror,移除用户上传的Style节点,iframe, script, a节点等
  • 2 出参进行编码:   如果源头没控制好,就得后期补救了:像一些常见的符号,如<>在输出的时候要对其进行转换编码,这样做浏览器是不会对该标签进行解释执行的,同时也不影响显示效果。例如:对<>做编码如:"<"用:"<",">"用:">"来代替。
  • 3 入参长度限制:   通过以上的案例我们不难发现xss攻击要能达成往往需要较长的字符串,因此对于一些可以预期的输入可以通过限制长度强制截断来进行防御。
  • 4 设置cookie :httponly为true。 一般这种都是用在session等身份校验数据上的。

随机浏览