【问题标题】:Browser not interpreting php code浏览器不解释 php 代码
【发布时间】:2016-11-12 00:01:59
【问题描述】:

我在使用以下配置构建的简单 cms 中使用 ckeditor。

  <script>
        if ($("#editor").length) {
        CKEDITOR.replace('editor', {
        language: 'en',
        allowedContent: true,
        });
        CKEDITOR.config.protectedSource.push(/<\?[\s\S]*?\?>/g);
        }
                </script>

如果转到编辑器上的源选项卡并键入一些如下的 php 代码,效果会很好:

<?php echo "hello"; ?>

它在数据库中保存为<?php echo "hello"; ?> so far so good

现在我的问题是从数据库中获取它并在浏览器上显示它时没有出现。

我对包含代码的变量进行了 var_dump,我看到以下内容:

...modules\pages\views\base.php:38:string '<?php echo "hola"; ?>' (length=21)

所以价值确实存在并且它到达了视图,我不明白为什么它没有出现在页面上。

页面是template.php 如果我查看源代码,我的 php 代码正在被注释

&lt;!--?php echo "hola"; ?--&gt;

这就是我试图显示代码的方式 如果我执行以下操作

 <div class="article-content-container">
    <?php   echo $this->security->xss_clean($content);   ?>
</div>

它是这样显示的

<div class="article-content-container">
                            &lt;?php echo "hola"; ?&gt;<!--?php echo "hola"; ?-->                          
                        </div>

如果我这样显示

 <div class="article-content-container">
        <?php   echo $content;   ?>
    </div>

它会被评论。

我希望我很清楚,任何帮助都将不胜感激。

谢谢大家-

【问题讨论】:

  • 浏览器不运行php服务器做
  • 字符串完全按照它应该的方式输出。就浏览器而言,PHP 代码只是一个字符串。没有期望网络浏览器可以用它做任何事情。

标签: php


【解决方案1】:

浏览器不解释 PHP 代码,他们对此一无所知。他们从来没有,也永远不会。 PHP代码在服务器上执行;从那里它产生一些回显到客户端浏览器的输出,通常是 HTML,但也可以是 CSS 或 JavaScript、图像或其他可下载文件。

如果您输出 PHP 代码,访问者最多只能手动将其保存到本地文件,安装自己的 PHP 软件,然后在其中运行。无论您做什么,它都不会神奇地在浏览器中运行。

如果你想在浏览器中运行一些代码,它必须是 JavaScript。如果你想在服务器上运行一些PHP代码,不要echo它,eval它:

<div class="article-content-container">
    <?php eval($content); ?>
</div>

请注意,eval 将其输入视为已经有一个 PHP 开放标记,因此您应该将 echo "hello"; 传递给它,而不是 &lt;?php echo "hello"; ?&gt;。如果需要,您仍然可以在 eval 代码中使用 ?&gt; 以退回到 HTML+PHP 模式。

PHP 或 JavaScript 代码都可能被简单地设计为具有敌意,因此提交任何标记或代码以在您的网站上执行必须被视为特权操作。您必须确保不允许任何不是您网站经过身份验证的管理员的人这样做。如果你真的必须让随机的人运行它,有一些方法可以沙箱或净化这样的代码,但这更复杂。 CodeIgniter 的xss_cleanis an incomplete attempt to stop XSS,当然不是为安全地执行用户提交的代码而设计的,尽管它会破坏代码并使编写变得烦人。

一般:

  • 如果您需要执行提交的PHP,请使用eval($content);

  • 如果您需要输出提交的 HTML,其中可能包含可执行的 JavaScript,请使用echo $content;

  • 如果您需要输出提交的纯文本(这是允许用户输入通常安全的唯一形式),请使用echo htmlspecialchars($content);

【讨论】:

    【解决方案2】:

    如果你没有在数据库中保存你的 php 标签,你可以使用 eval() 来运行保存的代码:

    eval($this->security->xss_clean($content));
    

    仅当保存的位没有被&lt;?php and/or ?&gt;包围时

    编辑:让人们从数据库运行代码甚至将代码保存在数据库中是一个潜在的风险。它可以被利用。

    【讨论】:

    • 请注意,允许用户输入将在服务器上执行的 PHP 代码,并可能具有提升的权限,这会带来一定的风险。
    • 谢谢,我确实编辑了我的帖子。这确实是一个潜在的安全风险。
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2012-02-17
    相关资源
    最近更新 更多