2014-10-20 104 views
0

标题总结得非常好。什么是防止执行与文件交互的函数的可靠方法?我们正在谈论 邪恶 eval()PHP eval() - 可靠地过滤文件功能

我可以完全访问即将被评估的字符串。我在考虑简单地删除后端操作符,并将文件函数名称(以及exec)替换为完全没有任何效果的文件函数名称,但我不确定此方法的可靠性。

实施例:

PHP代码

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

目前,这是通过取代,执行之前:

PHP代码

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

EDIT

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

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

附录:每个网站都有自己的根目录和数据库。他们不能以这种方式伤害对方。

+1

请记住以下引用:如果eval()是答案,那么您肯定会问错误的问题。 ' - Rasmus Lerdorf,BDFL的PHP​​' – bodi0 2014-10-20 13:47:11

+3

你能告诉我们你想实现的功能吗?因为eval()可能是一个坏主意。 sidenote:Personaly我从来不需要eval来解决任何问题。 – 2014-10-20 13:48:26

+0

我的任务是为基于模块的CMS构建“可编程模块”。管理员可以 - 像画廊,格式化文本等预定义的 - 创建自定义模块,并显示在自己的容器中。我不在乎他们是否屠宰他们的网站,因为他们(应该)知道后果。我主要做的是阻止访问底层的CMS php代码。 – 2014-10-20 13:50:01

回答

1

要回答这个问题的问,“消毒”的EVAL输入是不可能的。简单的例子:

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

可行选项,以执行用户提供的代码是sandboxing或用户级VM等https://github.com/ircmaxell/PHPPHP