国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【python】深入探討flask是如何預(yù)防CSRF攻擊的

這篇具有很好參考價(jià)值的文章主要介紹了【python】深入探討flask是如何預(yù)防CSRF攻擊的。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【python】深入探討flask是如何預(yù)防CSRF攻擊的,flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,csrf,csrf攻擊

?? 歡迎大家來到景天科技苑??

???? 養(yǎng)成好習(xí)慣,先贊后看哦~????

?? 作者簡介:景天科技苑
??《頭銜》:大廠架構(gòu)師,華為云開發(fā)者社區(qū)專家博主,阿里云開發(fā)者社區(qū)專家博主,CSDN全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,掘金優(yōu)秀博主,51CTO博客專家等。
??《博客》:Python全棧,前后端開發(fā),人工智能,js逆向,App逆向,網(wǎng)絡(luò)系統(tǒng)安全,數(shù)據(jù)分析,Django,fastapi,flask等框架,linux,shell腳本等實(shí)操經(jīng)驗(yàn),網(wǎng)站搭建,面試寶典等分享。

所屬的專欄:flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué)
景天的主頁:景天科技苑

CSRF攻擊防范

詳述CSRF(Cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。
攻擊者通過HTTP請求將數(shù)據(jù)傳送到服務(wù)器,從而盜取回話的cookie。盜取會(huì)話cookie之后,攻擊者不僅可以獲取用戶的信息,還可以修改該cookie關(guān)聯(lián)的賬戶信息。

跨站請求攻擊,簡單地說,是攻擊者通過一些技術(shù)手段欺騙用戶的瀏覽器去訪問一個(gè)自己曾經(jīng)認(rèn)證過的網(wǎng)站并運(yùn)行一些操作(如發(fā)郵件,發(fā)消息,甚至財(cái)產(chǎn)操作如轉(zhuǎn)賬和購買商品)。由于瀏覽器曾經(jīng)認(rèn)證過,所以被訪問的網(wǎng)站會(huì)認(rèn)為是真正的用戶操作而去運(yùn)行。這利用了web中用戶身份驗(yàn)證的一個(gè)漏洞:簡單的身份驗(yàn)證只能保證請求發(fā)自某個(gè)用戶的瀏覽器,卻不能保證請求本身是用戶自愿發(fā)出的。

CSRF防范方式一:

同源檢測
Cookie的同源和瀏覽器的同源策略有所區(qū)別:

  • 瀏覽器同源策略:協(xié)議、域名和端口都相同即同源;

  • Cookie同源策略:域名相同即同源;
    在HTTP協(xié)議中,每個(gè)異步請求都會(huì)攜帶兩個(gè)header,用來標(biāo)記來源域名:

  • Origin Header

  • Referer Header
    這兩個(gè)Header在瀏覽器發(fā)起請求時(shí),大多數(shù)情況會(huì)自動(dòng)帶上,并且不能由前端修改,服務(wù)器接收到后可以根據(jù)這兩個(gè)Header確定來源的域名;

特殊情況: 如果Origin和Referer都不存在,建議直接進(jìn)行阻止,特別是如果您沒有使用隨機(jī)CSRF Token(參考下方)作為第二次檢查。

另外,CSRF大多數(shù)情況下來自第三方域名,但并不能排除本域發(fā)起。如果攻擊者有權(quán)限在本域發(fā)布評論(含鏈接、圖片等),那么它可以直接在本域發(fā)起攻擊,這種情況下同源策略無法達(dá)到防護(hù)的作用。

CSRF防范方式二:

添加校驗(yàn)token
由于CSRF的本質(zhì)在于攻擊者欺騙用戶去訪問自己設(shè)置的地址,所以如果要求在訪問敏感數(shù)據(jù)請求時(shí),要求用戶瀏覽器提供不保存在cookie中,并且攻擊者無法偽造的數(shù)據(jù)作為校驗(yàn),那么攻擊者就無法再運(yùn)行CSRF攻擊。這種數(shù)據(jù)通常是窗體中的一個(gè)數(shù)據(jù)項(xiàng)。服務(wù)器將其生成并附加在窗體中,其內(nèi)容是一個(gè)偽隨機(jī)數(shù)。當(dāng)客戶端通過窗體提交請求時(shí),這個(gè)偽隨機(jī)數(shù)也一并提交上去以供校驗(yàn)。正常的訪問時(shí),客戶端瀏覽器能夠正確得到并傳回這個(gè)偽隨機(jī)數(shù),而通過CSRF傳來的欺騙性攻擊中,攻擊者無從事先得知這個(gè)偽隨機(jī)數(shù)的值,服務(wù)端就會(huì)因?yàn)樾r?yàn)token的值為空或者錯(cuò)誤,拒絕這個(gè)可疑請求

