#轉載請留言聯系
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 了,比較輕松。