回答
免責聲明$ allowedPaths的具體名單:如果不控制PHP設置在服務器上的方式,這個答案是沒用的。
我們確實需要更多關於PHP設置的信息,比如它使用的是哪個Web服務器以及哪個SAPI模式。你可以找出哪個SAPI模塊正在使用的運行echo
php_sapi_name()
但是,如果我想這是Apache 2.2的與mod_php的:
PHP的Apache模塊版本上運行的Web服務器的用戶和組。還有第二個名爲suPHP的Apache模塊,它封裝了PHP CGI版本,使其作爲腳本的所有者和組運行(並避免必須手動設置Apache的suEXEC)。
除此之外,更改文件系統的權限以便用戶不具有對敏感目錄及其文件的讀訪問權限應該足夠好。
您將不得不配置目錄的權限,以便用戶PHP無法訪問它們。
要在Linux/Unix系統上這樣做,您需要更改目錄所有者(chown
)並更改其權限(chmod
)以及可能的命令行訪問權限。這真的取決於你的服務器是如何配置的,誰擁有這些文件,以及PHP運行的是誰。
要在Linux系統上找到PHP用戶的用戶標識,請使用posix_getuid()。
我可以想象除了通過disable_functions
刪除某些功能的訪問權限外,沒有其他方法可以保護PHP側訪問文件。不過,這可能(也可能會)也會打破許多合法行爲。
我想,他想從PHP控制這個,例如檢查文件是否包含允許的路徑。至少我是這樣理解這個問題的。 – Gordon 2010-01-06 14:47:48
我認爲戈登的答案是最合適的。當然,文件權限應該適當設置,但是這會影響服務器上的所有** php腳本 - 在這種情況下,運行chroot和/或設置open_base_dir將是明智的。 C. – symcbean 2010-01-06 17:41:02
對我來說,這個問題聽起來像OP有一個他想要運行的第三方編碼腳本,並且希望確保它不會在服務器上發生任何不愉快的事情。在這種情況下,設置正確的權限可能是最好的選擇。 – 2010-01-06 18:34:25
是的,只需編寫腳本,以便它只訪問安全目錄中的文件。不要(永遠)從用戶輸入中的未經檢查的路徑訪問文件。根據可接受的路徑和/或文件名列表檢查路徑,或在代碼中包含路徑以訪問該文件,以便只將文件名傳遞給訪問代碼。
這些功能將幫助: pathinfo(), dirname(), basename()
像這樣的東西應該工作:
function isBelowAllowedPath($file, $allowedPath)
{
return (strpos(realpath($file), $allowedPath) === 0);
}
isBelowAllowedPath('/etc/passwd', '/var/www/pub/'); // false
isBelowAllowedPath('/var/www/pub/index.htm', '/var/www/pub/'); // true
,或者如果你想確保$文件是存在的,以及
function isBelowAllowedPath($file, $allowedPath)
{
return file_exists($allowedPath . basename(realpath($file)));
}
isBelowAllowedPath('/../../../../etc/passwd', '/var/www/pub/'); // false
isBelowAllowedPath('index.htm', '/var/www/pub/'); // true
或者如果你想$文件在一個(不低於路徑)
function isInAllowedPath($file, array $allowedPath)
{
$fileDir = realpath(dirname($file));
return (in_array($fileDir, $allowedPath));
}
$allowed = array('/var/www/pub/', 'somewhere/else');
isInAllowedPath('/var/www/pub/foo/index.htm', $allowed); // false
isInAllowedPath('/var/www/pub/index.htm', $allowed); // true
- 1. 限制系統文件訪問公共
- 2. 限制WAMP的文件系統訪問
- 3. 限制PHP的文件系統訪問文件夾
- 4. .htaccess限制文件到腳本訪問
- 5. MPI:如何限制對文件系統的訪問?
- 6. C++,linux:如何限制函數訪問文件系統?
- 7. 限制訪問限制訪問用戶的PHP腳本
- 8. 限制訪問PHP文件
- 9. 從另一個PHP腳本訪問受限制的PHP腳本
- 10. 安全:限制插件訪問文件系統和網絡
- 11. 限制插件通過appdomain訪問文件系統和網絡
- 12. 使用谷歌腳本訪問本地文件系統
- 13. 如何從Nuxt.js訪問文件系統?
- 14. 如何訪問iphone的文件系統?
- 15. Tomcat:限制java web服務訪問主機文件系統
- 16. 如何限制/授權訪問PHP腳本?
- 17. Apache僅限腳本訪問限制文件夾
- 18. TFBuild訪問本地文件系統
- 19. Azure Webjob - 訪問本地文件系統
- 20. 本地文件系統訪問和PHP5
- 21. Windows本地文件系統訪問API
- 22. jre 7u45訪問本地文件系統
- 23. Xamarin.Android訪問文件系統
- 24. 訪問文件系統
- 25. 如何使用.htaccess文件限制PHP文件訪問?
- 26. 如何在域控制器上分配IIS 7.5文件系統訪問權限?
- 27. JS文件系統API:訪問本地系統上的JS FileEntry?
- 28. 如何限制訪問的文件夾
- 29. 如何限制文件夾訪問
- 30. 編寫一個有限的系統訪問的PHP插件系統
這是一個是/否的問題;)答案是肯定的。 – Gordon 2010-01-06 14:43:34