几天前,我参加了一个研讨会,他们正在谈论“危险”的PHP功能。然而,他们没有说我们应该使用它们。他们将eval()
,preg_match()
,exec()
等命名为。
虽然我不使用它们,或者有时候我不经常使用它们。使用这些功能被认为是不好的做法吗?即使我知道我在哪里使用它们,用户也无法联系到它?
修改 对于preg_match()问题,请查看: preg_match() security hole
答案 0 :(得分:11)
如果您不采取措施,所有这些方法基本上都允许在您的系统上运行注入的代码。如果你在不知道危险的情况下使用它们,你有可能在脚下射击。如果你完全了解自己在做什么,除了使用这种方法别无选择,那么在任何情况下你都无法做到。
这个问题在PHP中有一个非常全面的可利用函数列表
答案 1 :(得分:2)
没有“危险”功能。有
如果您没有采取足够的安全措施,每个PHP功能都可能是“危险的”。这包括“回声”(XSS),“邮件”(主要注入),文件功能(例如readfile(/ etc / passwd)等)。
答案 2 :(得分:1)
真的是味道问题。它真的只是有足够的绳索来悬挂自己。只要您100%确定没有用户可以直接输入eval
或exec
语句,您可能没问题,但很难说不应该有不同的情况,更安全的方式来做你正在尝试的事情。
答案 3 :(得分:1)
如果您的服务器遭到入侵,可能是来自安全性较差的表单或include()调用的代码注入攻击,那么一些很少使用但非常强大的php函数会让攻击者通过exec对整个系统进行过多控制( ),所以你可以在你的ini文件中完全阻止这些功能。
引用php.ini
;此指令允许您禁用某些功能以确保安全性 ; reason.It收到以逗号分隔的功能列表 ;名称。该指令 NOT 受安全模式是否影响 ;打开或关闭。 disable_functions =
修改强> JohnP的链接列出了你应该警惕的所有功能
答案 4 :(得分:1)
以下是作者询问eval为何危险的帖子: http://blog.joshuaeichorn.com/archives/2005/08/01/using-eval-in-php/,请阅读答案,这是另一篇有趣且简短的文章: http://www.hardened-php.net/suhosin/a_feature_list:eval_black_and_whitelist.html
恕我直言,问题在于如果你使用像eval或exec这样的函数,你需要100%知道哪些varable传递给它们。如果exec可以在您的操作系统中“嵌入”,它可能是真正的狡猾。
此致 汤姆
答案 5 :(得分:0)
嗯......我认为preg_match
不是那么“危险”。另一方面eval
和exec
有点不好。特别是exec
甚至在托管服务器上甚至被禁止,因为它增加了巨大的安全风险。