[英]prevent upload php script to be executed
我有一個用戶付費支持的系統,每個用戶都有一個文件夾。 我的網站上有很多(比如200+)子文件夾,每個都需要CSS,圖像,JS等...
我還每周為新用戶注冊時創建文件夾,每個用戶都可以上傳PHP腳本或JS腳本或圖像。 (他們問題的截圖)
我的問題是:在我的/.htacess
,我有一個檢查PHP腳本並重定向到正確頁面的規則,例如site.com/user/page
將轉到site.com/user/page.php
我想要做的是防止用戶破壞系統,例如:
site.com/user/upload/test
將轉到他的test.php
並運行它。
我怎樣才能防止這種攻擊呢?
阻止訪問htaccess中的PHP文件,將此文件放在要阻止文件的文件夾中:
<Files ^(*.php|*.phps)>
order deny,allow
deny from all
</Files>
或者在root .htaccess文件中,您可以:
<Directory ^user/upload>
<Files ^(*.php|*.phps)>
order deny,allow
deny from all
</Files>
</Directory>
即使使用mod_rewrite,也會阻止訪問user / upload文件夾中的所有php文件。
但是,如果你想讓.php文件可供下載而不想讓它們執行,你可以在.htaccess上使用它:
<FilesMatch "(.+)$">
ForceType text/plain
</FilesMatch>
文件夾中的所有文件將以text/plain
返回。 您可以在Directory標記中綁定它以從第二個示例獲得類似的拒絕訪問結果。
您還可以選擇要作為text/plain
傳遞的文件擴展名:
<FilesMatch "\.(php|pl|py|jsp|asp|htm|shtml|sh|cgi.+)$">
ForceType text/plain
</FilesMatch>
請記住,Apache可能有更多的擴展來處理PHP類型處理程序,它確實有。 這是.htaccess內容,適用於我們的服務器。
<FilesMatch "(?i)\.(php5|php4|php|php3|php2|phtml|pl|py|jsp|asp|htm|shtml|sh|cgi)$">
ForceType text/plain
</FilesMatch>
它對我們來說很好。
我的問題是:在我的/.htacess中,我有一個檢查PHP腳本並重定向到正確頁面的規則,例如site.com/user/page將轉到site.com/user/page.php
為什么不將用戶頁面創建為site.com/user/page/index.php?
site.com/user/upload/test將轉到他的test.php並運行它
然后你的重寫規則是錯誤的 - 但你沒有告訴我們它是什么。 您處理文件上傳的代碼也是錯誤的 - 它不僅僅是PHP的問題 - 您可以充當各種惡意軟件的騾子站點。
當允許用戶上傳內容時,您永遠不應該以可以由網絡服務器直接尋址的方式存儲它(除非是非常大的特定和VERIFIED文件類型的文件 - 例如視頻)。 所有訪問都應該由控制腳本調解(控制腳本可以為其引導的內容設置mime類型和文件名)。
好吧,我有一個想法,你重定向到test.php,你重定向到一個頁面,將驗證代碼屬於X用戶,如果分配,遵循例程和重定向,如果你不屬於,激發404
對不起,我誤解了這個問題。 我認為防止這些攻擊發生的最佳方法是將文件保存為.php.txt或其他東西,因此它是不可執行的。
但是通過f_open();
打印出文件的內容f_open();
或file_get_contents();
如果這不是您想要的,您能提供有關您的網站的確切信息嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.