当前位置:首页> 正文

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

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

How do I execute PHP that is stored in a MySQL database?

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

我该怎么做?


您可以为此使用eval命令。不过,我还是建议这样做,因为使用这种方法存在很多陷阱。调试比较困难,这意味着一些安全隐患(执行数据库中的不良内容,嗯)。

请参阅php中的eval邪恶何时出现?例如。 Google for Eval就是邪恶的,您会找到很多为什么应该找到其他解决方案的例子。

添加:这篇博客文章是另一篇很好的文章,其中包含一些有关漏洞利用的参考。指过去的vBulletin和phpMyAdmin漏洞,这些漏洞是由于Eval使用不当引起的。


简单:

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

让我知道,它在许多应用程序中对我都非常有用,不禁注意到每个人都很快说出它有多糟糕,但实际上却很难直接给出答案...


eval()函数在此处的其他响应中有所介绍。我同意,除非绝对需要,否则应限制使用eval。代替在db中包含PHP代码,您可以只具有一个类名称,该类名称的方法称为execute()。每当您需要运行自定义PHP代码时,只需实例化刚从db获取的名称类,然后在其上运行->execute()。它是一种更清洁的解决方案,可为您提供更大的灵活性,并显着提高站点安全性。


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


您是否考虑过使用Source Control系统为各种安装(以及其中不同的模块)存储不同的fork?这将是我可以想到的几种应用程序配置最佳实践之一。您的要求不是寻常的,因此这是过去别人解决的问题;并将代码存储在数据库中是我认为您很难找到参考或被建议为最佳做法。

好消息,您已发表了澄清。您可能无意中提出了答案,以寻找合适的问题。


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

1
2
3
4
5
6
7
8
$uniqid="tmp/".date("d-m-Y h-i-s").'_'.$Title."_".uniqid().".php";    
$file = fopen($uniqid,"w");
fwrite($file,"<?php \
\
"
.$R['Body']);
fclose($file);                          
// eval($R['Body']);
include $uniqid;

我这样做的方法是在数据库中有一个字段,该字段标识与需要执行的代码块有关的唯一内容。该代码的文件名中包含一个单词。我将字符串放在一起以指向要包含的php文件。例如:

1
2
3
$lookFor = $row['page'];

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

通过这种方式,即使黑客可以访问您的数据库,他也无法直接在其中执行恶意代码。他也许可以更改参考词,但是除非他实际上可以将文件直接放在服务器上,否则对他没有好处。如果他可以将文件直接放到服务器上,那么如果他真的想让自己讨厌的话,那您肯定会下沉。只有我的两分钱。

是的,有一些原因使您想要执行存储的代码,但是有缺点。


展开全文阅读

相关内容