W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
當(dāng)從模板生成 HTML 時,始終有這樣的風(fēng)險:變量包含影響已生成 HTML 的字符。有兩種 解決方法:手動轉(zhuǎn)義每個字符或默認(rèn)自動轉(zhuǎn)義所有的東西。
Jinja 兩者都支持,使用哪個取決于應(yīng)用的配置。默認(rèn)的配置未開啟自動轉(zhuǎn)義有這樣幾個 原因:
如果啟用了手動轉(zhuǎn)義,按需轉(zhuǎn)義變量就是?你的?責(zé)任。要轉(zhuǎn)義什么?如果你有 一個?可能?包含?>?、??、?&?或?"?字符的變量,你必須轉(zhuǎn)義 它,除非變量中的 HTML 有可信的良好格式。轉(zhuǎn)義通過用管道傳遞到過濾器?|e?來實現(xiàn):?{{?user.username|e?}}?。
當(dāng)啟用了自動轉(zhuǎn)移,默認(rèn)會轉(zhuǎn)移一切,除非值被顯式地標(biāo)記為安全的??梢栽趹?yīng)用中 標(biāo)記,也可以在模板中使用?|safe?過濾器標(biāo)記。這種方法的主要問題是 Python 本 身沒有被污染的值的概念,所以一個值是否安全的信息會丟失。如果這個信息丟失, 會繼續(xù)轉(zhuǎn)義,你最后會得到一個轉(zhuǎn)義了兩次的內(nèi)容。
但雙重轉(zhuǎn)義很容易避免,只需要依賴 Jinja2 提供的工具而不使用諸如字符串模運算符 這樣的 Python 內(nèi)置結(jié)構(gòu)。
返回模板數(shù)據(jù)(宏、?super?、?self.BLOCKNAME?)的函數(shù),其返回值總是被標(biāo)記 為安全的。
模板中的字符串字面量在自動轉(zhuǎn)義中被也被視為是不安全的。這是因為安全的字符串是 一個對 Python 的擴(kuò)展,而不是每個庫都能妥善地使用它。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: