我在一个简单的cms中使用ckeditor,我使用以下配置构建。
<script>
if ($("#editor").length) {
CKEDITOR.replace('editor', {
language: 'en',
allowedContent: true,
});
CKEDITOR.config.protectedSource.push(/<\?[\s\S]*?\?>/g);
}
</script>
如果转到编辑器上的source选项卡并键入一些如下所示的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代码正在评论
<!--?php echo "hola"; ?-->
这就是我试图显示代码的方式 如果我做以下
<div class="article-content-container">
<?php echo $this->security->xss_clean($content); ?>
</div>
显示为
<div class="article-content-container">
<?php echo "hola"; ?><!--?php echo "hola"; ?-->
</div>
如果我这样显示
<div class="article-content-container">
<?php echo $content; ?>
</div>
它得到了评论。
我希望我很清楚,任何帮助都会受到欢迎。
谢谢你们 -
答案 0 :(得分: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"; ?>
。如果需要,您仍然可以在评估代码中使用?>
来回退到HTML + PHP模式。
PHP或JavaScript代码可以简单地设计为恶意代码,因此提交任何标记或代码以在您的网站上执行必须被视为特权操作。您必须确保不允许任何未经过身份验证的网站管理员的人执行此操作。如果您真的必须允许随机人员运行它,有办法沙箱或净化此类代码,但这更复杂。 CodeIgniter的xss_clean
is an incomplete attempt to stop XSS,当然不是为安全地执行用户提交的代码而设计的,虽然它会破坏代码并使编写起来很烦人。
一般来说:
如果您需要执行提交的PHP,请使用eval($content);
。
如果您需要输出提交的HTML(可能包含可执行的JavaScript),请使用echo $content;
。
如果您需要输出提交的纯文本(这是允许用户输入通常是安全的唯一形式),请使用echo htmlspecialchars($content);
。
答案 1 :(得分:-1)
如果您不在数据库中保存php标签,可以使用eval()运行保存的代码:
eval($this->security->xss_clean($content));
仅当保存的位未被<?php and/or ?>
编辑:让人们从数据库中运行代码,甚至将代码保存在数据库中都是一个潜在的风险。它可以被利用。