如何执行存储在MySQL数据库中的PHP?
我试图写一个调用存储在MySQL数据库中的PHP的页面。 存储在MySQL数据库中的页面包含我想在页面加载时运行的PHP(和HTML)代码。
我怎么能这样做?
你可以使用这个eval命令。 尽pipe如此,我还是会build议,因为使用这种方法存在很多缺陷。 debugging很难(呃),这意味着一些安全风险(DB中的坏内容被执行,呃哦)。
请参阅在eval邪恶在php? 例如。 谷歌for Eval是邪恶的,你会发现很多的例子,为什么你应该find另一种解决scheme。
另外:另外一个很好的文章,提到利用这个博客post 。 指的是过去的vBulletin和phpMyAdmin的利用不当的Eval使用引起的漏洞。
简单:
$x // your variable with the data from the DB <?php echo eval("?>".$x."<?") ?>
让我知道,在许多应用程序中对我很好,不禁让我们注意到,每个人都很快地说出它有多糟糕,但实际上用一个直接的答案很慢
eval()
函数在这里的其他回复中被覆盖了。 我同意你应该限制eval
使用,除非是绝对需要的。 而不是在数据库中的PHP代码,你可以只有一个类名,有方法调用,说, execute()
。 每当你需要运行你自定义的PHP代码时,只需要实例化你从db中获取的名称类,然后在其上运行->execute()
。 这是更清洁的解决scheme,给你很大的灵活性领域,并显着提高网站的安全性。
你可以看看PHP中的eval函数。 它允许你运行任意的PHP代码。 这可能是一个巨大的安全风险,但最好避免。
你有没有考虑过使用你的源代码控制系统来存储各种安装的不同分支(以及不同的模块)? 这将是我能想到的应用程序configuration的几个最佳实践之一。 你们不是一个不寻常的要求,所以这是一个过去被别人解决的问题。 并在数据库中存储代码是一个我认为你会很难find参考,或build议作为一个最佳实践。
你发布澄清的好事。 你可能无意中提出了一个答案来寻找一个合适的问题。
从数据库中读取php代码,并保存到具有唯一名称的文件,然后包含文件这个简单的方法来运行php代码和debugging它。
$uniqid="tmp/".date("dmY his").'_'.$Title."_".uniqid().".php"; $file = fopen($uniqid,"w"); fwrite($file,"<?php \r\n ".$R['Body']); fclose($file); // eval($R['Body']); include $uniqid;
我如何做到这一点是在数据库中有一个字段,标识需要执行的代码块的唯一性。 那个单词是在那个代码的文件名中。 我把string放在一起指向要包含的php文件。 例:
$lookFor = $row['page']; include("resources/" . $lookFor . "Codebase.php");
这样,即使黑客可以访问你的DB,也不能将恶意代码直接放在那里执行。 他也许可以改变这个引用词,但是除非他真的可以把一个文件直接放到服务器上,否则对他没有任何好处。 如果他可以直接把文件放到服务器上,那么无论如何,如果他真的想要恶意的话,你就会沉没。 只是我的两分钱的价值。
是的,有你想要执行存储的代码的原因,但也有缺点。