另一个重要的安全原则是数据与代码分离原则。这一原则广泛适用于各种由于"注入"而引发安全问题的场景。
实际上,缓冲区溢出,也可以认为是程序违背了这一原则的后果--程序在栈或者堆中,将用户数据当做代码执行,混淆了代码与数据的边界,从而导致安全问题的发生。
在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=ht
阅读全文地址:
http://book.2cto.com/201208/1989.html