从数据库执行代码

时间:2012-03-23 15:45:00

标签: php mysql

我有一个存储在数据库中的PHP代码,我需要在检索时执行它。

但我的代码是HTML和PHP的混合,主要用于echo“”;

看起来像我的代码的示例:

echo "Some Text " . $var['something'] . " more text " . $anotherVar['something2'];

如果我使用echo"";或不使用数据将数据添加到数据库中,如何执行类似的代码。

有什么想法吗?

更新:

我忘了提及,我在一个将在内联网上使用的网站上使用它,并且将在服务器上强制执行安全性以确保数据安全。

8 个答案:

答案 0 :(得分:16)

  

我有一个存储在数据库中的PHP代码

现在停止。
将代码移出数据库。
永远不要再将代码数据混合在一起。

答案 1 :(得分:3)

这不仅是一个坏主意,而且还邀请了几种黑客攻击

您可以使用eval()。但从不使用它。 eval()非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您已仔细验证除了使用此构造之外没有其他选项,请特别注意不要将任何用户提供的数据传递到其中,而不事先正确验证它。

答案 2 :(得分:2)

eval。它允许您传递包含PHP的字符串并运行它,就像您将其直接写入文件一样。

将可执行PHP存储在数据库中并不常见;你存储的代码真的是那么不同,维护它的许多副本更有意义,而不是让它适应数据库中的静态数据吗? eval的使用通常被认为是不好的做法,因为它可能导致维护问题,如果有办法避免它,通常是值得的。

答案 3 :(得分:1)

使用eval()函数。

继承人的一些信息

http://www.php.net/manual/en/function.eval.php

类似于:

eval($yourcode);

如果这是最后的手段,你希望它是安全的,因为它会评估任何东西,黑客喜欢它。查看Suhosin或其他路径以确保生产。

答案 4 :(得分:1)

您可以使用eval()执行代码:

$code_str = "echo 'Im executed'";
eval($code_str );

但请注意这不安全:如果有人可以访问您的数据库,他将能够执行您服务器上的任何代码

答案 5 :(得分:1)

正如大家所说,使用eval()对你的需求来说是一个糟糕的方法。但是使用白名单方法可以获得几乎相同的结果。

  • 制作一个php文件,例如db_driven_functions.php。从db获取数据。并将它们映射到数组中,如下所示
  

// $ sql_fn_parameters [0] =函数名称

     

// $ sql_fn_parameters [1,2,3 .....] =函数参数

  • 然后定义包含php代码块的函数。例如

    my_echo($sql_fn_parameters){
    
         echo $sql_fn_parameters[1];//numbered or assoc..
    
    }
    
  • 然后提取包含函数名称

  • 的数据
  • 控制是否定义了该功能
function_exists("$sql_fn_parameters[0]")

  • 通话功能

      

    call_user_func_array()或call_user_func()

  •   
  (任何你也可以过滤参数数组$ sql_sourced_pa​​rameters_array不包含任何有风险的语法以提高安全性。)

让你的代码从db控制而没有风险。

似乎有点长,但在实施之后,使用管理面板驱动的php流程真的很高兴。

但是使用OOP构建这样的结构在长期内会更好。 (课程自动加载等)

答案 6 :(得分:0)

Eval显然不安全。

最佳路线IMO

  1. 将数据保存在表格中

  2. 准备好抓取并处理该数据时运行存储过程

答案 7 :(得分:0)

您不应该以这种方式滥用数据库。通常,动态代码执行是一个坏主意。您可以使用SmartyXSLT等模板引擎为此问题采用更优雅的解决方案。