【问题标题】:Securely using a variable in URL in a Flask webapp在 Flask webapp 中安全地使用 URL 中的变量
【发布时间】:2020-02-14 11:05:59
【问题描述】:

我正在使用 Flask 制作一个 Web 应用程序,该应用程序将在 URL 中包含一个变量(下面的示例)。

@app.route('/landingpage/<id>')  # /landingpage/A
def landing_page(id):
    # Storage of a hashed <id>...

我的问题与 URL 中的变量有关,该变量可能包含机密信息,除了输入 URL 的人之外,任何人都不应访问这些信息。

通过 HTTPS 建立连接是否足以防止其他人在变量以散列格式存储之前访问该变量?

【问题讨论】:

    标签: security url flask


    【解决方案1】:

    你可以在 url 中使用 UUID,flask 支持这种类型的 url,我建议使用这个库 flask-uuid 来生成你的客户端访问的 uuid

    from flask_uuid import FlaskUUID
    
    flask_uuid = FlaskUUID()
    flask_uuid.init_app(app)
    
    @app.route('/personalID')  
    def gerate_uuid():
        return make_response({'uuid':uuid.uuid4()})
    
    @app.route('/landingpage/<uuid:id>')  # /landingpage/A
    def landing_page(id):
        return id  # 'id' is a uuid.UUID instance
    

    【讨论】:

    • FlaskUUID 看起来很有前途,谢谢。我无法立即看到的一件事是是否可以“解码”UUID 以检索原始变量(上例中的 )?
    • 是的,你可以,但是使用 jwt lib,看看我在这个问题中的答案stackoverflow.com/questions/60186473/…,通常 jwt 用于 Auth,但你也可以这样做
    • 在这种情况下,我相信简单地散列变量并直接存储它可能比使用 FlaskUUID 和 jwt 的组合更容易。假设我可以对 ID 进行哈希处理,我最初的问题仍然是关于 HTTPS 以及该变量是否可以被认为是安全的。
    • 是的,它仍然是安全的,因为 SSL 将在应用层工作,并且 URL 是应用层的一部分,所以是的,您可以毫无问题地在 URL 中传输您的 UUID 或令牌
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2014-06-28
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    相关资源
    最近更新 更多