我目前正在开发一个使用Django API服务器和运行React的NodeJS服务器的项目。在开发中,我们在端口8000上运行Django,在端口8080上运行NodeJS,目前React负责呈现页面并与Django API交互,后者为React提供数据。为了让React调用Django API,我们在Django中启用了CORS,因为它们位于不同的端口上。
我的问题如下:
允许生产所有CORS是否安全?
如果没有使用Django的模板系统,默认情况下该网站是否仍然受到CSRF保护?如果没有,如何在这样的设置中防止CSRF(React + Django)?
答案 0 :(得分:0)
是的,如果允许CORS用于正确的原始域,则在生产中使用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。