似乎整个问题都可以通过简单地在 HTTP cookie 规范中添加一个新标志来非常优雅地解决。
类似于标记的 cookieSecure
仅由用户代理通过安全连接提交,而标记的 cookieHttpOnly
将永远无法通过 DOM 访问访问,为什么不指定一个新的标志,比如NoCSR
或SameOriginOnly
,当设置时,它会阻止 cookie被跨域引用者触发的请求提交?
当然,根据HTML5 设计原则 #2.1,它默认为关闭,以免破坏现有网站的先前预期行为。我想确实存在一个安全漏洞,但不是一个不能轻易解决的漏洞:不能不加选择地依赖它,因为旧的浏览器可能会忽略无法识别的标志。
那么,为什么不创建一个白名单枚举 -NoCSR
实现用户代理版本的相应 UA 字符串,然后只接受/处理带有这些User-Agent:
值之一的需要授权和敏感的请求呢?对于没有或未列入白名单的 UA 标头的请求,可能会返回错误,合理地要求用户升级到受支持的浏览器版本。
白名单可以用各种服务器端语言的规范实现库(它可能更像一个简单的函数)干掉。
这似乎不是比当前生成、跟踪和读取安全 CSRF 令牌的系统简单得多吗?
想法,有人吗?