什么是CSRF令牌?
译者 | 陈峻
审校 | 孙淑娟
跨站点请求伪造(Cross-site request forgery ,又称:跨站点引用伪造)是一种针对Web应用的攻击形式 。黑客通过伪装恶意请求 ,诱骗用户运行他们本不打算执行的任务。尽管CSRF可能听起来与XSS攻击类似,但它们的执行方式存在根本差异 。对此,Web服务器需要一种机制 ,来确定浏览器所产生的请求,是否源于合法用户的真实意图 ,服务器租用而非受攻击的胁迫。针对此类问题 ,服务器端可以生成一个唯一的 、且不可预测的密钥值,作为CSRF令牌被包含在客户端的HTTP请求中。当有后续请求发出时,Web服务器会验证包含了令牌的请求参数 ,以拒绝那些不包含有令牌的请求参数 。由于黑客几乎不可能构造一个完整、有效的模板下载HTTP请求来欺骗Web用户,因此该方法通常可被用于防范CSRF攻击 。下面,我将和您讨论CSRF令牌的工作原理 ,及其在应用安全中的重要性 。
一、为什么需要有效的CSRF令牌?CSRF令牌通常被建议添加到所有状态更改(state-changing)的请求中,以便在后端被执行验证。由于只有应用服务器和客户端可以识别令牌 ,因此后端必须确保传入的请求包含有效的CSRF令牌 ,高防服务器以避免XSS或跨站点请求伪造攻击的得逞 。
在基于Cookie的会话期间,作为密钥值的CSRF令牌需要被安全处理以保持有效 。为此,令牌应当被放置在HTML表单的隐藏字段中,被传输到客户端 ,并使用HTTP的POST请求被提交。作为优秀的实践 ,我们建议使用标准的标头来验证请求的免费模板来源 ,并使用其他措施去识别和比较来源和目标。如果来源匹配 ,则判定请求是合法的;如果不匹配 ,则表明疑似跨域请求,应予以丢弃。
二 、CSRF令牌在防止攻击中的意义由于令牌在生成过程中使用到了伪随机数(pseudo-random number)生成器、静态密钥、以及种子时间戳 ,因此CSRF令牌的值是不可预测的源码下载