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