我最近安装了烧瓶护身符,在定义了默认内容安全策略之后,我意识到我的Swagger文档页面没有加载。
Swagger文档页面是由烧瓶-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)还是需要定义其他参数?
发布于 2019-10-31 21:25:50
不,这是因为swagger使用内联脚本和样式 - 以下是用于swagger的公开问题跟踪器,这是酒瓶公开发行-restplus。
烧瓶-护身符允许对“按次查看”基础进行控制,因此您可以将“不安全内联”关键字添加到该端点的CSP中。如果用烧瓶-restplus无法做到这一点,您也可以使用before_request来修改CSP,不管它的路由前缀是什么,如概述的这里。
编辑:
解决方法是为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
}https://stackoverflow.com/questions/58610678
复制相似问题