安全方案的四个原则
安全方案的四个原则
一、Secure by Default 原则(默认安全)
这是安全方案中的最基本的原则。该原则可以归纳为白名单、黑名单思想。
1.黑名单、白名单
白名单:除了名单上的,其他都不被信任;黑名单:除了不信任名单上的,其他都默认信任。
更多地使用白名单,会让系统变得更加安全。
但是白名单本身也不一定安全,问题就在于白名单上那些被信任的是不安全的时候,白名单就变得不安全了。比如说白名单里某一项是通配符*,那么白名单的安全性就很难保证了。
2.最小权原则
最小全原则:只给主体能够完成当前任务的最小权限,避免主体拥有过高权限。
该原则同时也是安全设计的基本原则之一。
比如在linux系统中,尽可能只用普通账户登陆,需要的时候才用sudo命令获得更高权限。
二、纵深防御原则
纵深防御原则有两层的含义:一层是,要在系统的不同层面,不同方面实施安全方案,避免出现疏漏,不同的方案之间需要相互的配合从而构成一个整体。另一层是,要在正确的地方做正确的事,要在能够解决根本问题的地方实施针对性的方案。
对于第一层的理解,类似自来水厂过滤脏水,其中要经过多道过滤,每一道的目标和过滤对象并不完全相同,多道过滤层层递进能够保证最终的水是干净的。在安全中,应该把他分为多层面考虑,如web安全,os安全数据库安全等,每层安全应该彼此配合形成体系。
对于第二层,关键在于在解决根本问题的地方实施针对性的方案 ,也就是说需要深入的理解威胁的本质,做出正确有效的应对方案。
一个反面例子是早期对于xss的防御,早期xss防御策略是过滤一些特殊字符,以此来避免恶意代码攻击,但是这样往往会改变用户输入的意思。比如说:1 < 2 变成 12 ,特殊字符<被过滤导致用户输入意图被改变。
其问题原因是该策略 “没有在正确的地方做正确的事”,xss攻击发生的位置实际上是在用户的浏览器上,或者说是 服务器输出给用户浏览器的html页面中被注入了恶意代码。 对系统取得的用户输入做过滤其实是不合适的。
三、数据与代码分离原则
该原则特别适合各种 “注入” 攻击的场合。另外缓存区溢出也可以看作违背这一原则的后果,程序在栈或堆栈中,错吧数据当作代码执行。
一个例子是这样的
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_REQUEST['fname'];
echo $name;
?>
</body>
</html>
上面的php代码,能够把用户输入的数据输出到屏幕上。例如
这段代码存在漏洞,那就是没有做到数据和代码的分离,数据会直接输出到发送给用户的thml代码中
这也就会导致,假如用户输入额是一段恶意代码,比如一段xss攻击代码:,就会导致:
造成xss攻击。
四、不可预测性原则
在此前的三个原则,secure default是最基本的原则;纵深防御,是要更加全面的、正确的看待问题;数据与代码分离是从漏洞成因上看问题;而不可预测性是从克服攻击方法的角度看问题。
简单来说,让系统内的东西对于攻击者而言 “不可预测” 让攻击者无法有效的攻击。
一个例子是微软的ASLD技术,她能够让程序在每次启动时,进程基地址都不同,从而具有一定的随机性,让攻击者无法有效的猜测内存地址,提高攻击门槛,这样即使不能消除威胁,但也能是攻击方法无效也算成功防御。
另外一个例子是B站,B站的视频编号从最早的av号变成了BV号,av号是顺序的使得爬虫软件能够轻松的爬取视频内容,相对来说随机的BV号能够一定程度防御爬虫。
posted on 2022-05-12 17:02 Akiyama_tsuki 阅读(403) 评论(0) 编辑 收藏 举报