首頁  >  文章  >  後端開發  >  Python中Tornado防止跨站攻擊的方法介紹

Python中Tornado防止跨站攻擊的方法介紹

不言
不言轉載
2018-10-20 15:28:331946瀏覽

這篇文章帶給大家的內容是關於Python中Tornado防止跨站攻擊的方法介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

跨站請求偽造(Cross-site request forgery,CSRF 或XSRF)是對網站的惡意利用。透過CSRF,攻擊者可以冒用使用者的身份,在使用者不知情的情況下執行惡意操作。

1、CSRF攻擊原理

下圖展示了CSRF的基本原理。其中Site1是存在CSRF漏洞的網站,而SIte2是存在攻擊行為的惡意網站。

Python中Tornado防止跨站攻擊的方法介紹
上圖內容解析如下:

  • 用戶首先造訪了存在CSRF漏洞網站Site1,成功登陸並取得了Cookie,此後,所有該用戶對Site1的訪問均會攜帶Site1的Cookie,因此被Site1認為是有效操作。

  • 此時使用者又造訪了帶有攻擊行為的網站Site2,而Site2的返回頁面中帶有一個訪問Site1進行惡意操作的連接,但卻偽裝成了合法內容,例如下面的超鏈接看起來是一個抽獎信息,實際上卻是想Site1站點提交提款請求

#
<a>
三百万元抽奖,免费拿
</a>
  • ##用戶一旦點擊惡意鏈接,就在不知情的情況下向Site1網站發送了請求。因為之前用戶在Site1進行過登陸且尚未退出,所以Site1在收到用戶的請求和附帶的Cookie時將被認為該請求是用戶發送的正常請求。此時,惡意網站的目的也已經達到。

2、用Tornado防範CSRF攻擊

為了防範CSRF攻擊,要求每個請求包含一個參數值作為令牌的匹配存儲在Cookie中的對應值。

Tornado應用程式可以透過一個Cookie頭和一個隱藏的HTML表單元素向頁面提供令牌。這樣,當一個合法頁面的表單被提交時,它將包括表單值和已儲存的Cookie。如果兩者匹配,則Tornado應用程式認可請求有效。

開啟Tornado的CSRF防範功能需要兩個步驟。

【1】在實例化tornado.web.Application時傳入xsrf_cookies=True參數,即:

application=tornado.web.Application([
(r'/',MainHandler),
],
cookie_secret='DONT_LEAK_SECRET',
xsrf_cookies=True,
)
或:

settings={
"cookie_secret":"DONT_LEAK_SECRET",
"xsrf_cookies":True
}

application=tornado.web.Application([
(r'/',MainHandler),
],**settings)
當tornado.web.Application需要初始化的參數過多時,可以像本例一樣透過setting字典的形式傳入命名參數

【2】在每個具有HTML表達的範本檔案中,為所有表單新增xsrf_form_html()函數標籤,例如:


{% module xsrf_form_html() %}
這裡的{% module xsrf_form_html() %}起到了為表單添加隱藏元素以防止跨站請求的作用。

Tornado的安全Cookie支援和XSRF防範框架減輕了應用程式開發者的許多負擔,沒有他們,開發者需要思考很多防範的細節措施,因此Tornado內建的安全功能也非常有用。

以上是Python中Tornado防止跨站攻擊的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除