在学习过程中,会结合《Web安全攻防渗透测试实战指南》与《Web前端黑客技术揭秘》,在此对三本书的作者表示感谢!
道哥的安全观
安全问题的本质是信任的问题
需要高信任的区域到需要低信任的区域不需要经过安全检查,但是相反的情况是需要检查的,道哥有一个很好的比喻:“将文件放在抽屉里,用锁锁上,我们会怀疑做抽屉的有没有留后门,做锁的有没有留钥匙,如果我们都不信任,那么就不会认为其是安全的”
安全是一个持续过程
想一劳永逸解决安全问题是不现实的
安全三要素
CIA
- 机密性:数据防泄漏
- 完整性:数据防篡改
- 可用性:资源需要时可用
核心问题是数据安全
安全是产品的一个属性
荒谬的用户体验
Windows vista新增功能UAC,在出现敏感行为时,询问用户是否允许,道哥认为,如果用户能分辨什么样的行为是安全的,还要安全软件做什么?
secure by default
更多使用白名单,系统会更安全,因为在暗处的人你是看不到的
还有一个原则:最小特权原则,要求系统只授予主体必要的权限,而非过度授权
纵深防御原则
从不同层面、不同角度对系统做出整体的解决方案
还有一个要求:在正确的地方做正确的事,例如防御XSS的时候,如果单纯从过滤用户输入的角度来看,是有可能造成误伤的,例如输入1<2,将<过滤掉,失去了原来的意思
数据与代码分离
就是在数据区不能执行代码,在之前讨论ios安全机制时讨论过该问题
不可预测性
在之前ios安全机制中讨论过一种ASLR技术,就是每次程序启动后,其进程的栈基址都是不相同的,这样攻击者就不能准确找到
web安全的关键点
选自《Web前端黑客技术揭秘》与《白帽子讲Web安全》
数据与指令
其实就是安全应该讲究数据与代码相分离,如果数据中掺杂着指令/代码,会发生注入行为,如sql注入、XSS跨站脚本攻击
浏览器的同源策略
不同域的客户端脚本在没明确授权的情况下,不能读写对方的资源
同域还是不同域?
同域要求两个站点同协议、同域名、同端口
对于当前页面来说,页面内存放JavaScript文件的域并不重要,重要的是加载JavaScript页面所在的域是什么
例如a.com通过以下代码:<script src=htp://b.com/b.js></script>
加载了b.com上的脚本,但是该脚本是运行在a页面的,所以对于当前a页面来说,该脚本的域是a,不是b
下面举例说明,表中所列站点是否与http://www.foo.com同域的情况
www?
比如baidu.com是顶级域名,www.baidu.com是二级域名,这俩是不同的,有些人会说“我都能访问同一个网址啊”,那是因为为了人们的习惯,将这俩域名映射到了同一个IP地址上去了,只是这样,这俩还是独立的,你在其中一个登录并没有在另一个登录,这就要进行重定向,比如301重定向,统一www和不带www的
301重定向:301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。
html中带有src属性的标签,可以跨域加载资源,相当于浏览器发起一次get请求,但是浏览器限制了js的权限,不能读写
客户端脚本
比如javascript
授权
在做网页时,经常会遇到ajax拒绝跨域访问,但是一般在springboot中添加注释@CrossOrigin(origins="*")
即可允许所有域访问
只有目标站点明确返回HTTP响应头:
Access-Control-Allow-Origin:http://www.evil.com
http://www.evil.com站点上的客户端脚本就有权使用ajax对目标站点的数据进行读写操作
而JavaScript是无法控制该HTTP头的,这是个信任基础
ajax
asynchronous JavaScript and xml,让数据在后台进行异步传输,常用场景:对网页的局部数据进行更新时,不需要刷新整个网页,以节省带宽资源
资源
web客户端资源,如HTTP消息头、DOM树、Cookie等
DOM
Document Object Model,文档对象模型,浏览器将HTML/XML文档抽象为一个树形结构,树上的每个节点都代表HTML/XML中的标签、标签属性或标签内容,方便JavaScript进行读写操作
第三方插件的同源策略
以flash为例,它是通过目标网站提供的crossdomain.xml文件来判断是否允许当前源的flash跨域访问,例如qq的
后来flash又更新了检查策略,因为黑客可通过上传crossdomain.xml来控制
IE8的CSS跨域漏洞
<script>
标签只能加载资源不能读写,而这个漏洞绕过了同源策略
同源策略的重要性
如果没有同源策略,当我们登录一个邮箱时,同时打开另一个站点,这个站点上的脚本就可以跨域读取我们呢邮箱里的数据了
信任
看道哥的安全观
这里从余弦的这本书里摘出几个例子:
- 一个web服务器里有俩网站A、B,攻A不好攻,攻B成功了,由于AB间可能过分信任,所以A也会比较容易被攻破;
- 使用第三方的
<script>
的脚本,比如搜狐的获取本机IP,如果第三方被黑客挂马,自己也将受攻击,这是因为信任了第三方,还有一个浏览器插件攻击,之前尝试过,对于防护弱的是可以的
社会工程学
Google Hack、SNS垂直搜索、数据集等
SNS垂直搜索
Social Networking Services,社交网络服务
针对社交网络进行的搜索,更细分
浏览器沙箱机制
多进程架构,将浏览器各个功能模块分开,限制不可信任的代码访问隔离区之外的资源,通信限定默认API
恶意网址查询平台
搜集黑名单
PhishTank、Google的SafeBrowsing API