我怎樣才能正確地篩選出本地文件包含在PHP? 我一直在尋找,但找不到一個簡單的功能來做到這一點。據我瞭解,刪除斜槓是不夠的。正確過濾掉LFI
正確過濾掉LFI
回答
永遠不要在用戶輸入中使用include()
(或其親屬,如require()
或readfile()
)。永遠。
有根本不過濾用戶輸入一個安全的方式? – 2012-04-23 18:32:27
不充分。如果您需要包括基於用戶輸入的文件,你應該:1)查找基於該公司在通過或2)保留批准文件名的白名單中的一些關鍵的實際文件名。否則,意外地允許訪問意外文件太容易了。 – duskwuff 2012-04-23 18:38:50
避免這個問題的最簡單方法是不是從用戶輸入編寫代碼,include()
的 - 通常沒有必要做這個。而不是讓您的網址爲foo.php?page=bar
只需使用bar.php
作爲URL。
如果你絕對必須的,你可以去在幾個方面篩選。白名單很容易:
$ok = array('foo.php', 'bar.php', 'baz.php');
$include = in_array($_GET['page'], $ok) ? $_GET['page'] : 'default.php';
include($include);
這隻允許預先設置的包含文件列表。
或者,你可以用正則表達式過濾器(但是這是更容易出錯):
if (preg_match('!^[a-z]+\.php$!', $_GET['page'])){
include($_GET['page']);
}else{
include('default.php');
}
爲什麼後者的例子是不好的,請參閱: http://security.stackexchange.com/questions/17407/how-can-i-use-this-path-bypass-exploit-local-file-inclusion – 2015-09-18 14:18:56
- 1. 過濾掉行
- 2. 過濾掉表
- 3. DropDown不會正確過濾掉ASCX控件
- 4. loop_shop_columns過濾掉不正常(Woocommerce)
- 5. 正則表達式過濾掉$
- 6. 過濾掉加入
- 7. 過濾掉在JavaScript
- 8. 過濾掉列表
- 9. 過濾掉基於MySQL的
- 10. DropDown過濾掉ASCX控件
- 11. 過濾掉標點符號
- 12. 過濾掉某個IP adreess
- 13. NSPredicate過濾掉瓦爾
- 14. 過濾掉R中的列
- 15. 過濾掉字符串列
- 16. 過濾掉從字典
- 17. Angular,過濾掉json對象
- 18. log4j過濾掉方法
- 19. 如何過濾掉catch塊
- 20. 用Mapbox過濾掉國家
- 21. 過濾掉特定列
- 22. 使用管道顯示過濾掉的數據和過濾掉的數據
- 23. 通過Pig過濾掉NULL值
- 24. 如何過濾掉過近的座標?
- 25. jQuery正在過濾掉WordPress內容中的html
- 26. PHP正則表達式來過濾掉垃圾
- 27. 如何在C#中使用正則表達式過濾掉?
- 28. 我的INNER JOIN正在過濾掉太多
- 29. 簡單的正則表達式來過濾掉一個字
- 30. 使用正則表達式過濾掉浮點數小數點
您需要擴大您的問題 - 其過濾出在哪裏?你想避免什麼? – Cal 2012-04-23 18:25:43
PHP輸出另一個文件前:example.com/index.php?page=../../etc/passwd – 2012-04-23 18:28:50