Symfony 如何/在哪里自动注释 <?php 标签?

我试图通过Symfony 5.0.8 的标签允许<?php在论坛上使用标签。code


不知何故 Symfony(或 Twig,我不能在这里说)神奇地将它放在评论之间,我真的不知道在哪里,如何以及为什么这样做。


显然,我正在通过raw过滤器将我的数据传输到我的树枝模板中。这里有一些代码来可视化这个东西。


控制器


public function show(Post $post) {

    $this->render('show.html.twig', ['post' => $post]);

}

树枝模板


{% for comment in post.comments %}

  {{ comment.content|raw }}

{% endfor %}

comment这是您可以在我的数据库中找到的表格文本示例


| id | post_id |                   content                  |

|  1 |    1    | <p>hey there <?php die('hijacked'); ?></p> |

以及显示的内容


<p>hey there <!--?php die('hijacked'); ?--></p>

我怎样才能允许使用<?php标签?安全吗?如果没有,我怎样才能保证安全?


倚天杖
浏览 66回答 1
1回答

qq_花开花谢_0

您想在帖子中显示 php 脚本的内容。您不想执行脚本。这已经是天壤之别了。您正在使用tgalopin/html-sanitizer来清理用户输入。通常,您希望在输出时进行清理,而不是在输入时进行清理。因此,不要|raw在您的模板中使用,而是调用html-sanitizer的|sanitize_html过滤器 。这将对输出产生微小但显着的差异:使用|raw:<p>hey there <?php die('hijacked'); ?></p>您的浏览器将转换为哪个<!--?..,因为它无法识别<?php ..为有效的 HTML 元素(并且它会尝试修复 HTML 文档):<p>hey there <!--?php die('hijacked'); ?--></p>使用|sanitize_html:<p>hey there &lt;?php die('hijacked'); ?&gt;</p>因为|sanitize_html允许p标记并转义php标记,所以您的浏览器知道如何呈现页面:它将p标记解析为 HTML 元素,而php标记只是文本。这使得一切都按预期工作。
打开App,查看更多内容
随时随地看视频慕课网APP