tornado使用操作指南--跨站請求偽造XSRF

1. 前言

XSRF名為跨站請求偽造萍肆,也被稱為CSRF(Cross-site request forgery)九妈。任何Web應用都有可能面臨跨站請求偽造這一安全漏洞,該漏洞允許一個惡意的攻擊者在受害者網(wǎng)站上運行未授權(quán)的請求。包括以被攻擊者的身份發(fā)送信息赢织,盜取賬號,購買商品等操作逛拱。

2.跨站請求攻擊原理

簡述XSRF攻擊的原理圖:


image.png

分析圖XSRF攻擊原理中各請求:

請求1: 用戶瀏覽并登陸受信任的網(wǎng)站A敌厘。
請求2: 網(wǎng)站A驗證用戶登錄成功,在瀏覽器中保存網(wǎng)站A返回的Cookie朽合。
請求3: 用戶在沒有退出網(wǎng)站A的情況下俱两,放問不受信任的網(wǎng)站B。
請求4: 不受信任的網(wǎng)站B要求訪問訪問網(wǎng)站A的URL曹步,這時瀏覽器會帶上網(wǎng)站A的Cookie
發(fā)出這個請求(請求5)宪彩。因此網(wǎng)站A以為當前訪問該URL是用戶主動的行為,
達到跨站請求攻擊的目的讲婚。

3. 跨站請求攻擊防御

跨站請求攻擊的防御方法很多尿孔,但基本思想都是一致的,那就是每個請求都必須包含一個存儲在cookie中的參數(shù)值作為令牌筹麸。當一個合法的表單被提交時活合,它將提交表單的信息和已存儲在cookie中的令牌值,如果服務端驗證該令牌不匹配物赶,則認為請求不合法白指,不給于響應。通過這種形式達到防御跨站攻擊酵紫,在Tornado中可以如下示例配置實現(xiàn)防御請求攻擊告嘲。

XSRF防御:

import os

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.httpclient
from tornado.options import define, options

define("port", default=8080, help="run on the given port", type=int)

class RegisterHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        self.render('register.html')

    def post(self, *args, **kwargs):
        username = self.get_argument('username')
        password = self.get_argument('password')
        # 忽略驗證注冊的賬號错维、密碼功能和實現(xiàn)賬號數(shù)據(jù)存儲在數(shù)據(jù)庫的操作
        self.write('注冊成功')

def make_app():
    return tornado.web.Application(handlers=[
        (r"/register/", RegisterHandler),
    ],
        template_path=os.path.join(os.path.dirname(__file__), "templates"),
        # 開啟xsrf加密
        xsrf_cookies=True,
        cookie_secret='cqVJzSSjQgWzKtpHMd4NaSeEa6yTy0qRicyeUDIMSjo=')

if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = make_app()
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

模板register.html如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注冊頁面</title>
</head>
<body>
    <form action="" method="post">
        {% module xsrf_form_html() %}
        <p>賬號: <input type="text" name="username"></p>
        <p>密碼 <input type="text" name="password"></p>
        <p><input type="submit" value="提交"></p>
    </form>
</body>
</html>

以上示例中需要注意如下兩點即可:

1)在實例化Appllication對象時,傳入xsrf_cookies參數(shù)并設(shè)置為True橄唬。

2)在模板register.html中添加{% module xsrf_from_html() %}赋焕,在渲染模板文件時,該標簽會解析為name=‘_xsrf’的隱藏input標簽仰楚。

執(zhí)行流程: 當訪問http://127.0.0.1:8080/register/地址時隆判,可以從瀏覽器的cookies中發(fā)現(xiàn)自動生成了一個名為_xsrf的cookie。而當在提交表單時僧界,除了提交表單中的賬號和密碼參數(shù)蜜氨,還會提交名為‘_xsrf’隱藏值,用以防止跨站請求的作用捎泻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末飒炎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子笆豁,更是在濱河造成了極大的恐慌郎汪,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闯狱,死亡現(xiàn)場離奇詭異煞赢,居然都是意外死亡,警方通過查閱死者的電腦和手機哄孤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門照筑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘦陈,你說我怎么就攤上這事凝危。” “怎么了晨逝?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵蛾默,是天一觀的道長。 經(jīng)常有香客問我捉貌,道長支鸡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任趁窃,我火速辦了婚禮牧挣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘醒陆。我一直安慰自己瀑构,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布统求。 她就那樣靜靜地躺著检碗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪码邻。 梳的紋絲不亂的頭發(fā)上折剃,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音像屋,去河邊找鬼怕犁。 笑死,一個胖子當著我的面吹牛己莺,可吹牛的內(nèi)容都是我干的奏甫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼凌受,長吁一口氣:“原來是場噩夢啊……” “哼阵子!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胜蛉,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤挠进,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后誊册,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體领突,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年案怯,在試婚紗的時候發(fā)現(xiàn)自己被綠了君旦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘲碱,死狀恐怖金砍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情麦锯,我是刑警寧澤捞魁,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站离咐,受9級特大地震影響谱俭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宵蛀,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一昆著、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧术陶,春花似錦凑懂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摆碉。三九已至,卻和暖如春脓豪,著一層夾襖步出監(jiān)牢的瞬間巷帝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工扫夜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留楞泼,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓笤闯,卻偏偏與公主長得像堕阔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子颗味,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容