0%

web安全基本理论

在用户态的最高权限是root

黑客需要能够自己挖掘漏洞,编写exploit

早期,黑客攻击的目标以系统软件居多,能直接获得root权限

基于web的攻击,只能让黑客获得较低权限的账户

客户端软件安全的代表是浏览器攻击

PHP语言只能靠着较好的代码规范来保证没有文件包含漏洞

Web攻击的思路也从服务器端转向了客户端,转向了浏览器和用户

白帽子选择的方法是客服某种攻击方法,而并非抵御单次的攻击

谁能在技术上领先,谁就能占据主动

安全问题的本质是信任的问题

对条件的信任程度,是确定对象是否安全的基础

把握信任条件的度,使其恰到好处,正是设计安全方案的难点所在

安全是一个持续的过程,防御技术在不断发展的同时,攻击技术也在不断地发展,两者之间是互相辩证,互相促进的关系

安全三要素分别是:机密性、完整性和可用性

机密性要求保护数据内容不能泄露,加密是实现机密性的要求的常见手段

完整性要求保护数据内容是完整的、没有被篡改的,常见的保证一致性的技术手段是数字签名

可用性要求保护资源是随需而得

拒绝服务攻击破坏的是安全的可用性

资产等级划分,是所有工作的基础,能够帮助关乎我们明确目标是什么,要保护什么

互联网安全的核心问题,是数据安全的问题

做资产等级划分需要明确公司最重要的资产是什么,他们最看重的数据是什么的

完成资产等级划分之后就要划分信任域和信任边界了

威胁分析,可能造成危害的来源叫威胁,可能会出现的损失叫风险

威胁分析就是把所有的威胁都找出来,比如说使用模型帮助我们去想哪些方面可能会存在威胁,这就是威胁建模

威胁可以是:冒充他人身份、修改数据或代码、否认做过的事情、机密信息的泄露、拒绝服务、未经授权许可

风险分析,影响风险高低的因素除了造成损失的大小,还需要考虑发生的可能性

DREAD模型和STRIDE模型都起辅助的作用,最终作出决策的还是人

设计安全方案,要想的是如何通过简单有效的方案解决遇到的安全问题,安全方案能够有效地抵抗威胁,但同时不能过度干涉业务的正常流程,也不能在性能上拖后腿

一个优秀的安全方案应该是这样:

能够有效地解决问题

用户体验好

高性能

低耦合

易于扩展与升级

设计安全方案的技巧:

设置黑名单、白名单:在制定防火墙的网络访问控制策略,网站只提供web服务,应只允许某些端口对外提供服务

在网站的生产环境服务器上,应该限制随意安装软件,需要制定统一的软件版本的规范

在选择使用白名单时,需要注意避免类似通配符的问题

最小权限原则要求系统只授予主体必要的权限,而不要过度授权

纵深防御原则:

要在各个不同的层面、不同的方面实施安全方案,避免出现疏漏,不同的安全方案之间需要相互配合,构成一个整体;其次,要在正确的地方做正确的事情,在解决根本问题的地方实施针对性的安全方案

将不同层面设计的安全方案,将共同组成整个防御系统

纵深防御的第二层含义,理解威胁的本质,做出正确的应对措施

数据与代码分离原则

混淆了代码与数据的边界,导致安全问题的发生

使得攻击的方法无效,也可以算是成功的防御

不可预测性原则

采取的做法是让漏洞攻击方法失效,提高攻击门槛

不可预测性能有效地对抗基于篡改、伪造的攻击

往往用到加密算法、随机数算法、哈希算法、

定义一个功能是否是漏洞,只看后果,而不应该看过程

漏洞只是对破坏性功能的一个统称

0字节截断

同源策略,是一种约定,web是构建在同源策略基础上的,浏览器只是针对同源策略的一种实现

为了不让浏览器的页面发生混乱,浏览器提出了源这一概念,影响源的因素有:域名、子域名、端口、协议,对于当前页面来说,页面内存放的JAVASCRIPT文件的域并不重要,重要的是加载Javascript页面所在的域是什么

这些带src属性的标签每次加载的,实际上是由浏览器发起了一次GET请求,通过src属性加载的资源,浏览器限制了JAVASCRIPT的权限,使其不能读,写返回的内容

跨域访问方案的安全基础是信任javascipt无法控制该HTTP头,如果此信任的基础被打破,此方案也不再安全