我試圖通過Symfony 5.0.8 的標簽允許<?php在論壇上使用標簽。code不知何故 Symfony(或 Twig,我不能在這里說)神奇地將它放在評論之間,我真的不知道在哪里,如何以及為什么這樣做。顯然,我正在通過raw過濾器將我的數據傳輸到我的樹枝模板中。這里有一些代碼來可視化這個東西??刂破鱬ublic 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 關注
- 123 瀏覽
添加回答
舉報
0/150
提交
取消