我怎樣才能正確地篩選出本地文件包含在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. 過濾掉以%
- 4. DropDown不會正確過濾掉ASCX控件
- 5. 正則表達式過濾掉$
- 6. loop_shop_columns過濾掉不正常(Woocommerce)
- 7. 過濾掉在JavaScript
- 8. 過濾掉列表
- 9. 過濾掉加入
- 10. 過濾掉從字典
- 11. log4j過濾掉方法
- 12. KendoUI格的過濾掉不
- 13. 過濾掉servlet中的URL
- 14. (rsyslog)過濾掉設施?
- 15. 過濾掉特定列
- 16. NSPredicate過濾掉瓦爾
- 17. 過濾掉字符串列
- 18. 過濾掉文本java
- 19. Angular,過濾掉json對象
- 20. Android - Google Play過濾掉xxhdpi
- 21. 過濾掉R中的列
- 22. 用Mapbox過濾掉國家
- 23. MDX:Drillthough沒有過濾掉行
- 24. 如何過濾掉catch塊
- 25. 過濾掉標點符號
- 26. DropDown過濾掉ASCX控件
- 27. 過濾掉百分號
- 28. fastNlMeansDenoising()不過濾掉噪音
- 29. 正確過濾Linq查詢
- 30. 如何正確過濾?
您需要擴大您的問題 - 其過濾出在哪裏?你想避免什麼? – Cal 2012-04-23 18:25:43
PHP輸出另一個文件前:example.com/index.php?page=../../etc/passwd – 2012-04-23 18:28:50