温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

WEB安全之CSRF&ClickJacking

发布时间:2020-07-23 19:00:47 来源:网络 阅读:662 作者:TsingCall 栏目:安全技术

一、CSRF

CSRF的全名是Cross Site Request Forgery,即跨站点请求伪站。

1、浏览器的cookie策略

     很多***者伪造的请求之所以能在在服务器验证通过,是因为用户的浏览器成功发送了cookie的缘故。

     浏览器所持有的cookie分为两种:一种是"Session Cookie",又称"临时Cookie";另一种是"Third-party Cookie",也称"本地Cookie"。

     两者的区别在于Third-party Cookie是服务器在Set-Cookie时指定了Expire时间,只有到了Expire时间后Cookie才会失效,所以这种Cookie会保存在本地;而Session-Cookie则没有指定Expire时间,所以浏览器关闭后,Session Cookie就失效了。

     浏览器网站的过程中,若是一个网站设置了Session Cookie,那么在浏览器进程中的生命周期内,即使浏览器新打开了Tab页,Session Cookie也都是有效的。Session Cookie保存在浏览器进程的内存空间中,而Third-party Cookie则保存在本地。

     如果浏览器从一个域的页面中,要加载另一个域的资源,由于安全原因,某些浏览器会阻止Third-party Cookie的发送。

     下面这个例子,演示了这一个过程:

      在http://www.a.com/cookie.php中,会给浏览器写入两个Cookie:一个是Session Cookie,另一位Third-party Cookie。

<?php

  header("Set-Cookie: cookie1=123;");

  header("Set-Cookie: cookie2=456;expires=Thu,01-Jan-2030 00:00:01 GMT;",false);

?>

      访问这个页面,发现浏览器同时接收(Direction:Recived 第一次接收)了这两个Cookie。

      这时再打开一个新的浏览器Tab页,访问同一个域中的不同页面。因为新Tab页在同一个浏览器进程中,因此Session Cookie将被发送(Direction:Sent 第二次发送到服务器端)。

      此时在另外一个域中,有一个页面http://www.b.com/csrf-test.html,此页面构造了CSRF以访问www.a.com。

<iframe  src="http://www.a.com" > </iframe>

      这时却发现,只能发送Session Cookie(Cookie:123),而Third-party Cookie被禁止了。

      这是因为IE因为安全考虑,禁止了浏览器在<img>、<iframe>、<script>、<link>等标签中发送第三方Cookie。但是firefox是允许发送第三方Cookie的。

      在当前的主流浏览器中,默认会拦截Third-party Cookie的有:IE、Safari;不会拦截的有:Firefox、Opera、Chrome、Android等。

2、P3P头的副作用

      P3P Header是W3C制定的一项隐私的标准,全称是The Platform for Privacy Preferences。

      如果网站返回给浏览器的HTTP头里包含P3P头,则在某种程度上说,将允许浏览器发送第三方Cookie,即使是在IE浏览器中。

3、CSRF的防御

3.1 验证码

      验证码被认为是对抗CSRF***最简洁有效的防御方法,它强制用户必须与应用交互,才能完成最终请求,但是验证码也非万能的,出于用户体验考虑,不可能所有请求都需要用户输入验证码。

3.2 Referer Check

      Referer最常见的应用就是防止图片盗链,同理,Referer Check也可以被用于检查请求是否来自合法的"源"

     Referer Check的缺陷在于,服务器并非什么时候都能取到Referer。很多隐私条件下,限制了Referer的发送。

3.3 Anti CSRF Token

    现在业界一直的防御方式是使用Token。

     CSRF为什么能***成功,起本质原因是重要的所有参数都是可以被***猜测到的。***者只有预测出URL的所有参数和参数值,才能成功的构造一个伪站的请求;反之,***者无法***成功。


二、点击劫持(ClickJacking)     

    点击劫持是一种视觉上的欺骗手段。***者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后又是用户在该网页上操作。

    常见的形式有:Flash点击劫持、图片覆盖***、拖拽劫持与数据窃取、触屏劫持

    防御方式:

    1、frame bustiong

     通常可以写一段JavaScript代码,以禁止iframe嵌套。这种方法叫frame bustiing。

    2、X-Frame-Options

    X-Frame-Option可以说是为了解决ClickJacking而生的,它有三个可选值:

        DENY:浏览器会拒绝当前页面加载任何frame页面;

        SAMEORIGIN:frame页面的地址只能为同源域名下的页面;

        ALLOW-FROM origin:定义允许加载的页面地址。

    除了X-Frame-Options之外,Firefox的"Content Security Policy"以及Firefox的NoScript扩展也能够防御ClickJacking。





向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI