2017-01-16 240 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 –