CSRF: 跨域請求偽造攻擊。flask預(yù)防CSRF攻擊需要下載包,flask_wtf。這個(gè)就是基于token校驗(yàn)來防范CSRF攻擊的。

插件下載

pip install flask_wtf

flask_wtf本身提供了生成表單HTML頁面的功能(基于wtforms提供),常用于開發(fā)前后端不分離的表單頁面,
同時(shí)Flask-wtf 擴(kuò)展模塊還提供了一套完善的 csrf 防護(hù)體系,對于我們開發(fā)者來說,使用flask_wtf模塊就可以非常簡單解決CSRF攻擊問題。

工作流程

1 在表單響應(yīng)的頁面中加入{% csrf_token %}標(biāo)簽,那么在進(jìn)行模板渲染是會(huì)生成如下標(biāo)簽

<input type="hidden" name="csrfmiddlewaretoken" value="ppwN8yg1wVEyXDxtMpVIrc4zV3gHiDKKb9rwGPLaSGRc0HKhXAwpNrKjGDUHIxjj">

2 并且在響應(yīng)還有這個(gè){% csrf_token %}標(biāo)簽的頁面時(shí),會(huì)添加cookie鍵值對,如下
csrftoken:lsMQeJgVbIKKxlfz6umgYM8WOWx1Njr77cHzM0L4xtXoApsnhFXXk1OGzwb1dd0G

3 當(dāng)用戶從該頁面提交數(shù)據(jù)時(shí),會(huì)攜帶csrfmiddlewaretoken:ppwN8yg1wVEyXDxtMpVIrc4zV3gHiDKKb9rwGPLaSGRc0HKhXAwpNrKjGDUHIxjj和cookie鍵值對

4 取出cookie中的csrftoken值和請求數(shù)據(jù)部分的csrfmiddlewaretoken的值,兩者進(jìn)行比較,這個(gè)隨機(jī)字符串叫做token字符串.
flask如果在請求數(shù)據(jù)部分找tokne值,如果這個(gè)鍵對應(yīng)的值和cookie中csrftoken對應(yīng)的值相同,也能通過認(rèn)證.

具體配置

  1. 設(shè)置應(yīng)用程序的 secret_key,用于加密生成的 csrf_token 的值
#1. session加密的時(shí)候已經(jīng)配置過了.如果沒有在配置項(xiàng)中設(shè)置,則如下:
app.secret_key = "#此處可以寫隨機(jī)字符串#"

#2. 也可以寫在配置類中。
class Config(object):
    DEBUG = True
    SECRET_KEY = "dsad32DASSLD*13%^32"
    
"""加載配置"""
app.config.from_object(Config)
  1. 導(dǎo)入 flask_wtf 中的 CSRFProtect類,進(jìn)行初始化,并在初始化的時(shí)候關(guān)聯(lián) app
# 方式1:
from flask_wtf import CSRFProtect
csrf = CSRFProtect() # 這塊代碼可能在文件中。
app = Flask(import_name=__name__, template_folder="templates")
# 項(xiàng)目配置代碼之后
csrf.init_app(app) # 避免出現(xiàn)引用導(dǎo)包,所以提供了init_app的用法

# 方式2:
# from flask_wtf import CSRFProtect
# app = Flask(import_name=__name__, template_folder="templates")
# 項(xiàng)目配置代碼之后
# CSRFProtect(app)

完整視圖代碼

from flask import Flask, render_template

from flask_wtf import CSRFProtect
csrf = CSRFProtect() # 這塊代碼可能在文件中。
app = Flask(import_name=__name__, template_folder="templates")

# 項(xiàng)目配置代碼之后
csrf.init_app(app) # 將插件注冊到app中去


#設(shè)置應(yīng)用程序的 secret_key,用于加密生成的 csrf_token 的值
app.config['SECRET_KEY'] = 'dafssg231bfvxvdsfwrqdqfafaffsgsbfsfsgs'


@app.route("/user")
def user():
    title = "用戶中心"
    html = render_template("index12.html", **locals())
    return html

@app.route("/transfer", methods=["post"])
def transfer():
    return "轉(zhuǎn)賬成功!"

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

在表單中使用 CSRF 令牌

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <form action="http://127.0.0.1:5000/transfer" method="post">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
    賬號(hào):<input type="text" name="username"><br><br>
    密碼:<input type="text" name="password"><br><br>
    <input type="submit" value="轉(zhuǎn)賬">
  </form>
</body>
</html>

