React + Django 的最佳安全实践
Posted
技术标签:
【中文标题】React + Django 的最佳安全实践【英文标题】:Best security practices for React + Django 【发布时间】:2018-06-27 13:05:26 【问题描述】:我目前正在开发一个使用 Django API 服务器和运行 React 的 NodeJS 服务器的项目。在开发中,我们在 8000 端口上运行 Django,在 8080 端口上运行 NodeJS,目前 React 负责渲染页面并与 Django API 交互,后者为 React 提供数据。为了让 React 调用 Django API,我们在 Django 中启用了 CORS,因为它们位于不同的端口上。
我的问题如下:
在生产环境中允许所有 CORS 是否安全?
如果不使用 Django 的模板系统,默认情况下站点是否仍然受到 CSRF 保护?如果没有,在这样的设置中如何防止 CSRF(React+Django)?
【问题讨论】:
API 如何对用户进行身份验证?这是 CSRF 的一个关键问题。 IE。 cookie 中是否有 Bearer 令牌或会话 ID 或其他内容? 【参考方案1】:是的,如果您允许在正确的源域中使用 CORS,那么在生产中使用它是安全的。例如,如果您使用 django-cors-headers
,请使用 CORS_ORIGIN_ALLOW_ALL=False 和一组域作为 CORS_ORIGIN_WHITELIST
。
正如answers to this question 解释的那样,如果使用SessionAuthentication
,DRF 将使用CSRF 令牌。但是,如果您使用其他身份验证机制(例如,令牌身份验证或 JWT),您也会受到客户端浏览器的保护,不允许来自不受信任来源的不安全请求,即不在您的 CORS_ORIGIN_WHITELIST
中。有关 CORS 与 CSRF 令牌的安全性,请参阅 answers to this question,以防止 CSRF。
【讨论】:
以上是关于React + Django 的最佳安全实践的主要内容,如果未能解决你的问题,请参考以下文章