Web安全

Web安全

1.Web安全的兴起

Web攻击技术的发展也可以分为几个阶段。Web1.0时代,人们更多的是关注服务器端动态脚本的安全问题,比如将一个可执行脚本上传到服务器上,从而获得权限。动态脚本语言的普及,以及Web技术发展初期对安全问题认知的不足导致很多“血案”的发生,同时也遗留下很多历史问题,比如PHP语言至今仍然只能靠较好的代码规范来保证没有文件包含漏洞,而无法从语言本身杜绝此类安全问题的发生。

SQL注入的出现是Web安全史上的一个里程碑,它最早出现大概是在1999年,并很快就成为Web安全的头号大敌。就如同缓冲区溢出出现时一样,程序员不得不日以继夜地去修改程序中存在的漏洞。黑客们发现通过SQL注入攻击,可以获取很多重要的、敏感的数据,甚至能够通过数据库获取系统访问权限,这种效果并不比直接攻击系统软件差,Web攻击一下子就流行起来。SQL注入漏洞至今仍然是Web安全领域的一个重要组成部分。

XSS(扩展脚本攻击)的出现则是Web安全史上的另一个里程碑。实际上,XSS的出现时间和SQL注入差不多,但是真正引起人们重视则是在大概2003年以后。在经历了MySpace的XSS蠕虫时间后,安全界对XSS的重视程度提高了许多,OWASP2007 TOP10威胁甚至把XSS排在了榜首。

伴随这Web2.0的兴起,XSS、CSRF等攻击已经变得更为强大。Web攻击的思路也从服务器转向了客户端,转向了浏览器和用户。黑客们天马行空的思路,覆盖了Web的每一个环节,变得更加的多样化。

2.安全的三要素

安全三要素是安全的基本组成元素,分别是机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)

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

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

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

3.安全评估

安全评估的过程可以简单地分为以下4个阶段:资产等级划分、威胁分析、风险分析、确认解决方案。

4.威胁分析

威胁 定义 对应的安全属性
Spoofing(伪装) 冒充他人身份 认证
Tampering(篡改) 修改数据或者代码 完整性
Repudiation(抵赖) 否认做过的事情 不可抵赖性
InformationDisclosure(信息泄露) 机密信息泄露 机密性
Denial of Service(拒绝服务) 拒绝服务 可用性
Elevation of Privilege(提升权限) 未经授权获得许可 授权

5.Secure By Default原则

在设计安全方案时,最基本也最重要的原则就是“Secure By Default”。在做任何安全设计时,都要记住这个原则。

实际上,“Secure By Default”原则,也可以归纳为白名单、黑名单的思想。如果更多地使用白名单,那么系统就会变得更安全。

6.最小权限原则

Secure By Default的另一层含义就是“最小权限原则”。最小权限原则也是安全设计的基本原则之一。最小权限原则要求系统只授予主体必要的权限,而不要过度授权,这样能有效地减少系统、网络、应用、数据库出错的机会。

7.数据与代码分离原则

另一个重要的安全原则就是数据与代码分离原则。这一原则广泛适用于各种由于“注入”二引发安全问题的场景。

实际上,缓冲区溢出,也可以认为是程序违背了这一原则的后果——程序在栈或者堆中,将用户数据当作代码执行,混淆了代码与数据的边界,从而导致安全的发生。

8.不可预测性原则

微软为了解决缓冲区溢出的问题,因此微软在Windows的新版本中增加了许多对抗缓冲区溢出等内存攻击的功能。微软使用的ALSR技术,在较新的版本的Linux内核中支持。在ASLR的控制下,一个程序每次启动时,其进程的栈基址都不相同,具有一定的随机性,对于攻击者来说,这就是“不可预测性”。

Web安全

上一篇:Var()函数用于插入css变量的值


下一篇:从输入URL到页面显示过程中发生了什么