仅使用nginx进行简单的CSRF保护

Ani*_*n J 8 architecture security xss csrf csrf-protection

我有一个nginx服务器提供纯HTML和JS文件.

然后,js代码从API服务器调用各种REST API到GET/POST数据.

如果nginx收到对/ api/location的请求,它会将请求转发给另一个处理所有API的服务器.这个api服务器是用Ruby on Rails构建的.

由于我的所有纯HTML页面都是由nginx直接提供的,因此在呈现时我无法进行服务器端会话.

我该怎么做才能防止CSRF攻击?

SLa*_*aks 5

CSRF令牌的要点是要求攻击者从您的域中读取值以发送请求。

因此,您可以在API中拥有单独的端点,该端点仅返回CSRF表单令牌。

由于同源策略,攻击者将无法读取令牌(出于无法从HTML源读取令牌的相同原因),因此您将很安全。
这具有需要额外的HTTP请求的缺点。

另外,请确保响应无效的Javascript,否则攻击者可以将其作为<script>标记运行,并使用原型和属性技巧读取值