对于快速、肮脏和不安全的解决方案,您可以在服务器上安装节点,并调用 PHPexec()
来验证代码。
从文档中, exec 定义为:
string exec ( string $command [, array &$output [, int &$return_var ]] )
并且使用 node,我们可以使用-e
标志来评估 JavaScript 字符串。使用命令行的示例:
> node -e 'invalid javascript'
SyntaxError: Unexpected identifier
> $?
-bash: 8: command not found # <-- return status!
将它与 PHP 的 exec 结合起来,你可以得到这样的东西:
<? php
$userJavaScript = getUserJavaScriptSomehow();
exec("node -e '" + $userJavaScript + "'", $output, $return_var);
if ($return_var !== 0) {
// something went wrong with parsing it.
}
?>
请注意,这是一个可怕的解决方案。考虑到用户可以执行任意代码,您最好在客户端验证 JavaScript 而忘记在服务器端进行验证。您必须防止文件访问、无限循环等。