我正在尝试在我的 Flask Web 应用程序上设置一些安全性。作为第一步,我将通过将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()
我还尝试使用以下语法添加此属性,但这没有区别:
MyApp.config['SESSION_COOKIE_SECURE'] = True
当我尝试打印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'
我的 Flask 版本是 1.0.2,我使用的是 HTTPS。
设置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'])