我试图通过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 <?php die('hijacked'); ?></p>
因为|sanitize_html
允许p
标记并转义php
标记,所以您的浏览器知道如何呈现页面:它将p
标记解析为 HTML 元素,而php
标记只是文本。这使得一切都按预期工作。
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报
0/150
提交
取消