我試圖通過(guò)Symfony 5.0.8 的標(biāo)簽允許<?php在論壇上使用標(biāo)簽。code不知何故 Symfony(或 Twig,我不能在這里說(shuō))神奇地將它放在評(píng)論之間,我真的不知道在哪里,如何以及為什么這樣做。顯然,我正在通過(guò)raw過(guò)濾器將我的數(shù)據(jù)傳輸?shù)轿业臉?shù)枝模板中。這里有一些代碼來(lái)可視化這個(gè)東西??刂破鱬ublic function show(Post $post) { $this->render('show.html.twig', ['post' => $post]);}樹(shù)枝模板{% for comment in post.comments %} {{ comment.content|raw }}{% endfor %}comment這是您可以在我的數(shù)據(jù)庫(kù)中找到的表格文本示例| id | post_id | content || 1 | 1 | <p>hey there <?php die('hijacked'); ?></p> |以及顯示的內(nèi)容<p>hey there <!--?php die('hijacked'); ?--></p>我怎樣才能允許使用<?php標(biāo)簽?安全嗎?如果沒(méi)有,我怎樣才能保證安全?
1 回答

qq_花開(kāi)花謝_0
TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
您想在帖子中顯示 php 腳本的內(nèi)容。您不想執(zhí)行腳本。這已經(jīng)是天壤之別了。
您正在使用tgalopin/html-sanitizer
來(lái)清理用戶輸入。通常,您希望在輸出時(shí)進(jìn)行清理,而不是在輸入時(shí)進(jìn)行清理。因此,不要|raw
在您的模板中使用,而是調(diào)用html-sanitizer
的|sanitize_html
過(guò)濾器 。這將對(duì)輸出產(chǎn)生微小但顯著的差異:
使用|raw
:
<p>hey?there?<?php?die('hijacked');??></p>
您的瀏覽器將轉(zhuǎn)換為哪個(gè)<!--?..
,因?yàn)樗鼰o(wú)法識(shí)別<?php ..
為有效的 HTML 元素(并且它會(huì)嘗試修復(fù) HTML 文檔):
<p>hey?there?<!--?php?die('hijacked');??--></p>
使用|sanitize_html
:
<p>hey?there?<?php?die('hijacked');??></p>
因?yàn)?code>|sanitize_html允許p
標(biāo)記并轉(zhuǎn)義php
標(biāo)記,所以您的瀏覽器知道如何呈現(xiàn)頁(yè)面:它將p
標(biāo)記解析為 HTML 元素,而php
標(biāo)記只是文本。這使得一切都按預(yù)期工作。
- 1 回答
- 0 關(guān)注
- 117 瀏覽
添加回答
舉報(bào)
0/150
提交
取消