這篇文章帶給大家的內容是關於Python中Tornado防止跨站攻擊的方法介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
跨站請求偽造(Cross-site request forgery,CSRF 或XSRF)是對網站的惡意利用。透過CSRF,攻擊者可以冒用使用者的身份,在使用者不知情的情況下執行惡意操作。
1、CSRF攻擊原理
下圖展示了CSRF的基本原理。其中Site1是存在CSRF漏洞的網站,而SIte2是存在攻擊行為的惡意網站。
上圖內容解析如下:
用戶首先造訪了存在CSRF漏洞網站Site1,成功登陸並取得了Cookie,此後,所有該用戶對Site1的訪問均會攜帶Site1的Cookie,因此被Site1認為是有效操作。
此時使用者又造訪了帶有攻擊行為的網站Site2,而Site2的返回頁面中帶有一個訪問Site1進行惡意操作的連接,但卻偽裝成了合法內容,例如下面的超鏈接看起來是一個抽獎信息,實際上卻是想Site1站點提交提款請求
<a> 三百万元抽奖,免费拿 </a>
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() %}起到了為表單添加隱藏元素以防止跨站請求的作用。 Tornado的安全Cookie支援和XSRF防範框架減輕了應用程式開發者的許多負擔,沒有他們,開發者需要思考很多防範的細節措施,因此Tornado內建的安全功能也非常有用。
以上是Python中Tornado防止跨站攻擊的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!