然后从源代码中剥离标签以用于恶意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保护,它就不会信任伪造的请求。