SESSION_COOKIE_SECURE不加密会话

时间:2018-09-24 16:15:56

标签: python security session flask

我正试图在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。

1 个答案:

答案 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'])