簡體   English   中英

Flask-Talisman 打破了 flask-restplus 的 swagger 文檔

[英]Flask-Talisman breaks flask-restplus' swagger documentation

我最近安裝了燒瓶護身符,在定義了默認的內容安全策略后,我意識到我的 Swagger 文檔頁面沒有加載。

Swagger 文檔頁面由 flask-restplus 自動生成,它只是停止加載。

我定義的內容安全策略(CSP)是這樣的:

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

這可以通過將 swagger 添加到 CSP 中的受信任域來簡單地解決,就像這樣?

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

還是我需要定義其他參數?

不,這是因為 swagger-ui 使用內聯腳本styles -這是 swagger-ui 的未解決問題跟蹤器,這是flask-restplus的未解決問題。

flask-talisman 允許在“per-view”基礎上進行控制,因此您可以將“unsafe-inline”關鍵字添加到該端點的 CSP。 如果使用 flask-restplus 無法做到這一點,您還可以使用 before_request 修改您的 CSP,無論 swagger 路由前綴是什么,如此所述。

編輯:

一種解決方法是對允許內聯腳本和 styles 的 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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM