Python 允许使用护身符从烧瓶中的单一路线进行iframe

Python 允许使用护身符从烧瓶中的单一路线进行iframe,python,flask,iframe,Python,Flask,Iframe,我用的是带瓶护身符的瓶子。我的CSP当前已为所有路由配置为: SELF = '\'self\'' csp = { 'default-src': [SELF, '*.gstatic.com'], 'connect-src': [SELF, 'https://fonts.googleapis.com', 'https://cdnjs.cloudflare.com'], 'frame-src': [SELF, 'https://js.stripe.com'], 'scr

我用的是带瓶护身符的瓶子。我的CSP当前已为所有路由配置为:

SELF = '\'self\''
csp = {
    'default-src': [SELF, '*.gstatic.com'],
    'connect-src': [SELF, 'https://fonts.googleapis.com', 'https://cdnjs.cloudflare.com'],
    'frame-src': [SELF, 'https://js.stripe.com'],
    'script-src': [SELF, 'https://cdnjs.cloudflare.com', 'https://js.stripe.com', 'https://www.googletagmanager.com'],
    'style-src': [SELF, 'https://cdnjs.cloudflare.com', 'https://fonts.googleapis.com', '\'unsafe-inline\''],
    'img-src': [SELF, '*', 'blob:', 'data:']
}
talisman.init_app(app, content_security_policy=csp, content_security_policy_nonce_in=['script-src'])
每当外部站点试图通过iframe加载我的页面时,它们都会收到错误X-Frame-Options为SAMEORIGIN,这通常是正常的

但是,我希望加载时外部iFrame可以访问单个路由。为了实现这一目标,我遵循以下建议:

@talisman(frame_options=ALLOW_FROM, frame_options_allow_from='*')
在我的特定路线之前


但是Chrome不允许这样做,并报告一个错误。我认为应该改为设置CSP。我应该如何重新写入或重新配置我的路由,以允许外部iFrame在所有浏览器中访问它?

有关flask talisman路由的示例:

# Example of a route-specific talisman configuration

@app.route('/embeddable')
@talisman(

    frame_options='ALLOW-FROM',
    frame_options_allow_from='https://example.com/',

)

def embeddable():
    return "<html>I can be embedded.</html>"

解决方案是在路由上直接增加csp,使用帧头,而不是在某些浏览器中优先

# assume a csp dict exists
@talisman(frame_options=ALLOW_FROM,
          frame_options_allow_from='*',
          content_security_policy={**csp, 'frame-ancestors': ['*']})
def flask_route():
    # individualised route

我相信我可以在我当前的设置中实现这一点,替换“*”,但是Chrome不允许,所以解决方案是直接影响talisman设置的CSP中的帧祖先。我只是不知道如何将它隔离到一个单独的路由。我在做了更好的研究后编辑了我的答案,尝试一下,然后让我知道它是否适合你。嗨,谢谢你的回复,也许我的帖子写得很差-我已经可以完全按照你的回答来做了,我的问题与firefox和chrome有关,不允许来自。请参见此处:。我寻求另一种解决方案,包括编辑单一路线的CSP。