示例3
经由前面2个惨痛的教训,银行决定把获取请求数据的办法也改了,改用$_POST,只获取POST请求的数据,后台处理页面Transfer.php代码如下:
- <?php
- session_start();
- if (isset($_POST['toBankId'] && isset($_POST['money']))
- {
- buy_stocks($_POST['toBankId'], $_POST['money']);
- }
- ?>
然而,危险网站B与时俱进,它改了一下代码:
- <html>
- <head>
- <script type="text/javascript">
- function steal()
- {
- iframe = document.frames["steal"];
- iframe.document.Submit("transfer");
- }
- </script>
- </head>
- <body onload="steal()">
- <iframe name="steal" display="none">
- <form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">
- <input type="hidden" name="toBankId" value=http://developer.51cto.com/art/201710/"11">
- <input type="hidden" name="money" value=http://developer.51cto.com/art/201710/"1000">
- </form>
- </iframe>
- </body>
- </html>
如不雅用户仍是持续膳绫擎的操作,很不幸,结不雅将会是再次不见1000块......因为这里危险网站B暗地里发送了POST请求到银行!
总结一下膳绫擎3个例子,CSRF重要的进击模式根本上是以上的3种,个中以第1,2种最为严重,因为触发前提很简单,一个<img>就可以了,而第3种比较麻烦,须要应用JavaScript,所以应用的机会会比前面的少很多,但无论是哪种情况,只要触发了CSRF进击,后不雅都有可能很严重。
懂得膳绫擎的3种进击模式,其实可以看出,CSRF进击是源竽暌冠WEB的隐式身份验证机制!WEB的身份验证机制固然可以包管一个请求是来自于某个用户的浏览器,但却无法包管该请求是用户赞成发送的!
当前防御 CSRF 的几种策略
在业界今朝防御 CSRF 进击重要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。下面就分别对这三种策略进行具体介绍。
验证 HTTP Referer 字段
长处:简单易行,只须要在最后给所有安然敏感的请求同一增长一个拦截器来检查 Referer 的值就可以。特别是对于当前现有的体系,不须要改变当前体系的任何已有代码和逻辑,没有风险,异常便捷。
缺点:
1、Referer 的值是由浏览器供给的,弗成全信,低版本浏览器下Referer存在捏造风险。
2、用户本身可以设置浏览器使其在发送请求时不再供给 Referer时,网站将近绝合法用户的拜访。
在请求地址中添加 token 并验证
在请求中放入黑客所不克不及捏造的信息,并且该信息不存在于 cookie 之中,以HTTP请求参数的情势参加一个随机产生的 token交由办事端验证
推荐阅读
沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散! 在10月15日举办的2017中国治理>>>详细阅读
本文标题:关于Web安全的三个攻防姿势
地址:http://www.17bianji.com/lsqh/38025.html
1/2 1