如果开发人员通过引荐来源标头缓解,是否可以拥有CSRF

时间:2017-08-16 17:12:06

标签: header xss csrf referrer

经过五次测试后,开发人员仅使用引用标头来缓解CSRF漏洞。该应用程序还有其他漏洞,如XSS。是否有可能在XSS的帮助下利用CSRF?如果是的话怎么样?

3 个答案:

答案 0 :(得分:1)

简短说明:当存在XSS时,很难设计出有效的CSRF保护。

通过引用标头缓解CSRF通常被认为是一种弱防御 - 有些情况下(通过浏览器或代理)剥离它们,您需要使这些安全失败。有关更多信息,请参阅 Is checking the referrer enough to protect against a CSRF attack?

XSS允许您在同一个域内发送查询,这样可以更好地控制请求(包括设置引用标头)。这可以用来绕过这个机制。但是,XSS通常也可用于绕过其他机制(例如CSRF令牌)。

答案 1 :(得分:0)

是的,如果它具有同域XSS漏洞。

在具有XSS漏洞的页面中,执行js代码,如:

var xhr = new XMLHttpRequest();
xhr.open("POST", "/deletepost", true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({
    id: 1
}));

或类似(使用jQuery):

$.post("/deletepost", { id:1 } ,function(data){});

请求应与网站域名的referrer标头一起发送。因此存在CSRF漏洞。

答案 2 :(得分:0)

为避免CSRF攻击,您必须在代码中使用Antiforgery令牌,下面是示例代码。

{ CSRF的脆弱代码:}

<h2>You have won 5k!</h2>                
  <form action="http:/example_Test.com/Test_Admin/account" method="post">        
   <input type="hidden" name="Test_Transaction" value="withdraw" />        
    <input type="hidden" name="Test_Amount" value="500000" />        
 <input type="submit_btn" value="Test_Submit"/>        

{ CSRF的安全代码:}

<h2>You have won 5k!</h2>                   
<form action="http:/example_Test.com/Test_Admin" method="post">                
<input name="__RequestVerificationToken" type="hidden" value=" Token value is unique"/>                      
    <input type="submit_btn" value="Test_Submit" />            
</form>             

注意:您可以在Web配置文件中使用“同源策略”来避免CSRF。

相同的原始政策:整个请求域名应相同。

第一个请求页面可以访问第二个或第三个页面,但前提是两者都具有相同的域。如果域不同,则请求被丢弃。

 - X-Frame-Options: "SAMEORIGIN"  

对于跨站点脚本(XSS),开发人员可以使用HTTPOnly标志,Webconfig文件中的X-XSS保护响应标头或使用适当的输入验证。

 - cookie.setHttpOnly(true);        
 - myCookie.HttpOnly = true;

HTTPOnly:无法访问Cookie值,或无法在客户端显示它。