疑似跨站请求伪造,访问已禁止怎么解决_跨网站请求伪造攻击

hacker|
293

请问常见的 *** 攻击技术有哪些

常见的 *** 攻击技术有:

1,跨站脚本攻击。

跨站脚本攻击可以将代码注入到用户浏览的网页上,这种代码包括HTML和JavaScript。

2,跨站请求伪造攻击。

跨站请求伪造攻击是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。

3,SQL注入攻击。

这种攻击的原理是服务器上的数据库运行非法的SQL语句,主要通过拼接来完成。

更多关于常见的 *** 攻击技术有哪些,进入:查看更多内容

CSRF(跨域请求伪造)

跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

你这可以这么理解CSRF攻击: 攻击者盗用了你的身份,以你的名义发送恶意请求。 CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

登录受信任网站A,并在本地生成Cookie。

在不登出A的情况下,访问危险网站B。

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

1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。

2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。

3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

1.提交验证码

在表单中增加一个随机的数字或字母验证码,通过强制用户和应用进行交互,来有效地遏制CSRF攻击。

2.Referer Check(referer:标志请求来源)

检查如果是非正常页面过来的请求,则极有可能是CSRF攻击。

3.token验证

在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有

token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

token需要足够随机

敏感的操作应该使用POST,而不是GET,以form表单的形式提交,可以避免token泄露。

4. 在 HTTP 头中自定义属性并验证

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

csrf过滤器:

referer检查如果是非正常页面过来的请求,则极有可能是CSRF攻击。

自定义请求头“supporter”,根据 *** 、邮箱、日期、特殊字符、base64前台加密,后台过滤器解析。

跨站请求伪造(又被称为 CSRF 或者 XSRF ),它源自一个域网站向另一个域网站发起请求的简单功能。攻击者通过一些技术手段欺骗用户使用浏览器去访问一个自己曾经认证过的网站并执行一些敏感操作(如转账)。

一个域网站向另一个域的网站发起请求的方式有很多,例如点击一个超链接、加载静态资源、提交表单以及直接发起 ajax 请求等。如:

如果用户之前在 *** 认证过,即浏览器保持有效的 cookie ,这些请求也会携带相应的 cookie ,而用户可能并不知情。

Same-Site Cookies 出现以前我们并没有一种简单而有效的方式去阻止 CSRF 攻击,其中一种方式是通过检查 origin 和 referer 来校验,缺点是依赖浏览器发送正确的字段,而这并不总是准确有效的;另一种方式则是通过给表单添加随机 token 的方式来校验,但是部署比较麻烦。

Same-Site Cookies 的出现就是为了解决这个问题,它可以完全有效的阻止 CSRF 攻击。Same-Site Cookies 非常容易部署,只需要将你原来的设置 cookie 的地方,如下:

改为:

准确的说 SameSite 这个属性有两个可选值,分别是 Strict 和 Lax 。其中 Strict 为严格模式,另一个域发起的任何请求都不会携带该类型的 cookie,能够完美的阻止 CSRF 攻击,但是也可能带来了少许不便之处,例如通过一个导航网站的超链接打开另一个域的网页会因为没有携带 cookie 而导致没有登录等问题。因此 Lax 相对于 Strict 模式来说,放宽了一些。简单来说就是,用 「安全」的 HTTP *** (GET、HEAD、OPTIONS 和 TRACE)改变了当前页面或者打开了新页面 时,可以携带该类型的 cookie。具体见下表:

现在 *** 域下设置传统的 cookie,如下:

现在 b.com 的网页加载 *** 的 css 文件时会携带该 cookie,如下:

b.com 的网页中的表单向 *** 中的接口提交数据时也会携带该 cookie,如下:

现在将该 cookie 改为 SameSite = Strict,如下:

现在 b.com 的网页加载 *** 的 css 文件时不会再携带该 cookie,如下:

b.com 的网页中的表单向 *** 中的接口提交数据时也不会再携带该 cookie,如下:

b.com 的网页中通过点击超链接打开的 *** 的网页也不会携带该 cookie,如下:

