当前位置: 首页 > 知识库问答 >
问题:

CSRF对于仅使用JSON的后端REST应用程序是强制性的吗?

伏默
2023-03-14

许多资源声称(来源1)(来源2)

对于RESTful Web服务公开的资源,确保任何PUT、POST和DELETE请求都受到跨站点请求伪造的保护非常重要。

CSRF对所有对网络安全关注程度最低的应用程序都是强制性的

然而,Spring Security文档称:

对正常用户可以通过浏览器处理的任何请求使用CSRF保护。如果只创建非浏览器客户端使用的服务,则可能需要禁用CSRF保护。

那么,对一个应用程序禁用CSRF可以吗?

  • 仅公开REST API

共有2个答案

微生翼
2023-03-14

这很容易解释:

CSRF令牌是基于Http会话生成的。如果您的应用编程接口持有超文本传输协议会话,您应该使用CSRF令牌来保护它,但是大多数REST服务被设计成无状态的,在这种情况下,您不能/不应该/不会使用CSRF令牌。

陈欣荣
2023-03-14

这取决于API的客户端。CSRF攻击基于这样一个事实,即客户端会自动通过HTTP请求发送请求URL的cookie(授权)。如果你的客户端没有这样做(通常浏览器会自动这么做),你应该没问题。

原因是:如果您的API使用者未通过cookie(浏览器自动存储的cookie)在您的应用程序中进行身份验证/授权,则攻击者无法使用任何其他网页进行成功的CSRF攻击(使用浏览器中的API cookie从其他网页发送HTTP请求)。

换句话说,我无法想象API客户端的编写方式能让它向您的API发送请求,存储cookie(您的身份验证),还能以某种方式向您显示一些“愚蠢”用户交互的内容——用来自之前API请求的cookie(您的身份验证)向您的API发送请求。

 类似资料:
  • 然而,如果我省略了调用,我的应用程序似乎运行良好,没有任何明显的错误。这个方法是否只是为了加快速度,预计一个可能很长的初始化,这样它就不会在第一次使用时减慢你的速度(急切的和懒惰的初始化)?或者,如果我没有正确初始化ThreeTenABP,是否会冒得到错误结果的风险?

  • 我试图为我的项目创建一个登录系统。我想创建这样的过程:填完表单后单击register按钮,将带有URL的数据发送到API,并返回以下json字符串: 结果字符串只返回OK或No。现在我想在结果返回'OK'时在loginErrorMsg中显示'Message'。如果结果返回Ok,则应该启动LoginActivity。但是我在解析JSON/GSON时丢失了一些东西。

  • 我在Heroku上成功运行了一个节点应用程序。我已经购买了加急SSL证书,一切正常。我去https...并获得一个完整的“绿色条”,证明该站点是通过https提供服务的 但是,非 SSL 标准 http 仍然可用。如何强制应用通过 https 提供服务?谢谢

  • 问题内容: 我们正在寻找构建正在创建的应用程序前端的选项,并正在尝试评估一种对我们有用的工具,并为我们提供前进的最佳平台。 这是一个Node.js项目。我们最初的计划是使用Express并沿这条路线走,但是我们决定在开始此阶段之前,最好回顾一下那里的内容。我们的应用程序有几个我们认为不适合单页模型的领域,因为它们是从应用程序的角度关联的,而不是从一个角度来看的。 我们已经看到了一些可用于构建客户端

  • 问题内容: 我在检索与其他对象有许多关系的对象的多个实例时遇到性能问题。我正在将Spring和Hibernate的JPA实现与MySQL配合使用。问题是执行JPA查询时,Hibernate不会自动联接到其他表。这将导致n * r + 1个SQL查询,其中n是要检索的对象数,r是关系数。 例如,某人住在某个地址,有很多爱好,并且访问过许多国家: 当我执行JPA查询以获取所有名为Bob的个人时,数据库