基本上,我想知道的是,对于 create_function 函数中的第二个参数,是否有传递不带分号的字符串?或者它不会工作。
例子:
taken from php.net
create_function('$a,$b', 'return "CRCs: " . crc32($a) . " , ".crc32(b);'),
注意字符串中有一个分号。有没有可能有人可以在没有分号的情况下输入仍会运行/评估的函数?
基本上,我想知道的是,对于 create_function 函数中的第二个参数,是否有传递不带分号的字符串?或者它不会工作。
例子:
taken from php.net
create_function('$a,$b', 'return "CRCs: " . crc32($a) . " , ".crc32(b);'),
注意字符串中有一个分号。有没有可能有人可以在没有分号的情况下输入仍会运行/评估的函数?
使用 create_function() 您正在创建一个匿名函数。第二个参数是一个字符串,它是函数的代码(就像您编写的任何其他函数一样)。它不必以分号结尾,例如:
$coolfunction = create_function('$thing', 'if ($thing > 0) {return "Yes"; } else { return "no!"; }');
echo $coolfunction(1) . ' and ' . $coolfunction(-1);
以 '}' 结尾并打印出:是和否!
不,这是不可能的。PHP 对分号敏感,您必须使用它来终止右大括号之前的每个语句。我什至尝试过这样的常规功能:
function f() {
return 1
}
它吐出一个语法错误,这与 JavaScript 不同。
在使用之前,您应该始终清理任何用户输入。我建议您在用户输入中查找分号,如果缺少,请附加它。
如果用户可以在这里输入任何内容,如果他输入了无效的函数名或只是垃圾,您仍然会遇到问题。
您可以使用preg_match()进行验证(尽管我不是 preg 方面的专家,所以我会让其他人帮助您)。
首先,你为什么需要那个?这是创建函数的一种非常肮脏的方式。希望是因为您想创建一个人们可以直接创建功能的界面(这仅适用于您,否则将是一个很大的安全问题)。我真的不明白你想如何使用它。
无论如何,对于您的问题,您不必关心它是否有效。我的意思是,只需测试它是否有效,如果不是自己放一个分号。这只是对字符串的简单测试。