安全策略之数据与代码分离原则

来源:互联网 发布:大学网络怎么办理 编辑:程序博客网 时间:2024/06/04 19:25

今天是第一天写关于安全策略问题,而不是技术问题,原因我发现一个系统的安全级别的高低与采用怎样的安全策略有着不可分割的关系。如果没有采取好的安全策略,那么很有可能千里之堤,溃于蚁穴。

而数据与代码分析原则主要应用于各种由于注入而引发的安全问题。

而在web安全中,由于注入带来的问题比比皆是,如x-path注入,sql注入,xss等等。这些问题都需要数据与代码分离的原则来设计出真正安全的解决方案。

下面以xss为例,它产生的原因是HTML 注入 或者是JS注入,如下面代码:

<html><head>test</head><body>$var</hody></html>

其中$var是用户能够控制的变量,那么对于这段代码来说:

<html><head>test</head><body></body></html>

上面的代码就是程序的代码执行片段,而$var就是程序的用户数据片段。
如果把用户数据片段$var当成代码片段来执行,解释,就十分可能引发安全问题。
为了证明以上的安全问题,我们来对代码进行一下注入,比如当$var的值是:

<script src =http://eval></script>

这时候,就破坏了用户数据的完整性。解析这段脚本,并且执行是浏览器。它把用户数据里的<script>标签当作代码来解释,这显然违背了开发者的本意。
然而安全的策略是什么呢?
根据数据与代码分离的原则,这里要对$var变量做一个处理。
可以使用一些过滤和编码的手段,对可能造成混淆的代码进行清洗,而这里就是针对<和>等符号进行处理。
此时可能会有另外一种情况,就是这里本来就需要<script>标签弹出一段文字,比如:“我爱你,李倩”。那怎么办?
那么我们重写安全代码:

<html><head>test</head><body><script>alert(“$var”);</script></body></html>

这样的话,<script>标签也变成了代码的一部分,用户只能控制$var变量。也就杜绝了安全问题。这里我们遵守的是用户控制最少代码原则。

本文参考书籍吴翰青的《白帽子讲安全》。