为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
倚天杖 2023-04-15 17:36:03
我试图通过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标签?安全吗?如果没有,我怎样才能保证安全?
查看完整描述

1 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

您想在帖子中显示 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标记只是文本。这使得一切都按预期工作。


查看完整回答
反对 回复 2023-04-15
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信