【问题标题】:Flask-Talisman breaks flask-restplus' swagger documentationFlask-Talisman 打破了 flask-restplus 的招摇文档
【发布时间】:2019-10-29 15:34:46
【问题描述】:

我最近安装了flask-talisman,在定义了默认的内容安全策略后,我意识到我的 Swagger 文档页面没有加载。

Swagger 文档页面由 flask-restplus 自动生成,它只是停止加载。

我定义的内容安全策略 (CSP) 是这样的:

csp = {
    'default-src': '\'self\''
}
talisman = Talisman(app, content_security_policy=csp)

是否可以像这样通过向 CSP 中的受信任域添加 swagger 来简单地解决这个问题?

csp = {
    'default-src': ["'self'", "*.swagger.com"]
}
talisman = Talisman(app, content_security_policy=csp)

还是需要定义其他参数?

【问题讨论】:

    标签: python flask google-cloud-platform swagger-ui flask-restplus


    【解决方案1】:

    不,这是因为 swagger-ui 使用 inline scriptsstyles -- here's the open issue tracker for swagger-ui 而这里是 open issue for flask-restplus

    flask-talisman 允许对'per-view' basis 进行控制,因此您可以将“unsafe-inline”关键字添加到该端点的 CSP 中。如果使用 flask-restplus 无法做到这一点,您还可以使用 before_request 修改您的 CSP,无论是什么 swagger 路由前缀,如 here 所述。

    编辑:

    一种解决方法是为允许内联脚本和样式的 Swagger 视图使用不同的 CSP:

    # Swagger CSP needs to have 'unsafe-inline' in the script-src and style-src fields
    SWAGGER_CSP = {
        "script-src": ["'self'", "'unsafe-inline'"],
        "style-src": ["'self'", "'unsafe-inline'"]
    }
    
    # update the CSP for the Swagger view function
    app.view_functions["swagger_ui.show"].talisman_view_options = {
        "content_security_policy": SWAGGER_CSP
    }
    

    【讨论】:

    • 感谢您提及存在的各种问题!显然我搜索得不够好。
    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多