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

在API中何时或何时不使用CSRF?

欧阳俊明
2023-03-14

Spring Security文档声明

18.3何时使用CSRF保护

什么时候应该使用CSRF保护?我们的建议是,对正常用户可以通过浏览器处理的任何请求使用CSRF保护。如果只创建非浏览器客户端使用的服务,则可能需要禁用CSRF保护。

但很明显,当您没有加密通信(即没有SSL)时,它允许一些场景。我想知道更多关于在什么情况下你仍然希望使用CSRF保护。

共有1个答案

柳项明
2023-03-14

本质上,CSRF围绕着恶意网站、网络钓鱼电子邮件、第三方程序或类似性质的东西,试图让受害者的网络浏览器(即Chrome)做他们不想做的事情。

例如,你玩一个名为X的电子游戏,作为玩家,你可以拥有一定数量的货币,可以与其他玩家进行买卖和交易。

然后,您会收到一封很酷的电子邮件,说您可以通过单击此链接赢得大量黄金。用户单击该链接,并在不知情的情况下突然将其所有物品转移到恶意用户的帐户,所有这些都是通过一个简单的HTTP请求。:-(

现在,在许多情况下,web应用程序利用:

  • 反CSRF令牌
  • 验证码
  • 重新认证(将用户注销)

然而,对于REST服务,情况会略有变化。您需要使用自定义请求标头,例如-

X-request-With

原因如下(引用OWASP的文章,我强烈推荐阅读)-

“这种防御依赖于主域同源策略(SOP)限制,即只有JavaScript才能用于添加自定义标头,并且只能在其源内。默认情况下,浏览器不允许JavaScript发出跨源请求。”

我列出了一些你可能想浏览的资源。CSRF是一个非常有趣的漏洞,它将安全缺陷与社会工程联系起来。希望你会发现它们很有用。

  • Acunetix CSRF示例和保护-http://www.acunetix.com/websitesecurity/csrf-attacks/
 类似资料:
  • 问题内容: 我正在为程序包设计一个公共接口(API)。我想知道,我应该一般使用代替。(我主要是在谈论公共接口)。 这样做有什么弊端吗?这被认为是一种好习惯吗? 将其用于类似标识符的目的(将值与基于散列的容器中的集合进行匹配时)如何处理? 问题答案: 在通用库中很少使用。通常在主要用例是字符串处理(操作,解析等)时使用。 一般来说 ,你可以做一个东西,你可以用做(平凡的,因为你可以每次转换成)。但是

  • 问题内容: 我已经开始学习Java的并发和线程。我知道同步的基础知识(即它的作用)。从概念上讲,我知道它提供了对Java中具有多个线程的共享资源的互斥访问。但是,当面对下面的示例时,让我感到困惑的是同步它是否是一个好主意。我知道代码的关键部分应该同步,并且不应过度使用此关键字,否则会影响性能。 问题答案: 假设每个线程通过 不同的数组, 则不需要同步,因为其余变量是局部的。 相反,如果您触发所有调

  • 问题内容: 在什么情况下,枚举比保证唯一元素的Collection(例如,java.util.Set的实现者)更合适? (这是我上一个问题的跟进) 问题答案: 基本上是在编译时就知道的一组定义明确的固定值。 您可以很容易地将枚举用作集合(通过EnumSet),它允许您定义行为,按名称引用元素,打开元素等。

  • 问题内容: 什么时候应该使用角度函数,什么时候应该使用angularjs指令?对我来说,他们都可以做同样的事情。 两者之间是否有差异或使用方式? 问题答案: 显然,它们并不相同。一种仅在控制器中使用;另一种仅用于控制器。另一个是对输入元素的指令。 但是即使在它们的应用中,它们也有所不同。 使用监视的表达式时,将在每个摘要循环上对其进行评估,如果有更改,则将调用处理程序。 使用,响应事件,显式调用处

  • 我一直在试图找到一个答案,如果在何时/何时不使用上面的向REST调用传递信息的方法方面有某种标准的话。 我到处都在找,但每一个帖子都只讨论列出的方法中的2种,或者3种,而不是全部4种之间的区别。

  • 我正在使用一个独立的星火集群,一个主和两个工人。我真的不明白如何明智地使用SPARK_CLASSPATH或sparkcontext.addjar。我两个都试过了,看起来addJar并不像我以前认为的那样起作用。 在我的例子中,我尝试在闭包中或外部使用一些joda-time函数。如果我将SPARK_CLASSPATH设置为joda-time jar的路径,那么一切正常。但如果我删除SPARK_CLA