PHP eval() - 可靠地过滤文件功能

时间:2014-10-20 10:09:57

标签: php eval

标题总结得很好。什么是防止执行与文件交互的函数的可靠方法?我们谈论的是 evil eval()

我可以完全访问即将评估的字符串。我正在考虑简单地删除后台操作符,并将文件函数名称(以及exec)替换为实际上没有任何内容的文件函数名称,但我不确定这种方法的可靠性。

示例:

PHP代码

eval("file_get_contents('passwords.ini')");

目前在执行之前将其替换为:

PHP代码

eval("fn_zero('passwords.ini')");

修改

关于 evil eval()。我在这里做的是在基于模块的内容管理系统中执行管理员创建的,数据库存储的PHP代码。编辑代码需要与主管理员登录分开的额外级别的身份验证,它不是完全不受信任的用户输入。

如果这是他/她的意图,管理员可以屠宰他/她的网站,这不是我关心的问题。我担心的是阻止查看CMS的底层PHP代码。

附录:每个站点都有自己的webroot和数据库。他们不会以这种方式互相伤害。

1 个答案:

答案 0 :(得分:1)

回答问题,"消毒" eval输入是不可能的。简单的例子:

eval("\$f=strrev('stnetnoc_teg_elif');\$f('passwords.ini');");

执行用户提供的代码的可行选项是sandboxing或用户空间虚拟机https://github.com/ircmaxell/PHPPHP