首页 > 其他分享 >CSRF跨站请求伪造和防御方法

CSRF跨站请求伪造和防御方法

时间:2023-08-25 16:44:33浏览次数:37  
标签:跨站 HTTP 请求 验证 token Referer CSRF 伪造

csrf(Cross-site request forgery)通常被缩写为CSRF或XSRF,是一种对网站的恶意利用。它与XSS非常不同,XSS利用站点内的信任用户,而CSRF通过伪装来自受信任用户的请求来利用信任的网站。
# 简单来说攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的

#防护手段
1.只使用JSON API
使用JavaScript发起AJAX请求是限制跨域的,并不能通过简单的 表单来发送JSON,所以,通过只接收JSON可以很大可能避免CSRF攻击。

2.验证HTTP Referer字段
	根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,因此,要防御 CSRF 攻击,网站WebA只需要对于每一个转账请求验证其 Referer 值,如果是以网站WebA的网址开头的域名,则说明该请求是来自WebA自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。
    
3.在请求地址中添加token验证
CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对。

4.在HTTP头中自定义属性并验证
自定义属性的方法也是使用token并进行验证,和前一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了前一种方法在请求中加入token的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不用担心token会通过Referer泄露到其他网站。

标签:跨站,HTTP,请求,验证,token,Referer,CSRF,伪造
From: https://www.cnblogs.com/yedayangboke/p/17657350.html

相关文章

  • 【8月摸鱼计划】初识CSRF
    CSRF(Cross-siterequestforgery)跨站请求伪造,也被称为"OneClickAttack"或者SessionRiding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。与XSS攻......
  • 1分钟看懂:什么是跨站脚本攻击?
    跨站脚本攻击,又叫XSS攻击。是指:攻击者将恶意脚本代码嵌入到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,入侵用户账户,窃取用户信息或执行更具危险性的侵犯行为。XSS攻击有多种攻击类型,其中最为常见、危害最大的就是存储型XSS攻击。举个栗子......
  • CSRF漏洞挖掘
    csrf漏洞出现的原因:网站接口被第三方网站调用时cookie被直接利用了如何确定一个网站是否具有csrf漏洞第三方网站调用敏感接口成功,则具有漏洞。如何操作BP可以对某些接口进行cdrf漏洞检测 可以生成一个html文件->poc,在浏览器中访问就可以确定是否包含CSRFTester也可以生......
  • - csrf跨站请求的相关装饰器 - Auth模块的使用 - 凡是跟登录、注册、修改密码、注销
    csrf跨站请求的相关装饰器 Django中有一个中间件对csrf跨站做了验证,我只要把csrf的这个中间件打开,意味着所有的方法都要被验证在所有的视图函数中:只有几个视图函数做验证只有几个函数不做验证csrf_protect:哪个视图函数加了这个装饰器,这个函数就会做验证 csrf_exemp......
  • Django之CBV装饰器、中间件、csrf跨站请求
    一、CBV装饰器要求:访问CBV函数视图需要先登录1、含cookie的装饰器#登录认证装饰器cookie版deflogin_auth(func):definner(request,*args,**kwargs):ifrequest.COOKIES.get('username'):returnfunc(request,*args,**kwargs)else......
  • - Django操作cookie - Django操作session - CBV添加装饰器 - 中间件 - csrf跨站请求
    Django操作cookie设置cookie:对象点set_cookie()获取cookie:request点COOKIE点getset_cookie('key','value',max_age=5,expires=5)参数:KEY:k值value:V值max_age=None,超时时间cookie需要延续的时间(以秒为单位)如果参数是\None``,这个cookie会延续到浏览器关闭为止expires=No......
  • Django操作cookie,Django操作session,Django中的Session配置,CBV添加装饰器,中间件,cs
    Django操作cookiecookie参数:●key,键●value=’’,值●max_age=None,超时时间cookie需要延续的时间(以秒为单位)如果参数是\None``,这个cookie会延续到浏览器关闭为止expires=None,超时时间(IErequiresexpires,sosetitifhasn’tbeenalready.)path=’/‘,Co......
  • csrf
    到csrf了,做了道dvwa的,感觉也没做明白,上网看了半天到底啥是csrf感觉它跟xss很像,但是又不太一样xss是通过js把cookie弹到了我们的网站上从而获取用户cookie,而csrf利用了用户的cookie但是并没有直接获取到,而是通过修改更改信息的链接,在对方点击链接后对其信息进行了修改pikachu中......
  • 邮件钓鱼之sendcloud邮件伪造
    0x00整体流程找一个未被加入到黑名单的可提供SMTP协议发件的网站,如smtp2go,sendcloud安装邮件伪造工具swaks制作钓鱼邮件内容eml文件及多种情况发送伪造邮件0x01邮件服务sendcloud本文以sendcloud为例,地址:https://www.sendcloud.net首先进行注册,注册后找到我们需要的东......
  • 构造并发送Beacon帧以伪造任意WiFi热点
    请想象一下这样的情景:你可以任意伪造很多个WiFi热点,这个技术只能在linux上使用,而且对无线网卡也有一定的挑剔,具体的下面会讲~阶段一:基本原理首先需要搞清楚的是,手机、电脑等支持WiFi的设备,是如何得知周围无线热点的存在的?无线热点(通常就是无线路由器)会周期性地向外发......