爲了防止PHP本地文件包含攻擊,我希望完全禁用所有PHP文件在一個目錄中的執行。使用.htcaccess文件中的行php_flag engine off
將導致500錯誤。根據another question,這是由於PHP的安裝方式。在一個目錄中禁用PHP執行
如果PHP安裝無法更改,是否有其他方法可以阻止PHP執行?
更新:文件不一定以.php結尾。
爲了防止PHP本地文件包含攻擊,我希望完全禁用所有PHP文件在一個目錄中的執行。使用.htcaccess文件中的行php_flag engine off
將導致500錯誤。根據another question,這是由於PHP的安裝方式。在一個目錄中禁用PHP執行
如果PHP安裝無法更改,是否有其他方法可以阻止PHP執行?
更新:文件不一定以.php結尾。
添加到您的.htaccess
文件
<FilesMatch \.php$>
SetHandler None
</FilesMatch>
您要通過「允許所有建設網站上直接執行,然後否認「邏輯。你應該用「拒絕所有,然後允許」邏輯來構建它。例如,您告訴Apache將所有文件提供給特定的目錄,然後重寫該配置以告知Apache不爲該目錄中的某些文件提供服務。也就是說,你可能有這樣的事情:像這樣
<VirtualHost *:80>
ServerName foo.com
DocumentRoot "/path/to/files"
</VirtualHost>
藉助目錄佈局:
/path/to/files
index.php
config.php
/path/to/files/lib
db.php
etc.php
other_thing.php
有了這個設置,任何人都可以請求http://foo.com/config.php
或http://foo.com/lib/etc.php
直接,這是你想要什麼避免。對於你想要拒絕的所有事情,不要增加個別的例外情況,而是反過來開始。也就是說,如果你有不想要的文件,那麼不要將它們放在文檔根目錄中。
<VirtualHost *:80>
ServerName foo.com
DocumentRoot "/path/to/files/public"
</VirtualHost>
注意DocumentRoot現在設置爲您的項目中的子目錄。只把你的公共資產放在這個目錄中。所有其他文件都在公開之外(即高於),因此不能由由Apache提供服務,同時仍允許PHP包含它們。
/path/to/files
config.php
/path/to/files/lib
db.php
etc.php
other_thing.php
/path/to/files/public
index.php
因此,當用戶訪問該目錄中的PHP文件時,您希望發生什麼?是否將它作爲純文本文件提供回來? – rickdenhaan
只適用於擴展名爲.php的文件? – Croises
無論如何用戶不能直接訪問這些文件。我只是想阻止所有文件的執行(不僅僅是那些帶有.php結尾的文件),所以它們不能從另一個php文件中執行。 – kot