在網站建設過程中,數據與代碼的分離是安全措施中很重要的規劃,不僅是后續的維護方便,另一個重要的安全原則是數據與代碼分離原則,雖然前面我通過《網站安全縱深防御原則的實施方法》也介紹了不少原則性的防范措施,但南昌網站設計公司百恒網絡安全工程師認為數據與代碼分離這一原則廣泛適用于各種由于“注入”而 引發安全問題的場景。?
? ? ? ?實際上,緩沖區溢出,也可以認為是程序違背了這一原則的后果——程序在棧或者堆中, 將用戶數據當做代碼執行,混淆了代碼與數據的邊界,從而導致安全問題的發生。?
? ? ? ?在 Web 安全中,由“注入”引起的問題比比皆是,如 XSS、SQL Injection、CRLF Injection、 X-Path Injection 等。此類問題均可以根據“數據與代碼分離原則”設計出真正安全的解決方案, 因為這個原則抓住了漏洞形成的本質原因。?
? ? ? ?以 XSS 為例,它產生的原因是 HTML Injection 或 JavaScript Injection,如果一個頁面的代 碼如下:?
? ? ? ??
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? $var
? ? ? ? ?
? ? ? ?其中 $var 是用戶能夠控制的變量,那么對于這段代碼來說:?
? ? ? ??
? ? ? ? ? ? ?test?
? ? ? ? ? ? ??
? ? ? ? ? ? ?
? ? ? ?
? ? ? 就是程序的代碼執行段。?
? ? ? ?而?
? ? ? ?$var
? ? ? ? 就是程序的用戶數據片段。?
? ? ? ?如果把用戶數據片段 $var 當成代碼片段來解釋、執行,就會引發安全問題。?
? ? ? ?比如,當$var 的值是:?
? ? ? ??
? ? ? ?時,用戶數據就被注入到代碼片段中。解析這段腳本并執行的過程,是由瀏覽器來完成的—— 瀏覽器將用戶數據里的