Flask 跨站腳本攻擊(XSS)

2021-08-10 10:39 更新

跨站腳本攻擊的概念是在一個網(wǎng)站的上下文中注入任意的 HTML (以及附帶的 JavaScript )。開發(fā)者需要正確地轉(zhuǎn)義文本,使其不能包含任意 HTML 標(biāo)簽來避免 這種攻擊。更多的信息請閱讀維基百科上關(guān)于 Cross-Site Scripting 的文章。

Flask 配置 Jinja2 自動轉(zhuǎn)義所有值,除非顯式地指明不轉(zhuǎn)義。這就排除了模板導(dǎo) 致的所有 XSS 問題,但是你仍需要在其它的地方小心:

  • 生成 HTML 而不使用 Jinja2
  • 在用戶提交的數(shù)據(jù)上調(diào)用了 Markup
  • 發(fā)送上傳的 HTML 文件,永遠(yuǎn)不要這么做,使用 Content-Disposition: attachment 標(biāo)頭來避免這個問題
  • 發(fā)送上傳的文本文件。一些瀏覽器使用基于開頭幾個字節(jié)的 content-type 猜測,所以用戶可能欺騙瀏覽器執(zhí)行 HTML

另一件非常重要的事情是未用引號包裹的屬性。雖然 Jinja2 可以通過轉(zhuǎn)義 HTML 來保護你免受 XSS 問題,仍有一種情況,它不能保護你: 屬性注入的 XSS 。為了 應(yīng)對這種攻擊媒介,確保當(dāng)在屬性中使用 Jinja 表達式時,始終用單引號或雙引號 包裹屬性:

<a href="{{ href }}">the text</a>

為什么這是必要的?因為如果你不這么做,攻擊者可以容易地注入自制的 JavaScript 處理器。譬如一個攻擊者可以注入這段 HTML+JavaScript:

onmouseover=alert(document.cookie)

當(dāng)用戶鼠標(biāo)經(jīng)過這個鏈接, 會在警告窗口里把 cookie 顯示給用戶。一個精明的 攻擊者可能也會執(zhí)行其它的 JavaScript 代碼,而不是把 cookie 顯示給用戶。 同 CSS 注入聯(lián)系在一起,攻擊者甚至使得元素填滿整個頁面,這樣用戶鼠標(biāo)在頁面 上的任何地方都會觸發(fā)攻擊。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號