如果将csrf令牌放置在隐藏输入中,恶意网站就有可能使用CURL


If a csrf token is placed inside a hidden input, isn't it possible for a malicious website to use CURL

然后从源代码中剥离标签以用于恶意POST请求?

例如,网站放置了一个隐藏的输入,如下所示:

<input type="hidden" value="{session token here}" name="token">

然后合法的网站会检查代码:

<?php 
  if(Request::post('token') != Session::get('token'):
     //generate new token, display errors etc
  endif;
?>

非法网站不能使用CURL抓取源代码并通过名称/id等获取表单,然后获得令牌并将其放置在伪造的表单中并绕过令牌安全?

CSRF("跨站点请求伪造")保护令牌必须仅对特定帐户有效(或者更好的是对特定会话有效)。想要使用curl或类似方法发现受害者的CSRF保护的攻击者需要知道受害者的会话令牌。(当然,如果他们有会话令牌,他们可以直接发出请求,而不必费心跨站点发送请求。)

CSRF是一种攻击,我在用户的会话中伪造请求,通过使用我的站点告诉用户的浏览器将请求发送到您的站点(托管在完全不同的服务器和域名上,当然,因此是"跨站点")。它可以工作,即使我(攻击者)不知道受害者的会话令牌,因为受害者的浏览器自动发送所有cookie(针对您的站点)与您的站点的任何请求,即使请求是由于我的站点的内容。

我从来没见过那些饼干;它们直接从受害者的浏览器转到你的服务器,而我的服务器完全被排除在外。由于同源策略,我也无法使用JavaScript或类似的方法获得它们。因为我没有会话cookie,我不能把它添加到curl。没有它,我就不能请求对受害者会话有效的CSRF保护令牌,所以如果您的服务器正确使用CSRF保护,它就不会信任伪造的请求。