上一篇文章:Python: Tornado 第二章:實戰演練:開發Tornado網站:第八節:用戶身份認證
下一篇文章: Python:Tornado 第三章:HTML5 WebSocket概念及應用:第一節:WebSocket概念
跨站請求僞造(Cross-site request forgery,CSRF 或XSRF)是一種對網站的惡意利用。經過CSRF,攻擊者能夠冒用用戶的身份,在用戶不知情的狀況下執行惡意操做。html
下圖展現了CSRF的基本原理。其中Site1是存在CSRF漏洞的網站,而SIte2是存在攻擊行爲的惡意網站。web
上圖內容解析以下:segmentfault
<a href='http://www.site1.com/get_money?amount=500&dest_card=34XXXXX"> 三百萬元抽獎,免費拿 </a>
爲了防範CSRF攻擊,要求每一個請求包括一個參數值做爲令牌的匹配存儲在Cookie中的對應值。安全
Tornado應用能夠經過一個Cookie頭和一個隱藏的HTML表單元素向頁面提供令牌。這樣,當一個合法頁面的表單被提交時,它將包括表單值和已存儲的Cookie。若是二者匹配,則Tornado應用承認請求有效。cookie
開啓Tornado的CSRF防範功能須要兩個步驟。app
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字典的形式傳入命名參數
<form action="/login" method="post"> {% module xsrf_form_html() %} <input type="text" name="message"/> <input type="submit" value="Post"/> </form>
這裏的{% module xsrf_form_html() %}
起到了爲表單添加隱藏元素以防止跨站請求的做用。函數
Tornado的安全Cookie支持和XSRF防範框架減輕了應用開發者的不少負擔,沒有他們,開發者須要思考不少防範的細節措施,所以Tornado內建的安全功能也很是有用。tornado