XSS 全称为 Cross-site scripting
中文为「跨站脚本攻击」。
通常是指利用网页开发时留下的漏洞,
巧妙地注入恶意指令代码到网页中,
让使用者载入并执行攻击者制造的网页程序。
攻击成功後,攻击者可能可以存取更高的权限、
私密网页、网页 session 和 cookie 等各种内容。
攻击者通常会另行架设一个网站,
收集被攻击者的 cookie 或其他敏感资讯,
再透过 JavaScript 等在 client 端执行的程序码,
把收集好的资料作为参数提交,
随後以资料库等形式记录在攻击者自己的服务器上。
由保存在服务器资料库中的 JavaScript 代码
引起的攻击即为 Stored XSS,
最常见的就是可由使用者
任意输入内容的论坛文章、留言板等。
若网站在接收 input 资料时没有确实检查,
使用者输入如 <script>
等关键字
就会被当成正常的 HTML 执行。
不会被储存在资料库中,
而是让网页後端直接嵌入
前端使用者所传送过来的参数达成攻击。
最常见的就是以 GET 方法传送资料给服务器时,
若网页後端未进行检查过滤掉恶意字元,
攻击者在 input 中藏入的非法参数,
就可能被服务器视为一般的代码来执行。
DOM-Based XSS 是指
网页的 JavaScript 在执行过程中,
没有详细检查资料使得操作 DOM 的过程
被代入了恶意指令。
假如未妥善检查 input 内容就代入的话,
输入任意的内容都会被建立成有效的 DOM 物件,
包含嵌入的代码也会被执行。
这种方法通常需要搭配前两个手法,
让内容保存在服务器资料库中,
或是以反射型的方式制造出内容,
再藉由 JavaScript 动态产生
有效的 DOM 物件来运行恶意代码。
这两种都必须由後端进行防范,
除了必要的 HTML 代码,
任何允许使用者输入的内容都需要检查。
检查时需要删除所有 <script>
、onerror=
及其他任何可能执行代码的字串。
若输入内容最後只是纯字串呈现的话,
基本上只要将内容全部换成
HTML 跳脱字元(escape character)即可。
DOM-Based 必须由前端来防范,
但基本上跟前面的原则相同。
撰写程序码时应该选择
正确的方法、属性来操作 DOM。
如 innerHTML
此属性
能够插入合法的 HTML 字串,
因此输入的字串就会被解析成 DOM 物件。
只要改为使用 innerText
,
在插入字串时保证会转为纯粹的文字,
也就不可能被插入恶意代码执行了。
<<: 【Day12】漏洞分析Vulnerability Analysis(一)
容器映像(container image)是开发人员创建并注册的程序包(package),包含在容...
一个人应该:活泼而守纪律,天真而不幼稚,勇敢而不鲁莽,倔强而有原则,热情而不冲动,乐观而不盲目。 《...
Image picker flutter的照片操作,从相簿选照片或是拍照 之前用的时候版本是0.7....
接下来的东西越来越复杂了,不知道要怎麽打才会让人比较好理解,希望大家可以给我点建议ಥ-ಥ,有错还请严...
今天主要要来提提Retrofit,Retrofit主要透过interface连线串接以取得资料,像是...