代码之家  ›  专栏  ›  技术社区  ›  John

HTML源代码中显示的PHP语法

  •  2
  • John  · 技术社区  · 17 年前

    <div><?php include("my_contact_form.php") ?></div> 更新为db。我可以在那里看到它。

    db调用后,我的显示页面中有以下php代码:

    $content = $row['content']; 
    

    当我在正文中回显$intent时,它会显示在 来源:

    <div><?php include("my_contact_form.php") ?></div>
    

    这怎么可能?为什么它不显示我的联系表? 如果有人有任何建议,我将不胜感激。

    5 回复  |  直到 17 年前
        1
  •  11
  •   Brenton Alker    17 年前

    听起来你正在将PHP代码存储在数据库中,并期望在回显时执行它。这不会发生,就PHP解释器而言,它只是文本(不是PHP代码),所以它只会回显它。

    您可以使用以下命令强制PHP解释(/运行)字符串中的代码 eval() function ,但这伴随着大量的安全警告。

    将代码存储在数据库中很少是正确的解决方案。

        2
  •  3
  •   bucabay    17 年前

    简单的解决方案是对您的内容运行eval()。

    $content = $row['content'];
    
    eval("?>".$content."<?php");
    

    关闭PHP标记和打开PHP标记允许您将HTML和PHP嵌入eval()语句中。

    关于存储PHP和DB与文件的选择。

    假设你的目标是让PHP可以由管理员从界面编辑,并由你的服务器执行。

    您有两个选择:

    将PHP写入文件,并包含或执行()这些文件。 将PHP写入数据库,并执行()或将内容缓存到文件中并包含()。

    如果你在专用或VPS服务器上,那么写入文件是最好的选择。 但是,如果您使用的是共享主机系统,那么写入数据库实际上是更安全的选择。然而,随之而来的任务是,您必须使用一个非常安全的系统来查询数据库,以消除所有SQL注入的可能性。

    数据库在共享环境中更安全的原因是,您需要PHP进程对PHP文件的写访问权限。不幸的是,在“每个”共享主机设置中,相同的PHP用户在每个帐户上运行,因此可以对相同的PHP文件进行写访问。因此,恶意用户只需注册托管并登录到与您相同的物理机器上,或者利用不同的帐户来访问您的帐户。

    通过将PHP保存在mysql中,PHP无法写入mysql文件,因为它没有权限。因此,如果你消除了SQL注入的可能性,你最终会得到更安全的代码。请注意,如果您有一个具有可写性的SQL注入漏洞,那么您也打开了一个远程代码执行漏洞。


    编辑:

    抱歉,正确的语法是:

    eval("\r\n?>\r\n ".$php."\r\n<?php\r\n");
    

    这已经过相当深入的测试,可以在每个PHP配置/设置上运行。

        3
  •  2
  •   MiffTheFox    17 年前

    您正在回显$content,它只是打印出值,但它不会在其中执行任何PHP。

        4
  •  1
  •   Community Mohan Dere    9 年前

    如果您使用的是现有的CMS,如Joomla、Drupal等。
    CMS将DB中的文本作为文本进行处理。它不会执行文本,它可能只是将文本作为字符串从数据库中拉出来,并将其回显到页面上。查看Brenton Alker的 answer

    eval() 。根据您使用的CMS,可能有一个功能(即:编辑器中的按钮或类似功能)可以包含来自另一个文件的代码。

    或者,也许有一个功能可以创建“对象”、“模块”, 无论他们想怎么称呼他们 ,这将允许您将试图包含的代码(作为HTML)放入“对象”中, 存储在数据库中 ,允许您将其包含在多个页面中。这将实现与做某事相同的目标 include() 在PHP中(代码重用、避免重复、在一个地方进行更改等),但它也会让你不必破解CMS或开始冒安全风险。

    如果你已经建立了自己的CMS
    您可能希望在中构建这样的功能。这完全取决于您的需求以及安全性的重要性。

    最终,如果你使用 eval() ,如果有人黑客攻击:

    • 您的数据库
    • CMS的管理界面

    那么他们将能够在您的服务器上执行任何PHP代码。如果你有 exec() 他们希望在您的服务器上安装的任何代码

        5
  •  0
  •   John John    17 年前

    谢谢你的帮助——简单的解决方案对我来说是最好的!也谢谢你的额外信息。遗憾的是,正如你所建议的那样,eval()在这里对我不起作用。因此,在C计划中,我决定创建一个可选的tinymce模板,该模板有一个调用contact_form页面的iframe,所有处理都发生在iframe中。这行得通。谢谢大家!

    推荐文章