【发布时间】:2014-08-18 21:12:48
【问题描述】:
我需要将 CSRF 预防集成到我们现有的 REST 服务中。
我们创建了许多剩余资源并发布了其详细信息供其他开发人员使用。组织中的任何人都可以使用它。我无法控制他如何使用它,他使用的形式或 httpclient。我不知道到目前为止谁在使用它,我无法更改所有客户。因此,我无法向表单添加隐藏的文本字段/标记,因为我无权访问客户端。另外,我不能使用双重身份验证或验证码,因为它不适用于 httpclient 实现。有没有其他方法可以防止对 CSRF 滥用 REST 服务。
【问题讨论】:
-
由于通过 REST 您必须随每个请求发送凭据,因此您不必担心 CSRF。如果您创建了基于服务器端会话的解决方案,那么这不是 REST……您必须告诉我们更多关于您的解决方案的信息。您也许可以过滤 IP 地址。
-
您的 REST API 是否由 Web 客户端在客户端使用?请在您的问题中添加更多详细信息。
-
@inf3rno - 感谢您的回复。我的系统并不是真正的无状态。你看,我有一个名为 Login 的 REST 接口,它为每个用户创建并返回一个会话。因此,在调用 Login REST Call 之后,如果进行了任何其他关键 REST(CRUD) 调用,则会话信息将传递回服务器并识别用户。但是网页设计师/程序员可以自行决定使用此登录和其他 REST 调用,我无权访问他们的表单/代码。
-
@SilverlightFox - 感谢您的回复。我不知道 REST 究竟是如何被使用的,但我相信有一个在 .net 中创建的客户端(由其他团队),它使用 REST 协议在服务器上执行 CRUD 操作。因此,我们只需公开服务,其他团队可以拥有 Web 表单或一些可以访问和利用这些服务的代码。
-
@devray:您是否添加了 CORS 标头以允许不同域上的浏览器客户端联系您的服务?如果不是,那么它似乎没有被浏览器直接使用,因此您不需要 CSRF 预防。