常见 Web 安全攻防总结
Web 安全的对于 Web 从业人员来说是一个非常重要的课题,所以在这里总结一下 Web 相关的安全攻防知识,希望以后不要再踩雷,也希望对看到这篇文章的同学有所帮助。今天这边文章主要的内容就是分析几种常见的攻击的类型以及防御的方法。
也许你对所有的安全问题都有一定的认识,但最主要的还是在编码设计的过程中时刻绷紧安全那根弦,需要反复推敲每个实现细节,安全无小事。
本文代码 Demo 都是基于 Node.js 讲解,其他服务端语言同样可以参考。
(1)非持久型 XSS
(2)持久型 XSS
(3)基于字符集的 XSS
(4)基于 Flash 的跨站 XSS
(5)未经验证的跳转 XSS
2、CSRF(1)CSRF 原理
(2)预防 CSRF
3、SQL注入(1)SQL 注入原理
(2)如何预防 SQL 注入
4、命令行注入 5、流量劫持(1)DNS劫持
(2)HTTP劫持
6、服务器漏洞(1)越权操作漏洞
(2)目录遍历漏洞
(3)物理路径泄露漏洞
(4)源码暴露漏洞
1、XSS首先说下最常见的 XSS 漏洞,XSS (Cross Site Script),跨站脚本攻击,因为缩写和 CSS (Cascading Style Sheets) 重叠,所以只能叫 XSS。
XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。XSS 的攻击方式千变万化,但还是可以大致细分为几种类型。
(1)非持久型 XSS非持久型 XSS 漏洞,也叫反射型 XSS 漏洞,一般是通过给别人发送带有恶意脚本代码参数的 URL,当 URL 地址被打开时,特有的恶意代码参数被 HTML 解析、执行。
举一个例子,比如你的 Web 页面中包含有以下代码:
Select your language: <select> <script> document.write(‘‘ + ‘<option value=1>‘ + location.href.substring(location.href.indexOf(‘default=‘) + 8) + ‘</option>‘ ); document.write(‘<option value=2>English</option>‘); </script> </select>
攻击者可以直接通过 URL (类似:https://xx.com/xx?default=<script>alert(document.cookie)</script>) 注入可执行的脚本代码。
非持久型 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 转义。
(2)持久型 XSS持久型 XSS 漏洞,也被称为存储型 XSS 漏洞,一般存在于 Form 表单提交等交互功能,如发帖留言,提交文本信息等,黑客利用的 XSS 漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。
主要注入页面方式和非持久型 XSS 漏洞类似,只不过持久型的不是来源于 URL,refferer,forms 等,而是来源于后端从数据库中读出来的数据。持久型 XSS 攻击不需要诱骗点击,黑客只需要在提交表单的地方完成注入即可,但是这种 XSS 攻击的成本相对还是很高。攻击成功需要同时满足以下几个条件:
POST 请求提交表单后端没做转义直接入库。
后端从数据库中取出数据没做转义直接输出给前端。
前端拿到后端数据没做转义直接渲染成 DOM。
持久型 XSS 有以下几个特点:
持久性,植入在数据库中
危害面广,甚至可以让用户机器变成 DDoS 攻击的肉鸡。
盗取用户敏感私密信息
为了防止持久型 XSS 漏洞,需要前后端共同努力:
后端在入库前应该选择不相信任何前端数据,将所有的字段统一进行转义处理。
后端在输出给前端数据统一进行转义处理。
前端在渲染页面 DOM 的时候应该选择不相信任何后端数据,任何字段都需要做转义处理。
(3)基于字符集的 XSS温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/42048.html
- 上一篇:php手记之03
- 下一篇:网易注册界面实战之信息填写