我正试图在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。
答案 0 :(得分:2)
设置SESSION_COOKIE_SECURE
不会加密cookie值,否。设置后,这会使Flask使用"Secure" flag set创建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'])