【问题标题】:Flask-Security reset password functionality exploitedFlask-Security 重置密码功能被利用
【发布时间】:2020-02-27 04:41:43
【问题描述】:

我有一个在生产环境中运行的烧瓶应用程序,其中一位用户请求重置密码,该用户向他们发送了一封电子邮件,其中包含返回该站点的链接以重置密码。

该电子邮件可能已与第三方共享,并且链接已暴露。现在,重置请求正从多个 IP 地址发送垃圾邮件。我使用 SECURITY_RESET_PASSWORD_WITHIN 配置参数将一个计时器设置为 30 分钟,我可以看到它确实按预期工作,链接无效并抛出一个错误,指出链接已过期。

但是 Flask-Security 包的默认行为是在使用过期令牌向重置页面发出 GET 请求时,如果令牌已过期,则重新向用户发送重置电子邮件。所以有人可以继续使用垃圾邮件发送过期链接 GET /reset/token_id 并且用户不断收到重置电子邮件。

处理这种情况的正确方法是什么?

【问题讨论】:

    标签: flask email-spam flask-security


    【解决方案1】:

    一旦用户更改密码,这些令牌应被视为“无效”,然后不再发送电子邮件。

    【讨论】:

    • 令牌因超时而失效,但如果您打开旧链接并且令牌不再有效,Flask-Security 的默认行为是重新发送新的重置电子邮件。这就是我试图解决的问题
    • 否 - 如果您查看 view.py:reset_password - 只有在令牌过期时才会发送电子邮件 - 如果令牌无效则不会。用户更改密码后,现有令牌应标记为无效。如果不是这种情况 - 那么就有一个错误。
    • 你是对的,是的,我误解了你之前所说的。但这里的问题是,一些恶意的第三方在一天内反复使用同一个链接,因为令牌在 30 分钟内到期,他们能够不断地向用户发送新电子邮件。如果用户修改密码成功,则令牌失效,不再发送新邮件。
    • 好的 - 这有点烦人 - 尽管有人开始密码重置请求并且他们的电子邮件帐户被黑客入侵并且长时间不打扰完成密码重置请求似乎是一个相当小的问题.我同意,但不清楚是否有理由自动重新发送电子邮件 - 大多数网站都有一个按钮,允许您请求“请重新发送...”
    • 尽管我们不能责怪客户,而且由于他们被发送垃圾邮件,这已成为我们现在关心的问题。我们最终自己重写了所有表单和后端功能,而不是使用烧瓶安全的。
    猜你喜欢
    • 2012-12-04
    • 2019-06-04
    • 2020-07-05
    • 2013-05-17
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    相关资源
    最近更新 更多