首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么不在GET apis中加入CSRF保护?

在GET APIs中不加入CSRF保护的原因是因为GET请求应该是幂等的,即多次相同的GET请求对服务器的状态不应该有任何影响。CSRF(Cross-Site Request Forgery)攻击是指攻击者利用受害者在已登录的情况下,通过伪造请求来执行非法操作,而GET请求通常是用于获取资源或数据,不会对服务器状态进行修改,因此不太容易受到CSRF攻击。

CSRF保护通常是通过在请求中添加一个随机生成的token来实现的,服务器会验证该token是否合法。然而,在GET请求中添加CSRF保护可能会导致一些问题:

  1. 缓存问题:GET请求通常可以被缓存,如果每次请求都包含一个随机的token,那么该请求就不能被缓存,会降低性能。
  2. 链接共享问题:GET请求的参数通常可以通过链接进行分享,如果每次请求都包含一个token,那么链接就会包含一个唯一的token,这样就无法分享链接。
  3. 简化请求问题:GET请求通常可以通过简单的URL进行发送,如果每次请求都需要包含一个token,就会增加请求的复杂性。

综上所述,由于GET请求通常是幂等的,不会对服务器状态产生影响,因此在GET APIs中不加入CSRF保护是合理的。然而,对于涉及到修改服务器状态的请求,如POST、PUT、DELETE等,应该始终加入CSRF保护来防止CSRF攻击的发生。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

对于跨站伪造请求(CSRF)的理解和总结

