在 Flask 項目中解決 CSRF 攻擊


#轉載請留言聯系

1. CSRF是什么?

  • CSRF全拼為Cross Site Request Forgery,譯為跨站請求偽造。
  • CSRF指攻擊者盜用了你的身份,以你的名義發送惡意請求。包括:以你名義發送郵件,發消息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬......
  • 造成的問題:個人隱私泄露以及財產安全。

 

2.CSRF攻擊示意圖

原理其實很簡單。舉個簡單的例子。A是一個很有錢的人,B是專門幫人托管錢的人,相當於銀行的角色,C是偷竊者。A和B約定,有人叫你給錢你就給錢。A把錢放在B那里。平時A就去問B拿錢,B就直接給錢給他。某一天,C也問一下B拿錢,B也直接給錢給C了,C這時候就相當於偷了A的錢。這就是csrf的攻擊原理。

解決辦法的原理也很簡單,就是A和B約定一下暗號,C來問B拿錢時,對不上暗號,自然就拿不到錢了。

 

3.代碼

(1)模擬CSRF攻擊

(2)阻止CSRF攻擊

(3)用 flask 的flask_wtf 模板實現阻止 CSRF 攻擊

(1)(2)代碼保存在:https://github.com/chichungceng/CSRF

有興趣可以看看

(3)比較簡單,代碼如下:

from flask import Flask
from flask import render_template
from flask.ext.wtf import CSRFProtect
app = Flask(__name__)

app.secret_key = "436fs3424123+=)%$$#l54,5"    # 隨便寫
# 讓當前flask應用激活csrf防范機制
CSRFProtect(app)

@app.route('/')
def index():
    return render_template('transfer.html')

if __name__ == '__main__':
    app.run(debug=True, port=8000)

然后在表單里面加入一句語句就行了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="">
        <input type="hidden" name="csrf_token" value="{{csrf_token()}}">    <--這一句
    </form>
</body>
</html>

這樣操作后就可以自動增加 token 了,比較輕松。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM