Day11【Web】网路攻击:XSS

XSS 全称为 Cross-site scripting
中文为「跨站脚本攻击」。

通常是指利用网页开发时留下的漏洞,
巧妙地注入恶意指令代码到网页中,
让使用者载入并执行攻击者制造的网页程序。
攻击成功後,攻击者可能可以存取更高的权限、
私密网页、网页 session 和 cookie 等各种内容。

攻击者通常会另行架设一个网站,
收集被攻击者的 cookie 或其他敏感资讯,
再透过 JavaScript 等在 client 端执行的程序码,
把收集好的资料作为参数提交,
随後以资料库等形式记录在攻击者自己的服务器上。


XSS 的类型

  • Stored XSS(储存型)
  • Reflected XSS(反射型)
  • DOM-Based XSS(基於 DOM 的类型)

Stored XSS(储存型)

由保存在服务器资料库中的 JavaScript 代码
引起的攻击即为 Stored XSS,
最常见的就是可由使用者
任意输入内容的论坛文章、留言板等。

若网站在接收 input 资料时没有确实检查,
使用者输入如 <script> 等关键字
就会被当成正常的 HTML 执行。

Reflected XSS(反射型)

不会被储存在资料库中,
而是让网页後端直接嵌入
前端使用者所传送过来的参数达成攻击。

最常见的就是以 GET 方法传送资料给服务器时,
若网页後端未进行检查过滤掉恶意字元,
攻击者在 input 中藏入的非法参数,
就可能被服务器视为一般的代码来执行。

DOM-Based XSS(基於 DOM 的类型)

DOM-Based XSS 是指
网页的 JavaScript 在执行过程中,
没有详细检查资料使得操作 DOM 的过程
被代入了恶意指令。

假如未妥善检查 input 内容就代入的话,
输入任意的内容都会被建立成有效的 DOM 物件,
包含嵌入的代码也会被执行。

这种方法通常需要搭配前两个手法,
让内容保存在服务器资料库中,
或是以反射型的方式制造出内容,
再藉由 JavaScript 动态产生
有效的 DOM 物件来运行恶意代码。


如何防范 XSS 攻击

Stored、Reflected 防范

这两种都必须由後端进行防范,
除了必要的 HTML 代码,
任何允许使用者输入的内容都需要检查。

检查时需要删除所有 <script>onerror=
及其他任何可能执行代码的字串。

若输入内容最後只是纯字串呈现的话,
基本上只要将内容全部换成
HTML 跳脱字元(escape character)即可。

DOM-Based 防范

DOM-Based 必须由前端来防范,
但基本上跟前面的原则相同。

撰写程序码时应该选择
正确的方法、属性来操作 DOM。
innerHTML 此属性
能够插入合法的 HTML 字串,
因此输入的字串就会被解析成 DOM 物件。
只要改为使用 innerText
在插入字串时保证会转为纯粹的文字,
也就不可能被插入恶意代码执行了。


CSRF 与 XSS 的不同?

  • CSRF 利用的是网站对使用者网页浏览器的信任
  • XSS 利用的是使用者对指定网站的信任

参考资料


<<:  【Day12】漏洞分析Vulnerability Analysis(一)

>>:  【第十三天 - 时间型SQL注入】

容器化基本概念

容器映像(container image)是开发人员创建并注册的程序包(package),包含在容...

Day 22 活泼是为了不让人倦怠

一个人应该:活泼而守纪律,天真而不幼稚,勇敢而不鲁莽,倔强而有原则,热情而不冲动,乐观而不盲目。 《...

[Day07] Flutter with GetX image picker 手机相簿选照片

Image picker flutter的照片操作,从相簿选照片或是拍照 之前用的时候版本是0.7....

[Day 7] Vue的生命周期

接下来的东西越来越复杂了,不知道要怎麽打才会让人比较好理解,希望大家可以给我点建议ಥ-ಥ,有错还请严...

Day20 Android - Retrofit(Get)

今天主要要来提提Retrofit,Retrofit主要透过interface连线串接以取得资料,像是...