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