在网站建设过程中,数据与代码的分离是安全措施中很重要的规划,不仅是后续的维护方便,另一个重要的安全原则是数据与代码分离原则,虽然前面我通过《网站安全纵深防御原则的实施方法》也介绍了不少原则性的防范措施,但南昌网站设计公司百恒网络安全工程师认为数据与代码分离这一原则广泛适用于各种由于“注入”而 引发安全问题的场景。
实际上,缓冲区溢出,也可以认为是程序违背了这一原则的后果——程序在栈或者堆中, 将用户数据当做代码执行,混淆了代码与数据的边界,从而导致安全问题的发生。
在 Web 安全中,由“注入”引起的问题比比皆是,如 XSS、SQL Injection、CRLF Injection、 X-Path Injection 等。此类问题均可以根据“数据与代码分离原则”设计出真正安全的解决方案, 因为这个原则抓住了漏洞形成的本质原因。
以 XSS 为例,它产生的原因是 HTML Injection 或 JavaScript Injection,如果一个页面的代 码如下:
$var
其中 $var 是用户能够控制的变量,那么对于这段代码来说:
test
就是程序的代码执行段。
而
$var
就是程序的用户数据片段。
如果把用户数据片段 $var 当成代码片段来解释、执行,就会引发安全问题。
比如,当$var 的值是:
时,用户数据就被注入到代码片段中。解析这段脚本并执行的过程,是由浏览器来完成的—— 浏览器将用户数据里的