jinjia2-HTML 轉義


當從模板生成 HTML 時,始終有這樣的風險:變量包含影響已生成 HTML 的字符。有兩種 解決方法:手動轉義每個字符或默認自動轉義所有的東西。

Jinja 兩者都支持,使用哪個取決於應用的配置。默認的配置未開啟自動轉義有這樣幾個 原因:

  • 轉義所有非安全值的東西也意味着 Jijna 轉義已知不包含 HTML 的值,比如數字,對 性能有巨大影響。
  • 關於變量安全性的信息是易碎的。可能會發生強制標記一個值為安全或非安全的情況, 而返回值會被作為 HTML 轉義兩次。

使用手動轉義

如果啟用了手動轉義,按需轉義變量就是 你的 責任。要轉義什么?如果你有 一個 可能包含 > 、 < 、 & 或 " 字符的變量,你必須轉義 它,除非變量中的 HTML 有可信的良好格式。轉義通過用管道傳遞到過濾器 |e 來實現: {{ user.username|e }} 。

使用自動轉義

當啟用了自動轉移,默認會轉移一切,除非值被顯式地標記為安全的。可以在應用中 標記,也可以在模板中使用 |safe 過濾器標記。這種方法的主要問題是 Python 本 身沒有被污染的值的概念,所以一個值是否安全的信息會丟失。如果這個信息丟失, 會繼續轉義,你最后會得到一個轉義了兩次的內容。

但雙重轉義很容易避免,只需要依賴 Jinja2 提供的工具而不使用諸如字符串模運算符 這樣的 Python 內置結構。

返回模板數據(宏、 super 、 self.BLOCKNAME )的函數,其返回值總是被標記 為安全的。

模板中的字符串字面量在自動轉義中被也被視為是不安全的。這是因為安全的字符串是 一個對 Python 的擴展,而不是每個庫都能妥善地使用它。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM