參考官方文檔:http://docs.jinkan.org/docs/flask/security.html
1、xss
Flask 配置 Jinja2 自動轉義所有值,除非顯式地指明不轉義。這就排除了模板導致的所有 XSS 問題,但是你仍需要在其它的地方小心:
- 生成 HTML 而不使用 Jinja2
- 在用戶提交的數據上調用了 Markup
- 發送上傳的 HTML 文件,永遠不要這么做,使用 Content-Disposition: attachment標頭來避免這個問題
- 發送上傳的文本文件。一些瀏覽器使用基於開頭幾個字節的 content-type 猜測,所以用戶可能欺騙瀏覽器執行 HTML
另一件非常重要的事情是未用引號包裹的屬性。雖然 Jinja2 可以通過轉義 HTML 來保護你免受 XSS 問題,仍有一種情況,它不能保護你: 屬性注入的 XSS 。為了應對這種攻擊媒介,確保當在屬性中使用 Jinja 表達式時,始終用單引號或雙引號包裹屬性:
<a href="{{ href }}">the text</a>
為什么這是必要的?因為如果你不這么做,攻擊者可以容易地注入自制的 JavaScript 處理器。譬如一個攻擊者可以注入這段 HTML+JavaScript:
onmouseover=alert(document.cookie)
當用戶鼠標經過這個鏈接, 會在警告窗口里把 cookie 顯示給用戶。一個精明的攻擊者可能也會執行其它的 JavaScript 代碼,而不是把 cookie 顯示給用戶。 同 CSS 注入聯系在一起,攻擊者甚至使得元素填滿整個頁面,這樣用戶鼠標在頁面上的任何地方都會觸發攻擊。
2、csrf
flask是沒有抵抗csrf能力的,建議重要操作都要有一個一次性令牌