SESSION_COOKIE_SECURE 不加密会话

K32*_*327 1 python security session flask

我正在尝试为我的 Flask 网络应用程序设置一些安全性。作为第一步,我将通过设置SESSION_COOKIE_SECURE为 true来确保我的会话 cookie 安全。

但是从“检查元素”获取会话 cookie 后,我可以轻松解码会话 cookie,无论是否添加都没有区别SESSION_COOKIE_SECURE

这是我的代码:

from flask import Flask, request, app, render_template, session, send_file, redirect

MyApp = Flask(__name__)
MyApp.secret_key = "something"
application = MyApp  
if __name__ == "__main__":
    MyApp.debug = False
    MyApp.config.update(
        SESSION_COOKIE_SECURE=True,
        SESSION_COOKIE_HTTPONLY=True,
        SESSION_COOKIE_SAMESITE='Lax',
    )
    MyApp.config["SESSION_PERMANENT"] = True
    MyApp.run()
Run Code Online (Sandbox Code Playgroud)

我还尝试使用以下语法添加此属性,但这没有区别:

    MyApp.config['SESSION_COOKIE_SECURE'] = True
Run Code Online (Sandbox Code Playgroud)

当我尝试打印时出现SESSION_COOKIE_SECURE此错误

Traceback (most recent call last):
  File "...", line ..., in <module>
    print(MyApp.session_cookie_secure)
 AttributeError: 'Flask' object has no attribute 'session_cookie_secure'
Run Code Online (Sandbox Code Playgroud)

我的 Flask 版本是 1.0.2,我使用的是 HTTPS。

Mar*_*ers 7

设置SESSION_COOKIE_SECURE不加密cookie值,不。设置后,这会导致 Flask 创建带有“安全”标志设置的cookie 。这意味着浏览器只能通过加密连接将 cookie 返回给服务器,仅此而已。该设置不会更改 cookie 值本身的任何内容。

默认情况下,Flask 生成经过加密签名的cookie 。这意味着 cookie 内容可以被解码但不能更改,因为无法访问服务器机密的第三方无法为 cookie 创建有效的签名。

如果您 a) 使用 HTTPS(对来自外部的数据进行加密)并且 b) 保护您的 Web 应用程序免受 XSS 攻击,您通常不需要加密您的会话 cookie。如果没有 XSS 攻击向量,攻击者无论如何都无法访问您的 cookie 内容。

您当然不需要在这里这样做,因为这SESSION_COOKIE_HTTPONLY意味着浏览器永远不会将 cookie 暴露给 JavaScript,并且只有对浏览器具有完全访问权限的人才能看到 cookie 值。

Flask 没有“加密 cookie”设置,因为当您可以通过其他方式保护 cookie 时,它​​被认为是不必要的。您不应该将信息存储在会话 cookie 中,因为它应该受到保护,以免最终用户访问浏览器存储;将此类数据保存在服务器上,并仅在会话中存储唯一标识符,以便稍后检索该秘密数据。

如果由于某种原因您不能将此类秘密保留在会话 cookie 之外,并且不愿意接受最终用户可以读取这些数据,那么您必须自己加密 cookie 或使用 Flask 的替代会话提供程序,比如EncryptedSession.


至于属性错误:只有少数配置设置可以作为Flask对象的属性访问。要打印任意配置设置,请使用app.config对象:

print(MyApp.config['SESSION_COOKIE_SECURE'])
Run Code Online (Sandbox Code Playgroud)