现在将该 cookie 改为 SameSite = Strict,如下:

SameSite = Lax 时表现与 SameSite = Strict 时完全一致,除了通过点击超链接打开的 *** 的网页时会携带该 cookie,如下:

什么是 CSRF 攻击,如何避免

CSRF攻击,全称为“Cross-site request forgery”,中文名为跨站请求伪造,也被称为“One Click Attack”或者“Session Riding”,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。

XSS主要是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求,来利用受信任的网站。与XSS相比,CSRF更具危险性。

如何防御CSRF攻击?

1、重要数据交互采用POST进行接收,当然POST也不是万能的,伪造一个form表单即可破解。

2、使用验证码,只要是涉及到数据交互就先进行验证码验证,这个 *** 可以完全解决CSRF。

3、出于用户体验考虑,网站不能给所有的操作都加上验证码,因此验证码只能作为一种辅助手段,不能作为主要解决方案。

4、验证HTTP Referer字段,该字段记录了此次HTTP请求的来源地址,最常见的应用是图片防盗链。

5、为每个表单添加令牌token并验证。

CSRF跨站请求伪造的安全防护

大家好,我是中恒。本文主要介绍和总结了CSRF跨站请求伪造的基本原理和主要防范措施,工作中有用到的朋友不妨收藏转发一下,以备您参考。

CSRF跨站点请求伪造(Cross—Site Request Forgery),跟类似XSS攻击一样,存在着巨大的安全隐患,你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却偷偷完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、转账等。

假如:Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。攻击大概过程如下:

目前,我们工作中常用于防御CSRF攻击主要有三种策略:

一、验证 HTTP Referer字段

根据 HTTP 协议,在 HTTP 头 中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如需要访问 ;amount=1000000for=Mallory,用户必须先登陆 bank.example,然后通过点击页面上的按钮来触发转账事件。这时,该转账请求的Referer值就会是转账按钮所在的页面的 URL,通常是以bank.example 域名开头的地址。而如果黑客要对银行网站实施 CSRF 攻击,他只能在他自己的网站构造请求,当用户通过黑客的网站发送请求到银行时,该请求的 Referer 是指向黑客自己的网站。因此,要防御 CSRF 攻击,银行网站只需要对于每一个转账请求验证其 Referer 值,如果是以 bank.example 开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。

这种 *** 的显而易见的好处就是简单易行,网站的普通开发人员不需要操心 CSRF 的漏洞,只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。特别是对于当前现有的系统,不需要改变当前系统的任何已有代码和逻辑,没有风险,非常便捷。

然而,这种 *** 并非万无一失。Referer 的值是由浏览器提供的,虽然 HTTP 协议上有明确的要求,但是每个浏览器对于 Referer 的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。使用验证 Referer 值的 *** ,就是把安全性都依赖于第三方(即浏览器)来保障,从理论上来讲,这样并不安全。事实上,对于某些浏览器,比如 IE6 或 FF2,目前已经有一些 *** 可以篡改 Referer 值。如果 bank.example 网站支持IE6浏览器,黑客完全可以把用户浏览器的 Referer 值设为以 bank.example 域名开头的地址,这样就可以通过验证,从而进行 CSRF 攻击。

即便是使用最新的浏览器,黑客无法篡改 Referer 值,这种 *** 仍然有问题。因为 Referer 值会记录下用户的访问来源,有些用户认为这样会侵犯到他们自己的隐私权,特别是有些组织担心 Referer的值 会把组织内网中的某些信息泄露到外网中。因此,用户自己可以设置浏览器使其在发送请求时不再提供 Referer。当他们正常访问银行网站时,网站会因为请求没有 Referer 值而认为是 CSRF 攻击,拒绝合法用户的访问。

二、在请求地址中添加token并验证

CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

