我目前正在开发一个使用 Django API 服务器和运行 React 的 NodeJS 服务器的项目。在开发中我们在 8000 端口上运行 Django,在 8080 端口上运行 NodeJS,目前 React 负责渲染页面并与 Django API 交互,Django API 为 React 提供数据。为了让 React 调用 Django API,我们在 Django 中启用了 CORS,因为它们位于不同的端口。
我的问题如下:
在生产环境中允许所有 CORS 安全吗?
如果不使用 Django 的模板系统,该站点是否仍默认受到 CSRF 保护?如果没有,如何在这样的设置(React+Django)中防止 CSRF?
最佳答案
是的,如果您允许正确的源域使用 CORS,那么在生产中使用它是安全的。例如,如果您使用
django-cors-headers
,为CORS_ORIGIN_WHITELIST
使用 CORS_ORIGIN_ALLOW_ALL=False 和一组域。作为answers to this question解释一下,如果使用
SessionAuthentication
,DRF 使用 CSRF token 。但是,如果您使用其他身份验证机制(例如, token 身份验证或 JWT),您也会受到客户端浏览器的保护,不允许来自不受信任来源的不安全请求,即不在您的CORS_ORIGIN_WHITELIST
中。参见 answers to this question关于 CORS 与 CSRF token 的安全性,以防止一般的 CSRF。
关于django - React + Django 的最佳安全实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321631/