【发布时间】:2011-09-06 01:43:37
【问题描述】:
几天前我参加了一个研讨会,他们在谈论“危险”的 PHP 函数。然而,他们没有说我们应该使用它们。他们命名为eval()、preg_match()、exec() 等等。
虽然我不使用它们,或者不经常使用它们,但有时我不得不使用它们。使用这些功能是否被认为是不好的做法?即使我知道我使用它们的地方没有用户可以到达它?
编辑: 对于 preg_match() 问题,请查看: preg_match() security hole
【问题讨论】:
-
他们有没有提到为什么
preg_match()会很危险?其他两个很明显,因为它们允许您在主机上调用任意程序,但我不清楚这个。 -
preg_replace在您使用e修饰符时可能很危险,因为这意味着eval()替换(查看 modifiers section on PCRE。不过,此标志仅适用于preg_replace。不确定如果@edem 的意思是preg_replace而不是preg_match,或者如果preg_match存在某种我不知道的危险。 -
请参阅 http://stackoverflow.com/questions/951373/when-is-eval-evil-in-php/951868#951868 以获取
eval。总而言之,任何能够在系统级别执行 s/t 的函数(如exec)在使用未经处理的用户输入时都可能被视为邪恶。不过,我不知道他们为什么认为preg_match是邪恶的(除了已经提到的 Carlos 之类的 e 标志)。 -
不好的做法是使用它们而不知道它们的用途。没有“危险”的 PHP 函数,只有以错误的方式使用它们然后认为这可能是“危险的”的人。
标签: php