Cross-Site-Request-Forgery

2024-01-08 13:04
文章标签 request cross site forgery

本文主要是介绍Cross-Site-Request-Forgery,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、CSRF是什么?

CSRF(Cross-site request forgery)是一种网络攻击方法,中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

二、CSRF可以做什么?

攻击者利用用户已经认证的身份在第三方站点上进行恶意操作。攻击者诱使用户访问一个包含恶意请求的网页,当用户浏览该网页时,该请求会利用用户在目标网站上的认证信息(如Cookies)来伪装用户进行操作。例如:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。

例如,我在自己的文章里放一段代码,接口假设是关注的GET接口

<img style="width:0;" src="https://mp-action.csdn.net/interact/wrapper/pc/fans/v1/api/follow?username=m0_37820751   />

那么如果你登录了这个平台,访问这篇文章就会自动关注我。

三、CSRF漏洞现状

CSRF这种攻击方式早在2000年就被国外的安全人员提出。然而,在国内直到2006年才开始引起关注。在2008年,国内外多个大型社区和互动网站相继曝出了CSRF漏洞,其中包括纽约时报(NYTimes.com)、Metafilter(一个大型的博客网站)、YouTube和百度HI等。尽管如此,现在仍有许多网站对CSRF攻击没有足够的防范措施,这也导致安全领域将CSRF称为“沉睡的巨人”。

四、CSRF的原理

在这里插入图片描述

CSRF攻击的实施通常需要受害者依次完成下面两个步骤:

  • 登录受信任网站A,并在本地生成Cookie
  • 在不登出A的情况下,访问危险网站B

看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:

  • 你可能登录一个网站后,在另一个标签页中继续访问其他网站。
  • 关闭浏览器并不会立即使本地的Cookie过期,你的上次会话可能仍然有效。尽管实际上关闭浏览器并不等同于退出登录/结束会话,但大多数人错误地认为关闭浏览器就代表退出登录/结束会话了。
  • 攻击网站可能是一个存在其他漏洞的受信任网站,这使得攻击更具欺骗性

五、解决CSRF攻击

  1. 验证HTTP Referer字段:服务器可以验证请求的HTTP头部“Referer”字段,以确认请求是否来自于信任的域名。
  2. 使用Anti-CSRF Token:服务器生成一个唯一的token,并在客户端的会话中存储这个token。每一次用户提交请求时都需要携带这个token,服务器接收到请求后验证token的有效性。
  3. 双重Cookies验证:服务器检查请求中的自定义Cookies字段,与请求本身携带的Cookies进行对比,如果不匹配,则拒绝请求。
  4. 自定义请求头:利用浏览器的同源策略,普通网站无法读取或设置自定义的HTTP请求头,因此可以要求所有敏感操作必须通过含有自定义请求头的Ajax请求提交。
  5. 利用SameSite Cookie属性:设置Cookies的SameSite属性,可以限制Cookies不随跨站请求发送,减少CSRF攻击的风险。

这篇关于Cross-Site-Request-Forgery的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/583543

相关文章

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Vue3上传图片报错:Current request is not a multipart request

当你看到错误 "Current request is not a multipart request" 时,这通常意味着你的服务器或后端代码期望接收一个 multipart/form-data 类型的请求,但实际上并没有收到这样的请求。在使用 <el-upload> 组件时,如果你已经设置了 http-request 属性来自定义上传行为,并且遇到了这个错误,可能是因为你在发送请求时没有正确地设置

使用http-request 属性替代action绑定上传URL

在 Element UI 的 <el-upload> 组件中,如果你需要为上传的 HTTP 请求添加自定义的请求头(例如,为了通过身份验证或满足服务器端的特定要求),你不能直接在 <el-upload> 组件的属性中设置这些请求头。但是,你可以通过 http-request 属性来自定义上传的行为,包括设置请求头。 http-request 属性允许你完全控制上传的行为,包括如何构建请求、发送请

code: 400, msg: Required request body is missing 错误解决

引起这个错误的原因是,请求参数按照get方式给。 应该给json字符串才对 补充: 1. @RequestBody String resource 加@RequestBody必须给json字符串,否则会报错400,记如标题错误。 不加这个的进行请求的话,其实post和get就没有什么区别了。 2. List<String> indexCodes=(List<String>)json.

FORM的ENCTYPE=multipart/form-data 时request.getParameter()值为null问题的解决

此情况发生于前台表单传送至后台java servlet处理: 问题:当Form需要FileUpload上传文件同时上传表单其他控件数据时,由于设置了ENCTYPE=”multipart/form-data” 属性,后台request.getParameter()获取的值为null 上传文件的参考代码:http://www.runoob.com/jsp/jsp-file-uploading.ht

兔子-(PHP 5.3 and above) Please set 'request_order' ini value to include C,G and P (recommended: 'CGP'

由于在PHP最新的版本中增加了一个配置项目“request_order”,默认值为“GP”,这个存在一定的安全风险。这里我们建议用户将配置更改为“CGP” 可以在php的安装目录下找到php.ini配置目录,找到下面选项: request_order = "GP"  更改为 request_order = "CGP"   重启服务器后即可。 此

【python 爬虫】python如何以request payload形式发送post请求

普通的http的post请求的请求content-type类型是:Content-Type:application/x-www-form-urlencoded, 而另外一种形式request payload,其Content-Type为application/json import jsonurl = 'https://api.github.com/some/endpoint'payload

【python requests警告】python3.x requests库取消ssl验证,InsecureRequestWarning: Unverified HTTPS request is be

警告信息: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warni

SpringMVC request生命周期

第一步:用户发起一个请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求HanderMapping查找Handler,可以根据xml配置文件,注解进行查找。 第三步:处理器映射器HandlerMapping向前端控制器返回Handler 第四步:前端控制器调用处理器适配器去执行Handler 第五步:处理器适配器去执行Handler 第六步:Handler执行完

经验笔记:跨站脚本攻击(Cross-Site Scripting,简称XSS)

跨站脚本攻击(Cross-Site Scripting,简称XSS)经验笔记 跨站脚本攻击(XSS:Cross-Site Scripting)是一种常见的Web应用程序安全漏洞,它允许攻击者将恶意脚本注入到看起来来自可信网站的网页上。当其他用户浏览该页面时,嵌入的脚本就会被执行,从而可能对用户的数据安全构成威胁。XSS攻击通常发生在Web应用程序未能充分过滤用户提交的数据时,导致恶意脚本得以传递