瀏覽器訪問/user頁面,表單里面會(huì)多一個(gè)隱藏的input標(biāo)簽,
【python】深入探討flask是如何預(yù)防CSRF攻擊的,flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,csrf,csrf攻擊

當(dāng)我們點(diǎn)擊轉(zhuǎn)賬時(shí),form表單中只要添加了{(lán)%csrf_token%},頁面就會(huì)自動(dòng)添加個(gè)隱藏的input標(biāo)簽,每次請求得到的的value值都不相同
【python】深入探討flask是如何預(yù)防CSRF攻擊的,flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,csrf,csrf攻擊

只要手動(dòng)改下這個(gè)隱藏的input里面的value值,再提交數(shù)據(jù)就會(huì)forbidden。這個(gè)值只有是后臺(tái)給的才能通過鑒權(quán)
【python】深入探討flask是如何預(yù)防CSRF攻擊的,flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,csrf,csrf攻擊

點(diǎn)擊轉(zhuǎn)賬,校驗(yàn)失敗,數(shù)據(jù)提交不成功
【python】深入探討flask是如何預(yù)防CSRF攻擊的,flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,csrf,csrf攻擊

這樣,第三方請求在提交表單時(shí),就算猜到csrf_token的變量名,也無法猜測到服務(wù)器傳來的值,所以,就可以防范csrf攻擊

總結(jié)

簡單總結(jié)一下本文flask中CSRF攻擊的防護(hù)策略:

自動(dòng)防護(hù)策略:同源檢測(Origin和Referer驗(yàn)證);
主動(dòng)防護(hù)策略:token驗(yàn)證以及配合SameSite設(shè)置;
為了更好的防御CSRF,最佳實(shí)踐應(yīng)該是結(jié)合上面總結(jié)的防御措施方式中的優(yōu)缺點(diǎn)來綜合考慮,結(jié)合當(dāng)前Web應(yīng)用程序自身的情況做合適的選擇,才能更好的預(yù)防CSRF的發(fā)生。
喜歡的朋友可以一鍵三連,flask高階用法持續(xù)更新中?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-850808.html

