跨站脚本攻击 XSS

【内容总结自:极客时间:浏览器工作原理与实现--李兵】仅作为自己学习记录总结

 

什么是 XSS?

XSS 全称是 Cross Site Scripting,为了与“CSS”区分开来,故简称 XSS,翻译过来就是“跨站脚本”。

 

XSS 攻击可以做什么?

  • 窃取 Cookie 信息。通过“document.cookie”获取 Cookie 信息
  • 监听用户行为。使用“addEventListener”接口来监听键盘事件,获取用户输入的信息
  • 修改 DOM 伪造假的登录窗口,获取用户的登录信息等(还可生成广告,影响用户体验)
  • ......等

 

如何发起XSS攻击?

通常情况下,主要有存储型 XSS 攻击反射型 XSS 攻击基于 DOM 的 XSS 攻击三种方式来注入恶意脚本

存储型xss攻击:

攻击者:将一段恶意JavaScript代码提交到服务器数据库中保存

浏览器:渲染了一个公共页面,显示了【攻击者】提交的数据

用户:用户浏览的页面,包含了【攻击者】的恶意JavaScript代码

结果:【攻击者】的脚本代码就可能获取到【用户】的相关信息等

情景描述:比如一个仓库,没有大门也没有门卫(网站没做任何安全措施)。一个坏蛋(黑客)光明正大的走了进去,并找了一个空地,埋下了一颗地雷(恶意脚本)。然后有一个普通人走进了仓库(浏览页面),在普通人没有靠近地雷区域的时候,他都是出于安全的状态。普通人在仓库里逛啊逛,突然走到了地雷区域(有恶意脚本的页面),然后不小心踩到了,就炸了(xss攻击)。

反射型 XSS 攻击:

在一个反射型 XSS 攻击过程中,恶意 JavaScript 脚本属于用户发送给网站请求中的一部分,随后网站又把恶意 JavaScript 脚本返回给用户。

比如一个网址:https://www.xxx.com?name=zhangsan

通过带参数的形式,把 zhangsan 渲染到页面上

这个时候,就可以修改链接:https://www.xxx.com?name=<script>alert('你被xss攻击了')</script>

存储型和反射型的区别:一个保存在服务器的数据库中个 ,一个只是伪装在链接的参数上。

基于 DOM 的 XSS 攻击

基于 DOM 的 XSS 攻击是不牵涉到页面 Web 服务器的。具体来讲,黑客通过各种手段将恶意脚本注入用户的页面中,比如通过网络劫持在页面传输过程中修改 HTML 页面的内容,这种劫持类型很多,有通过 WiFi 路由器劫持的,有通过本地恶意软件来劫持的,它们的共同点是在 Web 资源传输过程或者在用户使用页面的过程中修改 Web 页面的数据。

如何阻止 XSS 攻击?

存储型xss攻击 和 反射型xss攻击 属于 服务端 的问题 而 基于DOM的xss攻击 则是 前端 的责任

不管是哪种类型的攻击,都是往浏览器中注入恶意脚本,然后再通过恶意脚本将获取到的信息发送到黑客部署的服务器中

1. 服务器对输入脚本进行过滤或转码

不管是反射型还是存储型 XSS 攻击,都可以在服务器端将一些关键的字符进行转码

比如最典型的

// 过滤前
code:<script>alert('xss攻击');</script>

// 过滤后
code:

除了直接过滤掉 <script>xxx</script> 之外,还可以对关键字符进行转码

// 还是上面的代码
code:<script>alert('xss攻击');</script>
// 转码后
code:&lt;script&gt;alert(&#39;你被xss攻击了&#39;)&lt;/script&gt;

2. 充分利用 CSP

为了解决 XSS 攻击,浏览器中引入了内容安全策略,称为 CSP。

CSP 的核心思想是让服务器决定浏览器能够加载哪些资源,让服务器决定浏览器是否能够执行内联 JavaScript 代码。通过这些手段就可以大大减少 XSS 攻击。

在服务端对数据进行过滤和转码可以阻止xss的攻击,但是这还是不够的。还需要充分利用 CSP 等策略。

具体来讲 CSP 有如下几个功能:

  • 限制加载其他域下的资源文件,这样即使黑客插入了一个 JavaScript 文件,这个 JavaScript 文件也是无法被加载的;
  • 禁止向第三方域提交数据,这样用户数据也不会外泄;
  • 禁止执行内联脚本和未授权的脚本;
  • 还提供了上报机制,这样可以帮助我们尽快发现有哪些 XSS 攻击,以便尽快修复问题。

3. 使用 HttpOnly 属性

xss攻击主要都是来盗用 cookie 信息的。因此可以使用 HttpOnly 来保护 cookie 的安全

 在服务器端给 header 设置 HttpOnly 属性

总结: 

  • XSS 攻击就是黑客往页面中注入恶意脚本,然后将页面的一些重要数据上传到恶意服务器。
  • 常见的三种 XSS 攻击模式是存储型 XSS 攻击、反射型 XSS 攻击和基于 DOM 的 XSS 攻击。
  • 这三种攻击方式的共同点是都需要往用户的页面中注入恶意脚本,然后再通过恶意脚本将用户数据上传到黑客的恶意服务器上。
  • 而三者的不同点在于注入的方式不一样,有通过服务器漏洞来进行注入的,还有在客户端直接注入的。
  • 针对这些 XSS 攻击,主要有三种防范策略,第一种是通过服务器对输入的内容进行过滤或者转码,第二种是充分利用好 CSP,第三种是使用 HttpOnly 来保护重要的 Cookie 信息。
  • 当然除了以上策略之外,我们还可以通过添加验证码防止脚本冒充用户提交危险操作。
  • 而对于一些不受信任的输入,还可以限制其输入长度,这样可以增大 XSS 攻击的难度。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章