2017-01-16 236 views
-1

嗨我的PHP項目用戶通過表單輸入發送主題的名稱(這是一個電報桌面主題製造商)。 (該項目在github上託管Github Project) 問題是: 我在主題名稱中使用此用戶可能訪問服務器上的任何文件夾。 我試圖用這個承諾糾正:Github commit用戶輸入中的路徑注入

$theme_name = str_replace("/", "_badyou_", $_GET["name"]); //contains the good themename 

我需要的只是名字,所以我認爲,消除「/」是不夠的。 但我需要一個真正瞭解php的人比我更好的意見。

P.S抱歉,我的英語不好。 預先感謝您。

+1

你的代碼是否有一個機制向用戶通知錯誤?我認爲,讓每個人都可以更容易地拒絕錯誤輸入,而不是隨意更改用戶輸入;更不用說黑名單方法註定要失敗。 –

回答

0

在過去的幾天中,我看到使用下面的代碼就足夠了。

$theme_name = str_replace("/", "_badyou_", $_GET["name"]); //contains the good themename 

$ THEME_NAME用於創建像/dir_to_folder/$theme_name/$theme_name.tdesktop-theme

有人的文件已經試圖攻擊我的文件系統,他們失敗了,因爲功能改變「/」字符與「badyou」使其無害。這也可能是因爲我沒有使用數據庫。 我希望這會幫助別人。

0

好吧,你似乎試圖保護你的代碼免受代碼注入攻擊。代碼注入允許攻擊者強制執行惡意代碼。這可以通過在URL中傳遞惡意代碼來完成。請參閱此鏈接瞭解更多信息:https://www.owasp.org/index.php/Code_Injection。另請參閱此鏈接:http://www.derby-web-design-agency.co.uk/blog-post/what-is-and-how-to-prevent-url-injections-in-php/11/

爲防止代碼注入,開發人員應驗證發送到應用程序的所有輸入。 Php提供了幾種驗證和清理數據的功能。例如:trim(),strip_tags(),htmlentities()mysqli_real_escape_string()

+1

幾乎所有注射的解決方案我都發現包括「消毒」這個詞是錯誤的。建議的函數可能有它們的用例,但隨機應用它們(通常其中一些是同時)通常會損壞數據,我無法弄清楚它們中的任何一個最終如何能夠幫助文件系統路徑注入。 –

+0

您可以嘗試filter_input功能。它根據需要用特定的過濾器過濾$ _GET數組變量。請參閱:http://php.net/manual/en/function.filter-input.php –