最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flask中secret_key設(shè)置方式解析

 更新時(shí)間:2025年09月22日 08:50:00   作者:追逐此刻  
Flask中app.secret_key用于會(huì)話加密和CSRF保護(hù),開發(fā)環(huán)境可用os.urandom(24)生成隨機(jī)密鑰,生產(chǎn)環(huán)境需固定強(qiáng)密鑰(如環(huán)境變量)確保安全,避免硬編碼或弱密鑰導(dǎo)致的漏洞風(fēng)險(xiǎn)
app.secret_key = os.urandom(24)

在 Flask 中,app.secret_key = os.urandom(24) 這行代碼用于生成并設(shè)置一個(gè)安全的隨機(jī)密鑰(Secret Key),這是 Flask 應(yīng)用中非常重要的配置之一。

以下是詳細(xì)解析:

?1. app.secret_key的作用?

  • ?會(huì)話(Session)加密?:Flask 使用 secret_key 對(duì)客戶端會(huì)話(Session)數(shù)據(jù)進(jìn)行簽名和加密,防止篡改(如用戶認(rèn)證狀態(tài)、臨時(shí)數(shù)據(jù)等)。
  • ?CSRF 保護(hù)?:部分 Flask 擴(kuò)展(如 Flask-WTF)依賴 secret_key 生成 CSRF 令牌,防止跨站請(qǐng)求偽造攻擊。
  • ?安全簽名?:用于其他需要加密簽名的場(chǎng)景(如生成安全令牌、URL 簽名等)。

?2. os.urandom(24)詳解?

?功能?:os.urandom(size) 是 Python 的 os 模塊提供的函數(shù),用于生成指定長度的加密安全的隨機(jī)字節(jié)串?(基于操作系統(tǒng)提供的隨機(jī)源,如 /dev/urandom)。

?**參數(shù) 24**?:

  • 24 字節(jié)(即 192 位)的隨機(jī)數(shù)據(jù)是一個(gè)常見的安全推薦值,足夠抵抗暴力.破解。
  • 過短(如 16 字節(jié))可能降低安全性,過長(如 32 字節(jié))則無必要。

?3. 為什么需要隨機(jī)生成???

?避免硬編碼密鑰?:直接寫入固定字符串(如 "my-secret-key")容易被泄露或猜測(cè)。

?動(dòng)態(tài)生成?:每次應(yīng)用重啟時(shí)生成新密鑰(適合開發(fā)環(huán)境),但生產(chǎn)環(huán)境需要固定密鑰:

否則重啟后會(huì)話會(huì)失效,用戶需要重新登錄。

生產(chǎn)環(huán)境推薦從環(huán)境變量讀取固定密鑰:

import os
app.secret_key = os.environ.get('FLASK_SECRET_KEY', os.urandom(24))

?4. 生產(chǎn)環(huán)境最佳實(shí)踐?

?使用環(huán)境變量?:

# 生成一個(gè)永久密鑰(Linux/Mac)
python -c 'import os; print(os.urandom(24).hex())'
# 輸出示例:d3b07384d113edec49eaa6238ad5ff00c74c7d11

然后在部署時(shí)設(shè)置環(huán)境變量:

export FLASK_SECRET_KEY="生成的密鑰"

?配置文件?:將密鑰保存在安全的配置文件中(如 .env),并通過庫(如 python-dotenv)加載。

?5. 常見錯(cuò)誤?

?**未設(shè)置 secret_key**?:會(huì)導(dǎo)致 

RuntimeError: The session is unavailable because no secret key was set.

?使用弱密鑰?:如 "12345" 或空字符串,會(huì)大幅降低安全性。

6. 秘鑰的作用?

