python - 为什么“千万不要对未知的变量使用safe过滤器”?
黄舟
黄舟 2017-04-18 09:16:28
0
2
406

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过滤器,然后就不会转义,就有安全隐患。请问会造成什么样的隐患呢?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(2)
阿神

沒有接觸過這門語言,不過像很多類似的例子可供參考,如果不對輸入過濾,又恰好滿足某些條件,是很有可能由於惡意輸入導致程式崩潰,甚至用戶資訊流失的。
最簡單的例子是輸出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預設也開啟了轉移.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板