据我了解,跨站点请求伪造攻击“仅”用于更改服务器端的状态。
认为:
- 我有一个 REST Web 应用程序,我确信 HTTP GET 请求不会改变我的应用程序持久状态(无副作用)
- 我使用特定于会话的密钥来授权请求
我是否需要验证 GET 请求的会话特定密钥?
据我了解,跨站点请求伪造攻击“仅”用于更改服务器端的状态。
认为:
我是否需要验证 GET 请求的会话特定密钥?
这实际上不是请求方法的问题(GET 和 POST 都可以更改持久状态),因为每种方法都可以被各种 CSRF 攻击向量利用。当您谈论“特定于会话的密钥”时,我假设您正在谈论同步器令牌模式(更多信息请参阅 OWASP Top 10 for .NET 开发人员第 5 部分:跨站点请求伪造(CSRF))。显然,这是为了防止浏览器在第三方的安排下代表您发出未经授权的请求。
所以问题真的是“我的应用程序是否需要针对 CSRF 的保护?” 听起来您的应用程序中的持久数据无论如何都没有变化,所以从表面上看,答案是“不”。你通常只会在 CSRF 攻击会产生不利影响的地方找到反请求伪造令牌,所以在我看来,这听起来像是你不需要担心的事情。