Jinja2文档里说:
safe(value) Mark the value as safe which means that in an environment with automatic escaping enabled this variable will not be escaped.
那么就是说未知变量,如果使用了safe过滤器,然后就不会转义,就有安全隐患。请问会造成什么样的隐患呢?
人生最曼妙的风景,竟是内心的淡定与从容!
沒有接觸過這門語言,不過像很多類似的例子可供參考,如果不對輸入過濾,又恰好滿足某些條件,是很有可能由於惡意輸入導致程式崩潰,甚至用戶資訊流失的。 最簡單的例子是輸出HTML,如果某些特殊符號不做轉移,很容易就會被惡意腳本攻擊了。
我猜想這門語言應該對於特定條件下的輸入有自動的過濾(an environment with automatic escaping enabled),如果你標記為safe將會將這些過濾器移除掉,降低安全性,所以如果是對外的API,它們的輸入的話,沒有充足的理由,不應該標記為safe。
例如
<ul> <h1>{{ open('/path/2/password/') }}</h1> </ul>
html中就會輸出特大號的密碼...
WHY?
因為jinja2本質上是code generator, {{ var }} 會被python執行的.
所以輸入需要轉義, Jinja2預設也開啟了轉移.
沒有接觸過這門語言,不過像很多類似的例子可供參考,如果不對輸入過濾,又恰好滿足某些條件,是很有可能由於惡意輸入導致程式崩潰,甚至用戶資訊流失的。
最簡單的例子是輸出HTML,如果某些特殊符號不做轉移,很容易就會被惡意腳本攻擊了。
我猜想這門語言應該對於特定條件下的輸入有自動的過濾(an environment with automatic escaping enabled),如果你標記為safe將會將這些過濾器移除掉,降低安全性,所以如果是對外的API,它們的輸入的話,沒有充足的理由,不應該標記為safe。
例如
html中就會輸出特大號的密碼...
WHY?
因為jinja2本質上是code generator, {{ var }} 會被python執行的.
所以輸入需要轉義, Jinja2預設也開啟了轉移.