gpt4 book ai didi

Flask CSP ( Content-Security-Policy ) 针对跨站脚本等攻击的最佳实践

转载 作者:行者123 更新时间:2023-12-04 14:12:19 29 4
gpt4 key购买 nike

我是 CSP 的新手。我试图通过设置 resp_header 来保护我的网站免受跨站点脚本攻击,从而在我的 Flask 应用程序中的所有模板中实现 CSP。我修改了我的渲染模板:

return render_template('addvideos.html`  form=form, legend = 'Update video : '+ videos.video_name)
    resp = make_response(render_template('addvideos.html', legend = 'Update video : '+ videos.video_name)
)
resp.headers['Content-Security-Policy'] = "default-src 'self';"
return resp
我在应用程序中有 50 多个“render_template”,我必须为每个添加响应 header 。经过研究,我发现 after_request 会执行如下所示的技巧:
@app.after_request
def add_security_headers(resp):
resp.headers['Content-Security-Policy']='default-src \'self\''
return resp
这很可靠吗?如果我直接在 HTML 模板 ( jinja2 ) 中应用 CSP 会怎样,这可能吗?哪个更可靠?任何好的建议都会受到欢迎。谢谢

最佳答案

is this very reliable ?


是的。在 app.after_request 中设置该标题装饰器将 header 应用于该 app 服务的所有路由.

What if I apply the CSP directly in the HTML template ( jinja2 ), is that possible?


不能在模板本身中完成的事情,您可以在 Python 中设置该 header ,如上所述。

Which is more reliable ?


虽然前一种方法(通过 app.after_request 装饰器)有效,但它通常可以由 Python 应用程序服务器所在的反向代理处理。如果不熟悉,请查看 the deployment docs .
例如使用 nginx 作为反向代理,你可以把它放在你的 server 中。堵塞:
add_header Content-Security-Policy "default-src 'self';";
或者,无论响应代码如何都发送 header :
add_header Content-Security-Policy "default-src 'self';" always;
This blog关于是否让反向代理处理发送此 header ,或在您的 Flask 应用程序中定义它有一些很好的建议:

Should I add a CSP header with nginx or my in application?While it is certainly easy to add a CSP header with nginx, it also possible to add a Content-Security-Policy header with your server side programming language ([Flask]). There are tradeoffs to doing it either way. If you have sections of your application that may require a different CSP policy then it might be easier to use your application programming language instead. Or if you plan to use features such as a CSP nonce, then it is much easier to set the Content-Security-Policy from your application code instead of from nginx.


此外,如果您要部署到像 Heroku 这样的平台,该平台在基本配置中直接公开 gunicorn 应用程序服务器,那么在您的应用程序中设置此 header 可能更容易,除非您计划进一步部署 nginx buildpack。
其他基于云的负载均衡器可能会提供自己的方式来设置这些 header ,独立于您的应用程序。
💡 在配置反向代理或负载均衡器时,值得一看 Mozilla's SSL Configuration Generator它支持 nginx、AWS ALB/ELB 等。然后可以使用 Qualys SSL test 测试服务器.

关于Flask CSP ( Content-Security-Policy ) 针对跨站脚本等攻击的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63290047/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com