2016-11-12 153 views
-2

我在一个简单的CMS我建立具有以下配置使用CKEditor的。浏览器不解释PHP代码

<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代码是beingg评论

<!--?php echo "hola"; ?-->

,这就是我怎么想,如果我做下面显示的代码

<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> 

它得到的评论。

我希望我是清楚的,任何帮助,将appretiated。

感谢guys-

+3

浏览器不运行php服务器做 – 2016-11-12 00:06:12

+1

字符串输出完全按照它应该。就浏览器而言,PHP代码只是一个字符串。网络浏览器不会期望它能做任何事情。 – David

回答

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";它,而比<?php echo "hello"; ?>。如果需要,仍然可以在eval'd代码中使用?>以退回到HTML + PHP模式。

无论是PHP还是JavaScript代码都可能被设计成具有敌意性,因此提交任何用于在您的网站上执行的标记或代码必须被视为特权操作。您必须确保不允许任何未经过身份验证的网站管理员执行此操作。如果你真的必须允许随机的人来运行它,有许多方法可以对沙盒或纯化这些代码进行处理,但这更复杂。 CodeIgniter的xss_cleanis an incomplete attempt to stop XSS,当然不是为了安全执行用户提交的代码而设计的,尽管它会破坏代码并使其写入很烦人。

一般:

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

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

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

-1

如果你不救你的PHP标签在数据库中,你可以使用eval()运行保存的代码:

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

只有当保存位不通过<?php and/or ?>

编辑包围:让人们从一个数据库上运行的代码,甚至可以节省代码的数据库是一个潜在的风险。它可以被利用。

+4

请注意,允许用户输入将在*服务器*上执行的PHP代码,并具有潜在的*提升的权限*会带来一定的风险。 – David

+1

谢谢,我编辑了我的文章。这确实是一个潜在的安全风险。 – SmartGuyz