Web 安全地对于 Web 从业人员来说是一个非常重要的课题,所以在这里总结一下 Web 相关的安全攻防知识,希望以后不要再踩雷,也希望对看到这篇文章的同学有所帮助 。今天这边文章主要的内容就是分析几种常见的攻击的类型以及防御的方法 。
文章插图
也许你对所有的安全问题都有一定的认识,但最主要的还是在编码设计的过程中时刻绷紧安全那根弦,需要反复推敲每个实现细节,安全无小事 。本文代码 Demo 都是基于 Node.js 讲解,其他服务端语言同样可以参考 。
XSS
首先说下最常见的 XSS 漏洞,XSS (Cross Site Script),跨站脚本攻击,因为缩写和 CSS (Cascading Style Sheets) 重叠,所以只能叫 XSS 。
XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的 。XSS 的攻击方式千变万化,但还是可以大致细分为几种类型 。
非持久型 XSS
非持久型 XSS 漏洞,也叫反射型 XSS 漏洞,一般是通过给别人发送带有恶意脚本代码参数的 URL,当 URL 地址被打开时,特有的恶意代码参数被 HTML 解析、执行 。
举一个例子,比如你的 Web 页面中包含有以下代码:
1 2 3 4 5 6 7 8 9 10 11Select your language:document.write(\\’\\’ + \\\'\\’ + location.href.substring(location.href.indexOf(\\’default=\\’) + 8) + \\\'\\’ ); document.write(\\\'English\\’);
攻击者可以直接通过 URL 注入可执行的脚本代码 。
非持久型 XSS 漏洞攻击有以下几点特征:
即时性,不经过服务器存储,直接通过 HTTP 的 GET 和 POST 请求就能完成一次攻击,拿到用户隐私数据 。攻击者需要诱骗点击反馈率低,所以较难发现和响应修复盗取用户敏感保密信息
为了防止出现非持久型 XSS 漏洞,需要确保这么几件事情:
Web 页面渲染的所有内容或者渲染的数据都必须来自于服务端 。尽量不要从 URL,document.referrer,document.forms 等这种 DOM API 中获取数据直接渲染 。尽量不要使用 eval, new Function(),document.write(),document.writeln(),window.setInterval(),window.setTimeout(),innerHTML,document.creteElement() 等可执行字符串的方法 。如果做不到以上几点,也必须对涉及 DOM 渲染的方法传入的字符串参数做 escape 转义 。前端渲染的时候对任何的字段都需要做 escape 转义编码 。
escape 转义的目的是将一些构成 HTML 标签的元素转义,比如 ,空格 等,转义成 ,等显示转义字符 。有很多开源的工具可以协助我们做 escape 转义 。
持久型 XSS
持久型 XSS 漏洞,也被称为存储型 XSS 漏洞,一般存在于 Form 表单提交等交互功能,如发帖留言,提交文本信息等,黑客利用的 XSS 漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行 。
主要注入页面方式和非持久型 XSS 漏洞类似,只不过持久型的不是来源于 URL,refferer,forms 等,而是来源于后端从数据库中读出来的数据 。持久型 XSS 攻击不需要诱骗点击,黑客只需要在提交表单的地方完成注入即可,但是这种 XSS 攻击的成本相对还是很高 。攻击成功需要同时满足以下几个条件:
POST 请求提交表单后端没做转义直接入库 。后端从数据库中取出数据没做转义直接输出给前端 。前端拿到后端数据没做转义直接渲染成 DOM 。
持久型 XSS 有以下几个特点:
持久性,植入在数据库中危害面广,甚至可以让用户机器变成 DDoS 攻击的肉鸡 。盗取用户敏感私密信息
为了防止持久型 XSS 漏洞,需要前后端共同努力:
后端在入库前应该选择不相信任何前端数据,将所有的字段统一进行转义处理 。后端在输出给前端数据统一进行转义处理 。前端在渲染页面 DOM 的时候应该选择不相信任何后端数据,任何字段都需要做转义处理 。基于字符集的 XSS
其实现在很多的浏览器以及各种开源的库都专门针对了 XSS 进行转义处理,尽量默认抵御绝大多数 XSS 攻击,但是还是有很多方式可以绕过转义规则,让人防不胜防 。比如「基于字符集的 XSS 攻击」就是绕过这些转义处理的一种攻击方式,比如有些 Web 页面字符集不固定,用户输入非期望字符集的字符,有时会绕过转义过滤规则 。
以基于 utf-7 的 XSS 为例utf-7 是可以将所有的 unicode 通过 7bit 来表示的一种字符集 (但现在已经从 Unicode 规格中移除) 。这个字符集为了通过 7bit 来表示所有的文字, 除去数字和一部分的符号,其它的部分将都以 base64 编码为基础的方式呈现 。
- 讲解美的sc861a吸尘器体验 美的吸尘器sc861a价格
- 电磁炉加热原理图讲解,美的电磁炉电路原理图分析
- 苦味菜有哪些功效完美讲解
- webservice客户端调用方式 idea生成webservice客户端代码
- 月字的来历故事,月汉字的演变过程讲解
- 口味虾是哪里的菜?属于什么菜系讲解
- 发动机转速多少为正常讲解 16轩逸120发动机转速多少
- 有什么办法 衣柜安装图纸详细讲解
- 浅谈网络社区营销的发展史 网络社区有哪些
- 舟过安仁讲解 舟过安仁古诗的意思