欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2025年09月22日 08:50:00   作者:追逐此刻  
Flask中app.secret_key用于會(huì)話加密和CSRF保護(hù),開(kāi)發(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ì)客戶(hù)端會(huì)話(Session)數(shù)據(jù)進(jìn)行簽名和加密,防止篡改(如用戶(hù)認(rèn)證狀態(tài)、臨時(shí)數(shù)據(jù)等)。
  • ?CSRF 保護(hù)?:部分 Flask 擴(kuò)展(如 Flask-WTF)依賴(lài) secret_key 生成 CSRF 令牌,防止跨站請(qǐng)求偽造攻擊。
  • ?安全簽名?:用于其他需要加密簽名的場(chǎng)景(如生成安全令牌、URL 簽名等)。

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

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

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

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

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

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

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

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

生產(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),并通過(guò)庫(kù)(如 python-dotenv)加載。

?5. 常見(jiàn)錯(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ù)
# 模擬用戶(hù)信息,實(shí)際項(xiàng)目中需要替換為真實(shí)的用戶(hù)信息
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
# 查詢(xún)信息接口,需要登錄才能訪問(wèn)
@app.route('/get_info')
def get_info():
    if 'logged_in' in session and session['logged_in']:
        # 用戶(hù)已登錄,返回用戶(hù)信息
        return 'User Info: OK' # 返回用戶(hù)信息
    else:
        # 用戶(hù)未登錄,返回未授權(quán)的狀態(tài)碼
        return 'Unauthorized', 401
if __name__ == '__main__':
    app.run(debug=True)

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

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

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

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

??(1)session的讀寫(xiě)?

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

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

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

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

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

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

  • Session 數(shù)據(jù)可能被破解或篡改。
  • 攻擊者可以偽造 Cookie 繞過(guò)登錄驗(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ī)字符(如通過(guò) openssl rand -hex 24 生成)。

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

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

你可以嘗試以下操作來(lái)觀察秘鑰的作用:

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

?總結(jié)?

  • ?開(kāi)發(fā)環(huán)境?:os.urandom(24) 足夠便捷。
  • ?生產(chǎn)環(huán)境?:務(wù)必使用固定且保密的密鑰(通過(guò)環(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 while、for、生成器、列表推導(dǎo)等語(yǔ)句的執(zhí)行效率測(cè)試

    Python while、for、生成器、列表推導(dǎo)等語(yǔ)句的執(zhí)行效率測(cè)試

    這篇文章主要介紹了Python while、for、生成器、列表推導(dǎo)等語(yǔ)句的執(zhí)行效率測(cè)試,本文分別用兩段程序測(cè)算出了各語(yǔ)句的執(zhí)行效率,然后總結(jié)了什么情況下使用什么語(yǔ)句優(yōu)先使用的語(yǔ)句等,需要的朋友可以參考下
    2015-06-06
  • python 將字符串中的數(shù)字相加求和的實(shí)現(xiàn)

    python 將字符串中的數(shù)字相加求和的實(shí)現(xiàn)

    這篇文章主要介紹了python 將字符串中的數(shù)字相加求和的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 如何在Python?中使用?Luhn?算法驗(yàn)證數(shù)字

    如何在Python?中使用?Luhn?算法驗(yàn)證數(shù)字

    Luhn 算法驗(yàn)證器有助于檢查合法數(shù)字并將其與不正確或拼寫(xiě)錯(cuò)誤的輸入分開(kāi),這篇文章主要介紹了在Python中使用Luhn算法驗(yàn)證數(shù)字,需要的朋友可以參考下
    2023-06-06
  • python3處理word文檔實(shí)例分析

    python3處理word文檔實(shí)例分析

    在本篇文章里小編給大家分享了一篇關(guān)于python3處理word文檔實(shí)例分析內(nèi)容,有興趣的朋友們可以參考下。
    2020-12-12
  • OpenCV霍夫圓變換cv2.HoughCircles()

    OpenCV霍夫圓變換cv2.HoughCircles()

    這篇博客將學(xué)習(xí)如何使用霍夫圓變換在圖像中找到圓圈,OpenCV使用cv2.HoughCircles()實(shí)現(xiàn)霍夫圓變換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Python中字典列表中刪除重復(fù)項(xiàng)

    Python中字典列表中刪除重復(fù)項(xiàng)

    本文主要介紹了Python中字典列表中刪除重復(fù)項(xiàng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • spyder快捷鍵與python符號(hào)化輸出方式

    spyder快捷鍵與python符號(hào)化輸出方式

    這篇文章主要介紹了spyder快捷鍵與python符號(hào)化輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python字符串對(duì)齊和判斷方法匯總

    Python字符串對(duì)齊和判斷方法匯總

    本教程將詳細(xì)介紹Python中的字符串對(duì)齊方法以及字符串判斷方法,這些方法在文本處理、格式化輸出和字符串匹配中非常實(shí)用,無(wú)論你是Python初學(xué)者還是想要鞏固基礎(chǔ)知識(shí)的程序員,這篇教程都能幫助你全面理解這些操作,需要的朋友可以參考下
    2025-04-04
  • Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)與操作符的練習(xí)題集錦

    Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)與操作符的練習(xí)題集錦

    Python的一些算法題目經(jīng)常能夠幫助我們鞏固對(duì)一些常用方法的記憶,這里我們整理了一份Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)與操作符的練習(xí)題集錦,需要的朋友可以參考下
    2016-07-07
  • python快排算法詳解

    python快排算法詳解

    在本篇內(nèi)容里小編給大家整理了關(guān)于python快排算法的相關(guān)知識(shí)點(diǎn)內(nèi)基礎(chǔ)內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-03-03

最新評(píng)論