进阶攻击 危险网站可以伪造一个表单并隐藏,并在自己网站的onload事件,触发这个表单的提交事件,就可以改GET攻击为POST攻击 CSRF攻击的对象与防范思路 我们要防范它,先要知道它的目标,然后设法保护这些目标...这就告诉我们,我们要保护的对象是那些可以直接产生数据改变的服务,而对于读取数据的服务,则不需要进行CSRF保护。...而保护的关键,是 在请求中放入黑客所不能伪造的信息 防范手段 最基本的手段:涉及敏感操作的请求改为POST请求 这个方法的确可以防范一些CSRF攻击,但是对于进阶攻击就无能为力了——POST请求一样可以伪造...(进一步加强法可以防范,或者验证链接是否是链到自己本站,是的就在后面添加token,如果是通向外网则不加 其他攻击方式如XSS攻击能拿到cookie和token,当然这不在本文的讨论范围之内。...优点: 这样解决了上种方法在请求中加入 token 的不便 通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,安全性较高 缺点: 局限性非常大:XMLHttpRequest请求通常用于

77730
  • 「面试常问」靠这几个浏览器安全知识顺利拿到了大厂offer(实践篇)

    浏览器内核和渲染进程各自职责 ❝安全沙箱的存在是为了保护客户端操作系统免受黑客攻击,但是阻止不了 XSS 和 CSRF。...) 跨站请求伪造(Cross-site request forgery)简称是 CSRF:是指黑客引诱用户打开黑客的网站,在黑客的网站,利用用户的登录状态发起的跨站请求。...自动发起 GET 请求」 黑客在他自己网站的页面上加载了一张图片,而链接地址是指向那个转账接口。...CSRF Token 其实就是服务器生成的随机字符串,然后将该字符串植入到返回的页面,通常是放到表单的隐藏输入框,这样能够很好的保护 CSRF Token 不被泄漏; <form action="https...Token 值一并提交; 服务器验证 <em>CSRF</em> Token 是否一致;从第三方网站发出的请求是无法获取用户页面<em>中</em>的 <em>CSRF</em> Token 值的。

    84820

    Django 2.1.7 模板 - CSRF 跨站请求伪造

    CSRF示意图如下: 如果想防止CSRF,首先是重要的信息传递都采用POST方式而不是GET方式,接下来就说POST请求的攻击方式以及在Django的避免。...8)Django项目中默认启用了csrf保护,现在先禁用,打开第一个项目中的mysite/settings.py文件,注释掉csrf中间件。...防止CSRF 1)Django提供了csrf中间件用于防止CSRF攻击,只需要在网站A的mysite/settings.py启用csrf中间件即可。...总结 重要信息如金额、积分等,采用POST方式传递 启用CSRF中间件,默认启用 在form表单post提交时加入标签csrf_token 保护原理 加入标签后,可以查看post.html的源代码,发现多了一个隐藏域...说明:当启用中间件并加入标签csrf_token后,会向客户端浏览器写入一条Cookie信息,这条信息的值与隐藏域input元素的value属性是一致的,提交到服务器后会先由csrf中间件进行验证,如果对比失败则返回

    1.9K20

    Django 2.1.7 模板 - CSRF 跨站请求伪造

    CSRF示意图如下: 如果想防止CSRF,首先是重要的信息传递都采用POST方式而不是GET方式,接下来就说POST请求的攻击方式以及在Django的避免。...8)Django项目中默认启用了csrf保护,现在先禁用,打开第一个项目中的mysite/settings.py文件,注释掉csrf中间件。...成功完成CSRF防护。...总结 重要信息如金额、积分等,采用POST方式传递 启用CSRF中间件,默认启用 在form表单post提交时加入标签csrf_token 保护原理 加入标签后,可以查看post.html的源代码,发现多了一个隐藏域...说明:当启用中间件并加入标签csrf_token后,会向客户端浏览器写入一条Cookie信息,这条信息的值与隐藏域input元素的value属性是一致的,提交到服务器后会先由csrf中间件进行验证,如果对比失败则返回

    69010

    .NET Core实战项目之CMS 第十四章 开发篇-防止跨站请求伪造(XSRFCSRF)攻击处理

    ASP.NET Core 包含管理身份验证、授权、数据保护、SSL 强制、应用机密、请求防伪保护及 CORS 管理等等安全方面的处理。...而我们这一章就来说道说道如何在ASP.NET Core处理“跨站请求伪造(XSRF/CSRF)攻击”的,希望对大家有所帮助 写在前面 上篇文章发出来后很多人就去GitHub上下载了源码,然后就来问我说为什么登录功能都没有啊...什么是跨站请求伪造(XSRF/CSRF) 在继续之前如果不给你讲一下什么是跨站请求伪造(XSRF/CSRF)的话可能你会很懵逼,我为什么要了解这个,不处理又有什么问题呢?...的保护。...同时给大家说了在Ajax处理的注意事项,希望能对大伙有所帮助!另外如果你有不同的看法欢迎留言,或者加入NET Core千人群637326624讨论。

    4K20

    08 | CSRFSSRF:为什么避免了XSS,还是“被发送”了一条微博?

    因此,我们只需要在这个接口中,加入一个黑客无法猜到的参数,就可以有效防止 CSRF 了。这就是 CSRF Token 的工作原理。 它的工作流程,我也总结了一下,如下图所示: ?...防护 CSRF 的原理也很简单,在这些请求加入一些黑客无法得到的参数信息即可,比如 CSRF Token 或者独立的支付密码等。掌握了这些内容,其实 CSRF 的知识基本上就差不多了。...比方说,当我们在百度搜索图片时,会涉及图片的跨域加载保护,百度不会直接在页面中加载图片的源地址,而是将地址通过 GET 参数提交到百度服务器,然后百度服务器请求到对应的图片,再返回到页面展示出来。...因为默认的请求方式是 GET,而发起 POST 请求,需要在发起 HTTP 请求的时候进行配置。很多安全漏洞不包含能够配置协议的地方。在上述百度图片的例子,黑客显然就只能发起 GET 请求。...如果没有遇到过,那你负责的 Web 或者应用,是否实现了 CSRF/SSRF 的保护逻辑呢?具体又是怎么实现的呢? 欢迎留言和我分享你的思考和疑惑,也欢迎你把文章分享给你的朋友。我们下一讲再见!

    57830

    十个书写Node.js REST API的最佳实践(上)

    原文:10 Best Practices for Writing Node.js REST APIs 我们会通过本文介绍下书写Node.js REST API的最佳实践,包括各个主题,像是命名路由、认证...这些操作HTTP已经有可以胜任的工具集:POST,PUT, GET, PATCH 或 DELETE。 作为最佳实践,你的API路由应该一直使用名词作为资源id。...涉及到用的资源相关的,路由机制也可以这样: POST /user 或者 PUT /user:/id 来创建新用户 GET /user 来获取列表的用户 GET /user/:id 来获得某一个用户 PATCH...例如,之前如果你在使用CSRF token时,把其命名为X-Csrf-Token是很普遍(但不标准)的做法。无论如何随着RFC 6648的发布,这些都已经被废弃了。...这一检查是为了保护嵌入机免受拒绝服务攻击,这一攻击里攻击者可以给我们发送一个没有结尾的header,这会导致嵌入机一直缓冲” 来自 Node.js HTTP 解析器 4 为你的Node.js REST

    2.3K00

    Spring Security 下

    1.在 启动类 或者 配置类 上加入注解 开启该注解 @EnableGlobalMethodSecurity(prePostEnabled = true) 2.Controller层加入方法注解 @GetMapping...CSRF 保护 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack“或者Session Riding,通常缩写为CSRF或XSRF...常见特性: 依靠用户标识危害网站 利用网站对用户表识的信任 欺骗用户的浏览器发送HTTP请求给目标站点 可以通过IMG标签会触发一个GET请求,可以利用它来实现CSRF攻击。...该种方式只能对 POST 、PUT 、 DELETE 、PATCH 发送方式进行保护 1.引入依赖 org.thymeleaf.extrasgroupId...: http://localhost:8081/csrf 输入账号密码,会成功进入 /csrf_success ; 并且页面显示 _csrf.token ?

    53930

    CSRF攻击原理介绍和利用

    为什么会这样呢? 答:原因是银行网站A违反了HTTP规范,使用GET请求更新资源。...CSRF之Flash机制 IE6/7,Flash发送网络请求均可以带上本地Cookies,但是IE8起Flash发起的网络请求不在发送本地Cookies了 Flash中发起请求的方式:URLRequest...---- 0x04 CSRF漏洞ByPass 描述:CSRF保护绕过我们在漏洞挖掘过程不难看出,很多时候我们会遇到各种CSRF的防护机制,随便一个网站都有token或者其他的防护机制。...校验 CSRF 为什么能够攻击成功?...之中,以HTTP请求参数的形式加入一个随机产生的 token交由服务端验证 开发者可以在HTTP请求以参数的形式加入一个随机产生的token(要求攻击者无法伪造),对于token错误的请求,则认为是

    1.2K40

    CSRF的原理与防范

    CSRF 攻击实例 CSRF 攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作。...CSRF 攻击的对象 在讨论如何抵御 CSRF 之前,先要明确 CSRF 攻击的对象,也就是要保护的对象。...所以,我们要保护的对象是那些可以直接产生数据改变的服务,而对于读取数据的服务,则不需要进行 CSRF保护。比如银行系统中转账的请求会直接改变账户的金额,会遭到 CSRF 攻击,需要保护。...可以在 HTTP 请求以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求...在 Java ,拦截器是由 Filter 来实现的。我们可以编写一个 Filter,并在 web.xml 对其进行配置,使其对于访问所有需要 CSRF 保护的资源的请求进行拦截。

    67020

    CSRF攻击原理介绍和利用

    为什么会这样呢? 答:原因是银行网站A违反了HTTP规范,使用GET请求更新资源。...CSRF之Flash机制 IE6/7,Flash发送网络请求均可以带上本地Cookies,但是IE8起Flash发起的网络请求不在发送本地Cookies了 Flash中发起请求的方式:URLRequest...0x04 CSRF漏洞ByPass 描述:CSRF保护绕过我们在漏洞挖掘过程不难看出,很多时候我们会遇到各种CSRF的防护机制,随便一个网站都有token或者其他的防护机制。...校验 CSRF 为什么能够攻击成功?...之中,以HTTP请求参数的形式加入一个随机产生的 token交由服务端验证 开发者可以在HTTP请求以参数的形式加入一个随机产生的token(要求攻击者无法伪造),对于token错误的请求,则认为是

    4.4K21

    高版本 jenkins 关闭跨站请求伪造保护CSRF

    背景 根据官网描述,Jenkins版本自2.204.6以来的重大变更有:删除禁用 CSRF 保护的功能。...从较旧版本的 Jenkins 升级的实例将启用 CSRF 保护和设置默认的发行者,如果之前被禁用。...方案 老版本Jenkins的CSRF保护功能只需要在 系统管理 > 全局安全配置 便可进行打开或者关闭。...让人头疼的是较高版本的Jenkins竟然在管理页面关闭不了CSRF 在Jenkins启动前加入相关取消保护的参数配置后启动Jenkins,即可关闭CSRF, 配置内容如下: -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION...[在这里插入图片描述] 验证是否关闭成功 如果在设置-全局安全设置里面,如下图展示,则说明就关闭了CSRF [在这里插入图片描述]

    2.2K30

    微信支付一面(C++后台)

    (2)加入到红黑树的结点为红色结点。...从规则4知道,当前红黑树从根结点到每个叶子结点的黑色结点数量是一样的,此时假如新的黑色结点的话,必然破坏规则,但加入红色结点却不一定,除非其父结点就是红色结点,因此加入红色结点,破坏规则的可能性小一些...7.网络安全 XSS 漏洞你知道是如何防护的吗? 面试被问及网络安全,虽然不是搞安全的,但是并不意外,因为安全问题无处不在,虽然不是从事安全工作,但是常见的安全知识还是需要知道的。...8.网络安全 CSRF 漏洞又是如何防护的呢?...可以在 HTTP 请求以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求

    1.7K11

    Python Web - Flask笔记8

    csrf_token,在cookie中加入一个相同值的csrf_token字符串,以后给服务器发送请求的时候,必须在body以及cookie携带csrf_token,服务器只有检测到cookie的...csrf_token和bodycsrf_token相同时,才认为这个请求是正常的。...="{{ csrf_token() }}" > AJAX的CSRF保护 在AJAX要使用csrf保护,则必须手动添加x-CSRFToken到Header,但是csrf还是需要在模板渲染,Flask...print(url_for('my_list')) 为什么上下文需要放在栈: 应用上下文:Flask底层是基于werkzeug,werkzeug是可以包含多个app的,所以这时候用一个栈来保存。...常用的钩子函数: 在Flask钩子函数是使用特定的装饰器装饰的函数。为什么叫做钩子函数呢,是因为钩子函数可以在正常执行的代码,插入一段自己想要执行的代码。那么这种函数就叫做钩子函数。

    1.3K10
    领券