Security
filesmatch 導致 php 被下載未解析
背景
根據上傳安全最佳實踐文章的建議,在我的 htaccess 文件中有以下程式碼段:
ForceType application/octet-stream <FilesMatch "(?i).jpe?g$"> ForceType image/jpeg </FilesMatch> <FilesMatch "(?i).gif$"> ForceType image/gif </FilesMatch> <FilesMatch "(?i).png$"> ForceType image/png </FilesMatch> <FilesMatch "(?i).css$"> ForceType text/css </FilesMatch>
這應該是為了防止人們在圖像等中隱藏 php 程式碼,儘管我擔心儘管搜尋了我的歷史,但我還是找不到這個片段的來源,這是不久前的事了
問題
這在我的本地開發伺服器(XAMPP)上按預期工作,但現在我已經開始在生產伺服器上設置這個片段似乎強制下載 PHP 文件而不是執行
由於系統使用 htaccess 通過 public/index.php 路由所有文件,因此為 .php 添加新指令不起作用:
<FilesMatch "(?i).php$"> ForceType application/x-httpd-php </FilesMatch>
我似乎想出了一種方法來阻止這種情況的發生 - 我正在尋找一種防止文件匹配的方法,將 php 視為八位字節流(並因此下載它)或防止腳本偽裝成圖像的替代方法跑步
提前致謝
<FilesMatch "(?i).php$"> ForceType application/x-httpd-php </FilesMatch>
相反,嘗試
ForceType None
恢復到正常的 mime 類型關聯。例如:<FilesMatch "(?i)\.php$"> ForceType None </FilesMatch>
請注意,您還應該轉義正則表達式中的點以匹配文字點而不是任何字元。(這也適用於所有
FilesMatch
容器。)您最初的“問題”顯然是您的第一行:
ForceType application/octet-stream
. 暴露你的 PHP 原始碼本身就是一種安全風險,所以我不禁質疑這段程式碼的可信度?這個在本地伺服器上“工作”的事實可能只是 PHP 的安裝方式(模組、CGI/FastCGI 等)我不是安全專家,但我看不到這應該在已經正確配置的伺服器上做什麼?