python - Flask 安全性令人难以置信地减慢了所有 https 流量

标签 python flask flask-login flask-security

我正在使用 Flask Security 创建安全的 API。 我最近发现使用@auth_token_required 会使我对后端的每个 调用花费大约50 倍 的时间。 HTTPS 调用时间从每个请求 100 毫秒增加到 5 秒以上。 将 @auth_token_required 替换为 @login_required 可解决此问题。

我在 Github 上找到了这个帖子:Slow token authentication描述了围绕这个问题的问题和沮丧。

这似乎是有意的安全限制的一部分,但对我来说,将每个请求放慢 50 倍似乎很疯狂。我需要离开 Flask Security 并实现 OAuth 还是社区中的任何人都有一个轻松解决此问题?

如果您遇到此问题以及您决定做什么,请发表评论。

最佳答案

我试过 flask-security,试图让它在各种情况下为我工作。我不需要加速哈希,所以我可能没有直接的答案,所以我可能只会为您指明正确的方向。

编辑 github 中的官方 flask 安全性是 this .我在下面使用的链接指向我的 fork ,它有几个改动,所以如果你需要 fork ,请 fork 官方的

1) Flask-Security 使用 passlib 进行哈希处理

2) 如您共享的链接中所述,Flask-Security 使用 bcrypt,它有意变慢

3) Bcrypt 使用工作因数来确定散列数据所需的时间。在 passlib 中,工作因子由称为 rounds 的 int 变量表示

4 为了散列数据,flask security 在 flask-security/utils.py 中使用了以下函数

def hash_data(data):
    return _hashing_context.hash(encode_string(data))

5 验证您的散列数据(例如 token )它在同一个文件中使用此函数

def verify_hash(hashed_data, compare_data):
    return _hashing_context.verify(encode_string(compare_data), hashed_data) 

6) hashing_context 源自 flask-security/core.py 中的 passlib|像这样在文件的不同地方

from passlib.context import CryptContext

def _get_hashing_context(app):
    schemes = cv('HASHING_SCHEMES', app=app)
    deprecated = cv('DEPRECATED_HASHING_SCHEMES', app=app)
    return CryptContext(
        schemes=schemes,
        deprecated=deprecated)

hashing_context=_get_hashing_context(app),

最后在 utils.py 中(之前分享过这样的)

_hashing_context = LocalProxy(lambda: _security.hashing_context)

从 passlib 导入并在上面六个中使用的 CryptContext 可以采用另一个参数,它是 4 到 31 之间的整数,默认情况下,它是 12 并且根据 docs将一轮增加双倍花费的时间

由于 Flask 安全性中 CryptContext 没有传递给它的整数值,我假设它使用默认值 12,因此您可以尝试各种数字以查看它的运行情况。有点像

def _get_hashing_context(app):
        schemes = cv('HASHING_SCHEMES', app=app)
        deprecated = cv('DEPRECATED_HASHING_SCHEMES', app=app)
        return CryptContext(
            schemes=schemes,
            deprecated=deprecated,
            pbkdf2_sha256__default_rounds=your_rounds) #I added this line

所以你需要 fork 安全性,将你的回合更改为适合你的数字并像这样安装你的 repo

pip install git+https://github.com/your_repo/flask-security

信息量太大了,希望对大家有用。 让我知道进展如何,因为在不久的将来我可能需要它

关于python - Flask 安全性令人难以置信地减慢了所有 https 流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50374614/

相关文章:

python - 无法安装python模块

python - 安装 psycopg2 osx 10.12 python 3.5.2 - psycopg2 的构建轮失败

用于视觉 react 时间的 Python 程序

python - 使用 Jinja2 (Flask) 模板引擎参数化可重用 block

python - 从 VBA 到 Flask 的 HTTP 请求的编码问题

python - Pytest Flask,登录时出现错误 308 永久重定向

flask - 在 Flask 中检查用户是否在线

python - 如何优化python中矩阵的数学运算

python - 如何获取当前登录 Flask-Login 的用户列表?

python - Flask-登录 : Prevent cookie reuse flaw