到了這里,關(guān)于【python】深入探討flask是如何預(yù)防CSRF攻擊的的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot 該如何預(yù)防 XSS 攻擊

    SpringBoot 該如何預(yù)防 XSS 攻擊

    XSS 漏洞到底是什么,說實(shí)話我講不太清楚。但是可以通過遇到的現(xiàn)象了解一下。在前端Form表單的輸入框中,用戶沒有正常輸入,而是輸入了一段代碼: /inputimg src=1 onerror=alert1 ?這個(gè)正常保存沒有問題。問題出在了列表查詢的時(shí)候,上面的代碼就生效了,由于圖片的地址亂寫

    2024年02月13日
    瀏覽(22)
  • 如何防止CSRF攻擊

    隨著互聯(lián)網(wǎng)的高速發(fā)展,信息安全問題已經(jīng)成為企業(yè)最為關(guān)注的焦點(diǎn)之一,而前端又是引發(fā)企業(yè)安全問題的高危據(jù)點(diǎn)。在移動(dòng)互聯(lián)網(wǎng)時(shí)代,前端人員除了傳統(tǒng)的 XSS、CSRF 等安全問題之外,又時(shí)常遭遇網(wǎng)絡(luò)劫持、非法調(diào)用 Hybrid API 等新型安全問題。當(dāng)然,瀏覽器自身也在不斷在

    2024年02月13日
    瀏覽(27)
  • 什么是0day漏洞?如何預(yù)防0day攻擊?

    0day漏洞,是指已經(jīng)被發(fā)現(xiàn),但是還未被公開,同時(shí)官方還沒有相關(guān)補(bǔ)丁的漏洞;通俗的講,就是除了黑客,沒人知道他的存在,其往往具有很大的突發(fā)性、破壞性、致命性。 0day漏洞之所以稱為0day,正是因?yàn)槠溲a(bǔ)丁永遠(yuǎn)晚于攻擊。所以攻擊者利用0day漏洞攻擊的成功率極高,

    2024年02月01日
    瀏覽(21)
  • SpringBoot 如何防御 CSRF 攻擊

    SpringBoot 如何防御 CSRF 攻擊

    CSRF 就是跨域請求偽造,英文全稱是 Cross Site Request Forgery。 這是一種非常常見的Web攻擊方式,其實(shí)是很好防御的,但是由于經(jīng)常被很多開發(fā)者忽略,進(jìn)而導(dǎo)致很多網(wǎng)站實(shí)際上都存在 CSRF 攻擊的安全隱患。 今天和大家聊一聊什么是 CSRF 攻擊以及 CSRF 攻擊該如何防御。 想要防御

    2024年02月02日
    瀏覽(19)
  • CSRF 攻擊和 XSS 攻擊分別代表什么?如何防范?

    一:PHP ????????1. CSRF 攻擊和 XSS 攻擊分別代表什么? ? ? ? ? ? ? ? ? 1.CSRF攻擊 ????????????????1.概念: ????????????????CSRF(Cross-site request forgery)跨站請求偽造,用戶通過跨站請求,以合法身份做非法的事情 ? ? ? ? ? ? ? ? 2.原理: ? ? ? ? ? ?

    2024年02月13日
    瀏覽(34)
  • 深入探討虛擬現(xiàn)實(shí)中的新型安全威脅:“盜夢攻擊”及其防御策略

    深入探討虛擬現(xiàn)實(shí)中的新型安全威脅:“盜夢攻擊”及其防御策略

    隨著虛擬現(xiàn)實(shí)(VR)技術(shù)的飛速發(fā)展,用戶體驗(yàn)達(dá)到了前所未有的沉浸水平,但也暴露在一系列新的安全威脅之下。本文著重介紹了近期出現(xiàn)的一種高度隱秘且影響深遠(yuǎn)的攻擊手段——“盜夢攻擊”。這一概念由芝加哥大學(xué)的研究人員提出,揭示了攻擊者如何通過操控VR環(huán)境,

    2024年04月26日
    瀏覽(14)
  • Spring Boot 中的 SQL 注入攻擊是什么,原理,如何預(yù)防

    Spring Boot 中的 SQL 注入攻擊是什么,原理,如何預(yù)防

    隨著互聯(lián)網(wǎng)的發(fā)展,Web 應(yīng)用程序的數(shù)量不斷增加,而 SQL 注入攻擊也成為了常見的網(wǎng)絡(luò)安全問題之一。SQL 注入攻擊是通過在 Web 應(yīng)用程序中注入惡意的 SQL 代碼,從而獲取或篡改數(shù)據(jù)庫中的數(shù)據(jù)。在 Spring Boot 中,由于使用了 ORM 框架(如 MyBatis、Hibernate 等),開發(fā)人員往往會(huì)

    2024年02月12日
    瀏覽(26)
  • 安全攻防實(shí)戰(zhàn)丨如何預(yù)防利用中間人攻擊進(jìn)行小程序刷分

    本文分享自華為云社區(qū)《【安全攻防】深入淺出實(shí)戰(zhàn)系列專題-利用中間人攻擊進(jìn)行小程序刷分》,作者: MDKing 。 中間人攻擊(Man-in-the-middle attack,簡稱MITM)是攻擊者在進(jìn)行網(wǎng)絡(luò)通信的雙方中間,分別與兩端建立獨(dú)立的聯(lián)系,并進(jìn)行數(shù)據(jù)嗅探甚至篡改,而通信的雙方卻對中

    2024年02月08日
    瀏覽(24)
  • 區(qū)塊鏈合約安全系列(三):如何認(rèn)識(shí)及預(yù)防公鏈合約中的自毀攻擊

    區(qū)塊鏈合約安全系列(三):如何認(rèn)識(shí)及預(yù)防公鏈合約中的自毀攻擊

    id:BSN_2021 公眾號(hào):BSN 研習(xí)社 作者:紅棗科技張雪良 背景:由于公鏈環(huán)境下所有的信息都是共享的,智能合約相當(dāng)于是完全透明化,任何人都可以調(diào)用,外加一些利益的驅(qū)動(dòng),導(dǎo)致引發(fā)了很多hacker的攻擊。其中self destruct攻擊也是常見的攻擊方式之一。 目標(biāo):將目標(biāo)合約癱瘓

    2024年02月01日
    瀏覽(26)
  • 萬字講解9種Web應(yīng)用攻擊與防護(hù)安全。XSS、CSRF、SQL注入等是如何實(shí)現(xiàn)的

    萬字講解9種Web應(yīng)用攻擊與防護(hù)安全。XSS、CSRF、SQL注入等是如何實(shí)現(xiàn)的

    OWASP(開放Web軟體安全項(xiàng)目- Open Web Application Security Project) 是一個(gè)開源的、非盈利的全球性安全組織,致力于應(yīng)用軟件的安全研究。使命 是使應(yīng)用軟件更加安全,使企業(yè)和組織能夠?qū)?yīng)用安全風(fēng)險(xiǎn)做出更清晰的決策。 http://www.owasp.org.cn/ OWASP在業(yè)界影響力: OWASP被視為web應(yīng)用

    2023年04月15日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包