from flask import Flask, request, jsonify, session
import os
app = Flask(__name__)
app.secret_key = os.urandom(24) # 設(shè)置一個(gè)密鑰,用于加密 session 數(shù)據(jù)
# 模擬用戶信息,實(shí)際項(xiàng)目中需要替換為真實(shí)的用戶信息
users = {
'123': 'admin',
'admin': 'admin'
}
# 登錄接口
@app.route('/login', methods=['POST'])
def login():
    data = request.get_json()
    username = data.get('username')
    password = data.get('password')
    if username in users and users[username] == password:
        session['logged_in'] = True
        return 'Login successful', 200
    else:
        return 'Login failed', 401
# 查詢信息接口,需要登錄才能訪問
@app.route('/get_info')
def get_info():
    if 'logged_in' in session and session['logged_in']:
        # 用戶已登錄,返回用戶信息
        return 'User Info: OK' # 返回用戶信息
    else:
        # 用戶未登錄,返回未授權(quán)的狀態(tài)碼
        return 'Unauthorized', 401
if __name__ == '__main__':
    app.run(debug=True)

秘鑰主要用于 ?加密會(huì)話(Session)數(shù)據(jù),具體作用包括:

  • ?會(huì)話安全?:Flask 的 Session 默認(rèn)存儲(chǔ)在客戶端的 Cookie 中(通過簽名后的加密數(shù)據(jù))。秘鑰用于簽名和驗(yàn)證這些數(shù)據(jù),防止篡改。
  • ?防止偽造?:沒有秘鑰時(shí),攻擊者可能偽造 Session 數(shù)據(jù)(如手動(dòng)設(shè)置 logged_in=True)。秘鑰確保只有服務(wù)器能生成有效的 Session。
  • ?依賴的擴(kuò)展?:如果使用 Flask 的 flash 消息、flask_login 等擴(kuò)展,它們也需要秘鑰來保證安全。

7. 秘鑰的使用場(chǎng)景?

在代碼中,秘鑰直接影響以下功能:

??(1)session的讀寫?

?登錄時(shí)?:session['logged_in'] = True

這段數(shù)據(jù)會(huì)被 Flask 用秘鑰簽名后加密,存儲(chǔ)到客戶端的 Cookie 中。

?訪問 /get_info 時(shí)?:if 'logged_in' in session

Flask 會(huì)用秘鑰驗(yàn)證客戶端傳來的 Session 數(shù)據(jù)是否有效,防止偽造。

??(2) 錯(cuò)誤示例?

如果秘鑰為空或太簡單(如 '123'):

  • Session 數(shù)據(jù)可能被破解或篡改。
  • 攻擊者可以偽造 Cookie 繞過登錄驗(yàn)證。

8. 秘鑰的最佳實(shí)踐?

