網路找一下就可以知道這是什麼攻擊方式
我這邊針對系統端上,研究一下防禦方式 (兩個,如果有人有其它方式也請提供)
1。設定 open_basedir,系統預設是不會設定的,一般情況 web 路徑會是 /var/www/html,再設個 /tmp 是因為程式會用到暫存,這會限制 PHP 可以開啟的目錄
open_basedir="/var/www/html:/tmp"
2。使用 mod_security,只要 URL 裡帶有 ../ 就會被阻擋掉,可以找 OWASP 現成的 Rules
測試一下 get.php
<?php $url = file_get_contents($_GET['url']); echo nl2br($url); ?>
瀏覽 http://xx.xx.xx.xx/get.php?url=../../../../../../etc/passwd
看阻擋前及阻擋後的成效如何
不要看到下面的內容就可以了
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin
對了,另一方式是,程式不要用 file_get_contents 這個 function,因為有安全性問題,及效率好像很差
如果要限制不能使用 file_get_contents 的話就
allow_url_fopen = Off
(但是 allow_url_fopen 關閉是不能阻擋 Directory Traversal attack 喔)
最後一點,也很重要,寫程式時要留意安全性問題
留言