这种 *** 要比检查 Referer 要安全一些,token可以在用户登陆后产生并放于 session 之中,然后在每次请求时把token从 session 中拿出,与请求中的 token 进行比对,但这种 *** 的难点在于如何把token以参数的形式加入请求。对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 。而对于 POST 请求来说,要在 form 的最后加上 ,这样就把 token 以参数的形式加入请求了。但是,在一个网站中,可以接受请求的地方非常多,要对于每一个请求都加上 token 是很麻烦的,并且很容易漏掉,通常使用的 *** 就是在每次页面加载时,使用 javascript 遍历整个 dom 树,对于 dom 中所有的 a 和 form 标签后加入 token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的 html 代码,这种 *** 就没有作用,还需要程序员在编码时手动添加 token。

该 *** 还有一个缺点是难以保证 token 本身的安全。特别是在一些论坛之类支持用户自己发表内容的网站,黑客可以在上面发布自己个人网站的地址。由于系统也会在这个地址后面加上 token,黑客可以在自己的网站上得到这个 token,并马上就可以发动 CSRF 攻击。为了避免这一点,系统可以在添加 token 的时候增加一个判断,如果这个链接是链到自己本站的,就在后面添加 token,如果是通向外网则不加。不过,即使这个 csrftoken 不以参数的形式附加在请求之中,黑客的网站也同样可以通过 Referer 来得到这个token值以发动 CSRF 攻击。这也是一些用户喜欢手动关闭浏览器 Referer 功能的原因。

三、在HTTP头中自定义属性并验证

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

然而这种 *** 的局限性非常大。XMLHttpRequest 请求通常用于 Ajax *** 中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起,而且通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便。另外,对于没有进行 CSRF防护的遗留系统来说,要采用这种 *** 来进行防护,要把所有请求都改为 XMLHttpRequest 请求,这样几乎是要重写整个网站,这代价无疑是不能接受的。

从springsecurity3.2.0版本开始就已经对csrf攻击提供防护。

版本升级配置

HTTP配置

前端配置

一般我们的项目中都有一个公用文件(如公用js文件),每个页面都会引用该文件,所以我们可以在通用文件中做类似如下配置:

$.ajaxSetup的意思就是给我们所有的ajax请求都加上这个header和token,或者放到form表单中:

注意, _csrf这个要与spring security的配置文件中的配置相匹配,默认为_csrf。

CSRF(跨站请求伪造)

2021-11-24

跨站点请求伪造(Cross—Site Request Forgery),伪装来自受信任用户的请求来利用受信任的网站。简单来说CSRF就是获取凭证伪造身份去做事。

详细点说:假如A网站中存在CSRF漏洞,攻击者构造一个利用的POC,发送给受害者(在浏览器中处于登陆状态),让受害者点击POC,导致受害者在A网站上的的资料被修改或者钱财被转移。

所有用户进行操作的位置都可能存在CSRF,修改信息、密码、头像。

1.利用浏览器中缓存的cookie

2.没有一次型的token验证

1.修改受害者的一些资料、转账或者改密码

2.如果获取到应用程序中的管理员cookie,攻击者完全可以控制应用的所有数据和功能

1.资源包含

资源包含是在大多数介绍CSRF概念的演示或基础课程中可能看到的类型。这种类型归结为控制HTML标签(例如image、audio、video、object、script等)所包含的资源的攻击者。如果攻击者能够影响URL被加载的话,包含远程资源的任何标签都可以完成攻击。

2.基于表单

通常在正确使用安全的请求方式时看到。攻击者创建一个想要受害者提交的表单; 其包含一个JavaScript片段,强制受害者的浏览器提交。

3.XMLHttpRequest

基于XHR的CSRF通常由于SOP而以XSS有效载荷的形式出现。没有跨域资源共享策略 (Cross-Origin Resource Sharing, CORS),XHR仅限于攻击者托管自己的有效载荷的原始请求。

通过CSRF-token或者验证码来检测用户提交

验证 Referer/Content-Type

对于用户修改删除等操作更好都使用POST操作

避免全站通用的Cookie,严格设置Cookie的域

1.跨账户使用令牌

2.替换相同的长度

3.从请求中删除csrf token

4.解码CSRF token

5.通过HTML提取CSRF token

6.只使用token的静态部分

参考链接:

0条大神的评论

发表评论