Flask系列教程(13)——轉(zhuǎn)義

轉(zhuǎn)義

轉(zhuǎn)義的概念是,在模板渲染字符串的時候,字符串有可能包括一些非常危險的字符比如<、>等,這些字符會破壞掉原來HTML標(biāo)簽的結(jié)構(gòu),更嚴(yán)重的可能會發(fā)生XSS跨域腳本攻擊,因此如果碰到<>這些字符的時候,應(yīng)該轉(zhuǎn)義成HTML能正確表示這些字符的寫法,比如>HTML中應(yīng)該用&lt;來表示等。

但是Flask中默認(rèn)沒有開啟全局自動轉(zhuǎn)義,針對那些以.html.htm、.xml.xhtml結(jié)尾的文件,如果采用render_template函數(shù)進(jìn)行渲染的,則會開啟自動轉(zhuǎn)義。并且當(dāng)用render_template_string函數(shù)的時候,會將所有的字符串進(jìn)行轉(zhuǎn)義后再渲染。而對于Jinja2默認(rèn)沒有開啟全局自動轉(zhuǎn)義,作者有自己的原因:

  1. 渲染到模板中的字符串并不是所有都是危險的,大部分還是沒有問題的,如果開啟自動轉(zhuǎn)義,那么將會帶來大量的不必要的開銷。
  2. Jinja2很難獲取當(dāng)前的字符串是否已經(jīng)被轉(zhuǎn)義過了,因此如果開啟自動轉(zhuǎn)義,將對一些已經(jīng)被轉(zhuǎn)義過的字符串發(fā)生二次轉(zhuǎn)義,在渲染后會破壞原來的字符串。

在沒有開啟自動轉(zhuǎn)義的模式下(比如以.conf結(jié)尾的文件),對于一些不信任的字符串,可以通過{{ content_html|e }}或者是{{ content_html|escape }}的方式進(jìn)行轉(zhuǎn)義。在開啟了自動轉(zhuǎn)義的模式下,如果想關(guān)閉自動轉(zhuǎn)義,可以通過{{ content_html|safe }}的方式關(guān)閉自動轉(zhuǎn)義。而{%autoescape true/false%}...{%endautoescape%}可以將一段代碼塊放在中間,來關(guān)閉或開啟自動轉(zhuǎn)義,例如以下代碼關(guān)閉了自動轉(zhuǎn)義:

{% autoescape false %}
<p>autoescaping is disabled here
<p>{{ will_not_be_escaped }}
{% endautoescape %}

如果想深入學(xué)習(xí)Flask,可以觀看這套免費Flask教學(xué)視頻:Flask入門到項目實戰(zhàn)

</article>

版權(quán)聲明: https://blog.csdn.net/huangyong1314/article/details/80391805

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容