如何执行存储在MySQL数据库中的PHP?

时间:2008-09-03 10:14:26

标签: php mysql

我正在尝试编写一个调用存储在MySQL数据库中的PHP的页面。存储在MySQL数据库中的页面包含我想在页面加载时运行的PHP(和HTML)代码。

我怎么能这样做?

7 个答案:

答案 0 :(得分:31)

您可以使用eval命令。 我建议不要这样做,因为使用这种方法存在很多陷阱。调试很难(呃),这意味着一些安全风险(数据库中的错误内容被执行,哦哦)。 / p>

例如,请参阅When is eval evil in php?。谷歌的Eval是邪恶的,你会找到很多例子,为什么你应该找到另一种解决方案。

补充:另一篇引用漏洞的好文章是this blogpost。指的是由于Eval使用不当引起的过去的vBulletin和phpMyAdmin漏洞利用。

答案 1 :(得分:23)

易:

$x // your variable with the data from the DB
<?php echo eval("?>".$x."<?") ?>

让我知道,在许多应用程序中对我很有用,不禁注意到每个人都很快说出它有多糟糕,但实际上帮助你的答案很慢......

答案 2 :(得分:5)

这里的其他回复涵盖了

eval()功能。我同意你应该限制eval的使用,除非绝对需要。您可以只使用具有名为execute()的方法的类名,而不是在db中使用PHP代码。每当您需要运行自定义PHP代码时,只需实例化您刚刚从db获取的名称类并在其上运行->execute()。它是更清洁的解决方案,为您提供了很大的灵活性,并显着提高了站点安全性。

答案 3 :(得分:2)

您可以在PHP中查看eval函数。它允许您运行任意PHP代码。但是,这可能是一个巨大的安全风险,最好避免。

答案 4 :(得分:1)

您是否考虑过使用源代码管理系统为各种安装(以及它们之间不同的模块)存储不同的叉子?这将是我能想到的应用程序配置的几个最佳实践之一。你的并不是一个不寻常的要求,所以这是过去其他人已经解决的问题;并且将代码存储在数据库中是我认为您很难找到参考或被建议作为最佳实践。

你发布了澄清的好消息。你可能无意中提出了一个寻找合适问题的答案。

答案 5 :(得分:0)

我是如何做到这一点的,就是在数据库中有一个字段,用于识别需要执行的代码块的独特之处。那个单词在该代码的文件名中。我把字符串放在一起指向要包含的php文件。例如:

$lookFor = $row['page'];

include("resources/" . $lookFor . "Codebase.php");

通过这种方式,即使黑客可以访问您的数据库,他也无法将恶意代码直接放在那里执行。他或许可以更改参考词,但除非他能将文件直接放到服务器上,否则对他没有好处。如果他可以将文件直接放到服务器上,那么无论如何他都会沉没,如果他真的想要讨厌。只差两分钱。

是的,你有理由想要执行存储的代码,但有缺点。

答案 6 :(得分:0)

从数据库中读取php代码并保存到具有唯一名称的文件,然后包含文件 这是运行php代码并调试它的简单方法。

$uniqid="tmp/".date("d-m-Y h-i-s").'_'.$Title."_".uniqid().".php";    
$file = fopen($uniqid,"w");
fwrite($file,"<?php \r\n ".$R['Body']);
fclose($file);                          
// eval($R['Body']);
include $uniqid;