`
youyu4
  • 浏览: 424899 次
社区版块
存档分类
最新评论

web安全之跨站请求伪造

 
阅读更多

CSRF(Cross-site request forgery),中文名称:跨站请求伪造.
因为这个不是用户真正想发出的请求,这就是所谓的请求伪造;因为这些请求也是可以从第三方网站提交的,所以前缀跨站二字。

CSRF发生的场景如下图所示:

用户登录访问了一个受信任的站点,
在用户还没有退出登录的时候,打开另外一个tab页,访问了网站B。
在B网站中,有CSRF攻击代码访问网站A。
发生的原因是,网站是通过cookie来识别用户的,当用户成功进行身份验证之后浏览器就会得到一个
标识其身份的cookie,只要不关闭浏览器或者退出登录,以后访问这个网站会带上这个cookie。
1.登录受信任网站A,并在本地生成Cookie。
2.在不登出A的情况下,访问危险网站B。
你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。
是的,确实如此,但你不能保证以下情况不会发生:
1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。
2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。
(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于
退出登录/结束会话了)如记住密码功能等。
3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。
下面来看一个代码实例,在网站A发布了下面的代码
用户login,然后可以在input.jsp提交数据,提交的数据被dataupdate.jsp更新到后台。
dataupdate.jsp会检查用户是否登录,如果没有登录会跳到login.jsp要求用户登录。

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. login.jsp  
  2. <body>  
  3. <form action="input.jsp" method="post">  
  4. name<input type="text" name="name" size="50"><br>  
  5. pwd<input type="password" name="password" size="50"><br>  
  6. <input type="submit" value="submit">  
  7. </form>  
  8. <br>  
  9. </body>  
  10. </html>  
  11.   
  12. input.jsp  
  13. <body>  
  14. <%  
  15.     //Session session = request.getSession();  
  16.     String username = (String)session.getValue("username");  
  17.     System.out.println("username " + username);  
  18.     if(null==username){  
  19.         String uname = request.getParameter("name");  
  20.         session.putValue("username", uname);  
  21.     }  
  22.   
  23. %>  
  24. <form action="dataupdate.jsp" method="post">  
  25. <input type="text" name="comment" size="50"><br>  
  26. <input type="submit" value="submit">  
  27. </form>  
  28. <br>  
  29. </body>  
  30.   
  31. dataupdate.jsp  
  32. <body>  
  33. <%  
  34.     String username = (String)session.getValue("username");  
  35.     System.out.println("username " + username);  
  36.     if(null==username){  
  37.         System.out.println("has not logged in");  
  38.         response.sendRedirect("login.jsp");  
  39.     }else{  
  40.         String comment = request.getParameter("comment");  
  41.           
  42.         System.out.println("add a comment: " + comment);  
  43.               
  44.         out.write("comment is : " + comment);  
  45.     }  
  46. %>  
  47. </body>  
  48. </html>  

表面上看起来好像没有问题。
假设我们有另外一个网站B,它有一个网页文件如下
如果在用户登录访问网站A的同时访问了网站B,访问者在网站A的数据就会被假冒更新。
可以在后台看到有如下的输出:add a comment: fromcsrf

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <body>  
  2. use a img element to send a get request <br>  
  3. <img src="http://www.a.com/prjWebSec/csrf/dataupdate.jsp?comment=fromcsrf">  
  4. </body>  
  5. </html>  

这里网站A违反了HTTP规范,使用GET请求更新资源。那是不是用post请求就不会发生CSRF呢?
结果是同样会发生。可以通过构造javascript构造form提交,如下面的代码

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. <body >  
  2. </body>  
  3.     <script type="text/javascript">  
  4.   
  5.         var frmdocument.getElementById("viframe");  
  6.         function sendcsrf()    
  7.         {    
  8.             var form1 = document.createElement("form");    
  9.             form1.id = "form1";    
  10.             form1.name = "form1";    
  11.             document.body.appendChild(form1);    
  12.           
  13.             var input = document.createElement("input");    
  14.             input.type = "text";    
  15.             input.name = "comment";    
  16.             input.value = "from csrf post";    
  17.           
  18.             form1.appendChild(input);    
  19.             form1.method = "POST";    
  20.             form1.action = "http://www.a.com/prjWebSec/csrf/dataupdate.jsp";    
  21.             form1.submit();    
  22.             document.body.removeChild(form1);    
  23.         }   
  24.         sendcsrf();  
  25.     </script>  
  26. </html>  

防止方法:
1,利用referer判断,
但是用户有可能设置浏览器使其在发送请求时不提供 Referer,这样的用户也将不能访问网站。
2,在请求中添加 token 并验证
关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中,
可以在服务器端生成一个随机码,然后放在form的hidden元素中,form提交的时候在服务器端检查。

分享到:
评论

相关推荐

    论文研究-跨站请求伪造(CSRF)攻击与防范技术研究 .pdf

    跨站请求伪造(CSRF)攻击与防范技术研究,刘雅楠,马兆丰,跨站请求伪造(CSRF)攻击作为最严重的web漏洞威胁之一被列入了开放Web应用安全项目(OWASP)十大漏洞列表。该攻击具有很大隐蔽性和危

    csrf跨站请求伪造简单示例

    一个简单的csrf跨站请求伪造的示例,只有一个简单的表单提交功能.通过伪造表单提交,完成一个简单的钓鱼案例

    008-Web安全基础4 - 请求伪造漏洞.pptx

    CSRF 的全称是Cross-site request forgery,即跨站请求伪造,我们可以简单的理解这种漏洞为,攻击者利用被攻击者的身份发起了某些被攻击者原本不知情的网络请求。包括以被攻击者的身 份发布一条微博,以被攻击者的...

    网络安全原理与应用:跨站请求伪造CSRF简介.pptx

    跨站请求伪造CSRF简介 第7章 Web应用安全 目标 Objectives 要求 了解跨站请求伪造CSRF的基本概念; 了解跨站请求伪造CSRF的攻击原理; 跨站请求伪造CSRF简介 一、跨站请求伪造CSRF简介 跨站请求伪造(Cross-site ...

    CSRF(跨站请求伪造)详细说明

    Cross-SiteRequestForgery(CSRF),中文一般译作跨站请求伪造。经常入选owasp漏洞列表Top10,在当前web漏洞排行中,与XSS和SQL注入并列前三。与前两者相比,CSRF相对来说受到的关注要小很多,但是危害却非常大。...

    网络安全原理与应用:跨站请求伪造CSRF攻击演示.pptx

    跨站请求伪造CSRF攻击演示;;跨站请求伪造CSRF攻击演示;跨站请求伪造CSRF攻击演示;跨站请求伪造CSRF攻击演示;跨站请求伪造CSRF攻击演示;跨站请求伪造CSRF攻击演示;跨站请求伪造CSRF攻击演示;跨站请求伪造CSRF攻击演示...

    Web应用安全:浏览器的如何防御攻击.pptx

    1、CSRF(跨站请求伪造) 2、XSS(跨站脚本分析) CSRF(跨站请求伪造) CSRF 英文全称是 Cross-site request forgery,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来...

    Web安全培训ppt(适合初学者)

    CSRF(跨站请求伪造) SSRF(服务器端请求伪造) 文件上传下载:富文本编辑器 弱口令: X-Scan、Brutus、Hydra、溯雪等工具 其它漏洞: 4、逻辑漏洞(3天) 平行越权 垂直越权 任意密码重置 支付漏洞:0元购 接口...

    经典:《网站系统安全开发手册》

    第五节 跨站请求伪造 什么是跨站请求伪造 跨站请求伪造的危害 如何防止跨站请求伪造 第六节 越权操作 什么是越权操作 越权操作的危害 如何防止越权操作 第七节 IO操作安全 第八节 缓存泄漏 什么是缓存泄漏 防御...

    Web安全 .pdf

    跨站脚本攻击 浏览器安全 跨站点请求伪造(CSRF) 点击劫持(ClickJacking) 注入攻击 文件上传漏洞 认证与会话管理 Web 框架安全 Web Server 配置安全 互联网业务安全 安全开发流程

    超全的Web渗透自我学习资料合集(64篇).zip

    web渗透: 跨站请求伪造(CSRF) web渗透: 服务端请求伪造攻击(SSRF) web渗透: 跨站脚本攻击(XSS) web渗透: HTTP Host头攻击 web渗透: SQL注入(上) web渗透: SQL注入(下) web渗透: XML注入攻击 web渗透: XXE...

    gorilla / csrf为Go Web应用程序和服务提供跨站点请求伪造(CSRF)预防中间件:locked:-Golang开发

    gorilla / csrf gorilla / csrf是一个HTTP中间件库,它提供跨站点请求伪造(CSRF)保护。 它包括:csrf.Protect中间件/处理程序在连接到路由器大猩猩/ csrf的路由上提供CSRF保护。gorilla / csrf是一个HTTP中间件库...

    mod_csrf:防止跨站点请求伪造的 Apache 模块。-开源

    mod_csrf 是 Apache Web 服务器的模块。 它可以防止对易受攻击的 HTML 表单进行跨站点请求伪造攻击。

    web前端黑客技术揭秘

    Web前端的黑客攻防技术是一门非常新颖且有趣的黑客技术,主要包含Web前端安全的跨站脚本(XSS)、跨站请求伪造(CSRF)、界面操作劫持这三大类,涉及的知识点涵盖信任与信任关系、Cookie安全、Flash安全、DOM渲染、...

    WEB开发安全漏洞修复方案

    1.3.8 链接注入(便于跨站请求伪造) 18 1.3.9 应用程序错误 25 1.3.10 SQL注入 29 1.3.11 发现数据库错误模式 38 1.3.12 启用了不安全的HTTP方法 48 1.3.13 发现电子邮件地址模式 50 1.3.14 HTML注释敏感信息泄露 ...

    网络安全必读书:Web Hacking 101(中文2023年中文版)

    四、跨站请求伪造CSRF 五、应用逻辑漏洞 六、跨站脚本攻击XSS 七、SQL 注入 八、开放重定向漏洞 九、子域劫持 十、XML 外部实体注入 十一、代码执行 十二、模板注入 十三、服务端请求伪造SSRF 十四、内存攻击 十五、...

    Web 应用安全漏洞原理及测试技术

    Web 应用安全漏洞原理及测试技术1 SQL注入漏洞  任意文件上传漏洞  任意文件下载漏洞  文件包含漏洞  XSS跨站脚本漏洞  CSRF跨站请求伪造漏洞  逻辑漏洞

Global site tag (gtag.js) - Google Analytics