PHP安全防止Directory Traversal攻擊

原文地址:http://knowledge.twisc.ntust.edu.tw/doku.php?id=3%E4%BC%BA%E6%9C%8D%E7%AB%AF%E5%AE%89%E5%85%A8:3-3%E5%AE%89%E5%85%A8%E7%A8%8B%E5%BC%8F%E7%A2%BC%E5%AF%AB%E4%BD%9C:php:%E9%98%B2%E6%AD%A2Directory%20Traversal%E6%94%BB%E6%93%8A


防止Directory Traversal攻擊

  • 對象: 程式設計師/資訊安全人員
  • 難易度: ★★★☆☆

預備知識

PHP語法

介紹

Directory Traversal(目錄尋訪),網頁開發人員沒有做好目錄權限控管,讓網頁使用者可以任意瀏覽所有目錄及目錄中的檔案,檔案中的內容可能遭到偷看、刪除或改寫。
Directory Traversal本身並不是攻擊,多半是用來成就其他攻擊的手段。

常見缺失

一般最常見的弱點程式碼,利用GET方式取得指定的檔案

<?php
readfile(/home/user/data’.$_GET[‘data_file’])
?>

倘若使用下列URL存取有弱點的網站

http://hostname/readfile.php?datafile=http://www.cnblogs.com/../etc/passwd

則會造成主機中所有帳號都會顯示出來

解決方式

1. 加上open_basedir 將PHP程式可以開啟的目錄,直接設定於php.ini或httpd.conf中
php.ini

	open_basedir = /home/user/:/tmp/

這時,所有的php程式可開啟的目錄都會受到open_base_dir的限制,多個目錄之間用冒號(:)隔開。

2. 撰寫一個字串檢查函式,當使用者輸入字串含有”..”等跳離根目錄關鍵字,則跳出字串有誤錯誤訊息,並且拒絕存取。

原文地址:https://www.cnblogs.com/ericyuan/p/2428013.html