简单总结一下 XSS

你听说过XSS吗?
XSS(Cross-site scripting, 跨站脚本)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。
研究表明,最近几年 XSS 已经超过 “缓冲区溢出” 成为最流行的攻击方式,有68%的网站可能遭受此类攻击。

那么检测一下你是否充分了解 XSS 吧

  1. XSS 为什么会发生?
  2. XSS 有几种类型?
  3. XSS 如何预防和修复?

如果可以回答?3个问题,这篇文章对你提升是微乎其微的。
如果不可以,你可以花十分钟左右阅读一下。

我目前的客户是一家银行,因为企业特性和业务需求,对系统安全高度重视。
因此,我不得不分析了整个系统,从中找出未对应 XSS 的 Code 。说实话,虽然是企业内部系统,但是代码也不少,看代码看的我都快吐了。

得益于此,让我对XSS的理解更加深了一层。

1. XSS 为什么会发生?

因为用户输入的数据被当成代码执行了。

那么,为什么用户输入的数据会被当成代码并且被执行呢?
因为当用户输入尖括号< >,引号' ",斜杠/之类的特殊字符时,可能破坏原始的代码结构,导致输入的部分内容被当成代码,并且被执行。

[小例子]
假如有下面一个textbox

hello tj是来自用户的输入,如果用户不是输入hello tj,而是输入"/>

2. XSS 有几种类型?

XSS 有两种类型,反射型XSS持久型XSS

反射型XSS

也就是非持久型XSS,常见诱骗用户点击带有攻击代码的URL链接,链接被浏览器执行,从而攻击用户。
只有当前用户被影响,影响范围:小。

[小例子]

小姐姐

如果你点击了?链接,你cookie信息就有可能被发送到黑客的服务器http://hacker.com
虽然链接可能被用户怀疑,但是可以通过短网址服务将之缩短,从而隐藏攻击代码。

持久型XSS

也叫存储型XSS,提交包含攻击代码的数据到服务器。
所有浏览这部分数据的用户都将被攻击代码影响,影响范围:大

[小例子]
html模版如下:

当从数据库查询的 message 如下:
"/>

此时,html可能已经不受我们控制了。

3. XSS 如何预防和修复?

原则:所有用户输入都是不可信的。(注意:攻击代码不一定仅在中。)

  • 预防 反射型XSS
    将重要的cookie标记为http only,这样的话Javascript 中的document.cookie语句就不能获取到cookie了。

  • 预防 持久型XSS
    处理掉可能破坏原始代码结构的特殊字符。将特殊字符编码成转义字符,使其成为数据的一部分而不是代码。
    [需要编码的7个字符]
&     –>     &
<     –>     <
>     –>     >
"     –>     "
`     ->     `
'     –>     '
/     –>     /

有两点需要特别说明的是:

  1. 不推荐将单引号'编码为 &apos; ,因为它并不是标准的HTML标签
  2. 需要对斜杠号/编码,因为在进行XSS攻击时,斜杠号对于关闭当前HTML标签非常有用

(最后)

  1. 分享一段简单的代码
function escapeHtml(value) {
  if (typeof value !== 'string') {
    return value
  }
  return value.replace(/[&<>`"'\/]/g, function(result) {
    return {
      '&': '&',
      '<': '<',
      '>': '>',
      '`': '`',
      '"': '"',
      "'": ''',
      '/': '/',
    }[result]
  })
}
  1. 分享一些用于检测 XSS 的测试用例
>
='>
">


%3Cscript%3Ealert('XSS')%3C/script%3E


希望这篇文章对你有帮助。by iamtjcn
首发:blog.iamtjcn.com

转载于:https://www.cnblogs.com/FlightButterfly/p/7118324.html

你可能感兴趣的:(简单总结一下 XSS)