gpt4 book ai didi

python - Flask-登录 : Prevent cookie reuse flaw

转载 作者:太空狗 更新时间:2023-10-30 03:00:38 25 4
gpt4 key购买 nike

当一位 friend 告诉我我的网站上存在安全漏洞时,我正在使用 Flask 开发一个网络应用程序。事实上,如果他在登录时转储浏览器的 cookie,注销,然后粘贴回相同的 cookie,就好像他从未注销过一样。事实上,这不是预期的行为。当用户注销时,cookie 应该失效,不能再使用。

现在我有一个用户模型,存储在数据库中。在这种情况下应该使用什么技术?以前有人遇到过同样的问题吗?更重要的是,我如何才能将这种安全性集成到我的网站上,而不必重写每个 View 来检查 token 或类似的东西?

这是应用程序初始化。

# App initialization
app = Flask(__name__)
app.config.from_object('config')
app.wsgi_app = ProxyFix(app.wsgi_app)

# Database Setup
db = SQLAlchemy(app)

# Login Manager Setup
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'index'
login_manager.session_protection = 'strong'

这是我目前使用的用户模型。

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True)
password = db.Column(db.String(54))
superuser = db.Column(db.Boolean())
active = db.Column(db.Boolean())
register_date = db.Column(db.DateTime())
last_login = db.Column(db.DateTime())

请注意,我删除了与此问题无关的方法和附加字段。

最佳答案

原因是flask-login接受了请求中的session cookie,因为它实际上是一个有效的session cookie,即使在用户删除它之后又再次发送。我同意,它不应该那样做,但确实如此。如果用户更改密码,实际上会发生同样的事情,旧的 cookie 仍然有效,因为 flask-login 的默认行为不是在 session cookie 中使用用户密码。有一篇写得很好here .

简而言之,使用 @login_manager.token_loader 并加载由基于用户密码哈希的加密签名 key 创建的 session token 。这就是 flask-login 实际推荐的方式,正如所讨论的那样 here .您可以使用 werkzeug.itsdangerous.URLSafeTimedSerializer 加载/创建 token 。

flask-login 的文档应该更清楚地反射(reflect)这种行为,或者只是强制使用更强的标记作为默认行为。

关于python - Flask-登录 : Prevent cookie reuse flaw,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28557728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com