?生產(chǎn)環(huán)境?:不要使用 os.urandom(24) 動(dòng)態(tài)生成(每次重啟服務(wù)會(huì)變,導(dǎo)致舊 Session 失效)。應(yīng)該使用固定的強(qiáng)密碼(如從環(huán)境變量讀?。?/p>

app.secret_key = os.environ.get('FLASK_SECRET_KEY', 'fallback-strong-key')

?復(fù)雜度?:至少 24 字節(jié)的隨機(jī)字符(如通過 openssl rand -hex 24 生成)。

?保護(hù)秘鑰?:不要將秘鑰硬編碼在代碼中或上傳到版本控制(如 Git)。

9. 測(cè)試驗(yàn)證?

你可以嘗試以下操作來觀察秘鑰的作用:

  1. ?正常登錄?:用 username: adminpassword: admin 訪問 /login,會(huì)返回一個(gè)加密的 Set-Cookie 頭。
  2. ?篡改 Cookie?:手動(dòng)修改 Cookie 中的 session 值,服務(wù)端會(huì)因簽名驗(yàn)證失敗返回 401。
  3. ?移除秘鑰?:刪除 app.secret_key 后,Session 會(huì)無法正常工作。

?總結(jié)?

  • ?開發(fā)環(huán)境?:os.urandom(24) 足夠便捷。
  • ?生產(chǎn)環(huán)境?:務(wù)必使用固定且保密的密鑰(通過環(huán)境變量或配置管理工具)。

如果需要進(jìn)一步優(yōu)化安全性,可以結(jié)合 Flask 的 SESSION_COOKIE_SECURE、SESSION_COOKIE_HTTPONLY 等配置增強(qiáng)會(huì)話保護(hù)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python入門基本操作列表排序用法詳解

    Python入門基本操作列表排序用法詳解

    本篇文中主要介紹列表的基本的組成,怎么訪問列表、列表的切片、列表的排序、列表的添加、列表的刪除等內(nèi)容,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • Python數(shù)據(jù)結(jié)構(gòu)與算法中的隊(duì)列詳解(1)

    Python數(shù)據(jù)結(jié)構(gòu)與算法中的隊(duì)列詳解(1)

    這篇文章主要為大家詳細(xì)介紹了Python的隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Pandas sample隨機(jī)抽樣的實(shí)現(xiàn)

    Pandas sample隨機(jī)抽樣的實(shí)現(xiàn)

    隨機(jī)抽樣,是統(tǒng)計(jì)學(xué)中常用的一種方法,本文主要介紹了Pandas sample隨機(jī)抽樣的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 解決Mac下使用python的坑

    解決Mac下使用python的坑

    今天小編就為大家分享一篇解決Mac下使用python的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python3調(diào)用windows dos命令的例子

    python3調(diào)用windows dos命令的例子

    今天小編就為大家分享一篇python3調(diào)用windows dos命令的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python中print()函數(shù)使用實(shí)例詳解

    Python中print()函數(shù)使用實(shí)例詳解

    Python的print()函數(shù)可以打印輸出,常用來將內(nèi)容打印到控制臺(tái),print()是python中最常見的一個(gè)函數(shù),本文就通過一些實(shí)例來給大家講講如何使用print()函數(shù),需要的朋友可以參考下
    2023-07-07
  • python對(duì)一個(gè)數(shù)向上取整的實(shí)例方法

    python對(duì)一個(gè)數(shù)向上取整的實(shí)例方法

    在本篇文章中小編給大家整理了關(guān)于python對(duì)一個(gè)數(shù)向上取整的實(shí)例方法,需要的朋友們可以跟著學(xué)習(xí)下。
    2020-06-06
  • Python圖像處理之Hough變換檢測(cè)直線

    Python圖像處理之Hough變換檢測(cè)直線

    霍夫變換是一種特征檢測(cè)(feature?extraction),被廣泛應(yīng)用在圖像分析,本文將利用Hough變換實(shí)現(xiàn)直線檢測(cè),感興趣的小伙伴可以了解一下
    2023-07-07
  • Win10操作系統(tǒng)中PyTorch虛擬環(huán)境配置+PyCharm配置

    Win10操作系統(tǒng)中PyTorch虛擬環(huán)境配置+PyCharm配置

    本文主要介紹了Win10操作系統(tǒng)中PyTorch虛擬環(huán)境配置+PyCharm配置,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • ubuntu16.04升級(jí)Python3.5到Python3.7的方法步驟

    ubuntu16.04升級(jí)Python3.5到Python3.7的方法步驟

    這篇文章主要介紹了ubuntu16.04升級(jí)Python3.5到Python3.7的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論

阳谷县| 科技| 南陵县| 鱼台县| 白朗县| 安远县| 琼中| 漳浦县| 威信县| 大兴区| 江孜县| 银川市| 利川市| 武山县| 神木县| 耿马| 乐业县| 象山县| 合作市| 祥云县| 济源市| 新巴尔虎右旗| 隆昌县| 瑞昌市| 绵阳市| 天镇县| 岳阳市| 金山区| 崇左市| 金门县| 周至县| 汤阴县| 绥芬河市| 阳江市| 镇赉县| 西畴县| 扎赉特旗| 五大连池市| 抚州市| 平阳县| 永清县|