2015-08-22 39 views
2

我在一堆php項目中獲得了這種安全措施。在每一個php文件的頂部,有一個檢查,如果腳本是通過直接訪問調用(例如,通過瀏覽器),或者如果它被適當地包括/通過網站入口點要求:直接腳本訪問終止

if(!defined('SYSTEM_ENTRYPOINT')) 
    die(); 

這是一個很好的做法在PHP項目中使用?我這樣做時應該考慮什麼?是否存在邊緣案例?什麼數據在不檢查時可能會被暴露?

+0

我相信如果你所有的php文件都在webroot之外,並且你只在webroot中暴露入口點,你就不會需要它。 – frz3993

+0

@ frz3993在我目前的情況下,一切都在一個地方。 – Zwirbelbart

+0

好的。然後,這取決於你的文件。假設一個文件只包含變量或僅包含類。直接調用它只會產生一個空白頁面。如果你在文件中有一些指令,它們肯定會被執行。 – frz3993

回答

3

你應該通過URL重寫來處理它。以一種方式組織你的PHP文件,以便訪問者不能觸及你的程序邏輯。

例如,將您的代碼分成兩個目錄:web和src。網頁只能contian只有index.php ant htaccess文件才能將所有請求路由到它。 Src應該把所有的程序邏輯(控制器,db訪問abd等)。在src/index.php裏面,編寫一些邏輯來決定從src文件夾中包含哪個控制器。

將「web」目錄設置爲您網站的網站根目錄,訪問者將無法訪問任何其他php文件。

+0

這將是一個解決方案,我也早就想過了。我使用常量來定義源代碼的幾個重要位置,所以這不是什麼大問題。我現在會接受這個答案作爲答案,但也許還有一些東西可以對最初的想法做出貢獻。 – Zwirbelbart

+0

如果可能的話,將你的虛擬主機(Apache,nginx)配置爲指向一個'public /'目錄,並將所有應用程序代碼和特殊配置文件保存在此目錄之外。即'/ var/www/public'和'/ var/www/src'。 –