如何在HTTP协议规范中修复CSRF?

Sam*_*ins 2 security http csrf web

为了防止跨站点请求伪造的危险情况,需要对HTTP协议规范和浏览器行为进行哪些更改?

我不是在寻找关于如何修补我自己的网络应用程序的建议.有数百万个易受攻击的网络应用和表单.更改HTTP和/或浏览器会更容易.

如果您同意我的前提,请告诉我需要对HTTP和/或浏览器行为进行哪些更改.这不是寻找最佳单一答案的竞赛,我想收集所有好的答案.

另请阅读并评论下面"回答"中的要点.

Gum*_*mbo 5

HTTP规范的作者Roy Fielding不同意您的观点,即CSRF是HTTP中的一个缺陷,需要在那里修复.正如他在一个名为The HTTP Origin Header的帖子中的回复中所写:

CSRF不是Web的安全问题.精心设计的Web服务应该能够接收任何主机指示的请求,如果需要,可以通过适当的身份验证进行设计.如果浏览器出现安全问题,因为它们允许脚本自动将带有存储安全凭证的请求定向到第三方站点,而无需任何用户干预/配置,那么显而易见的修复就在浏览器中.

实际上,CSRF攻击从一开始就可以使用纯HTML.现在引入像JavaScript和CSS这样的技术只会引入更多的攻击向量和技术,使请求伪造更容易,更有效.

但它没有改变这样一个事实,即来自客户的合法和真实的请求不一定基于用户的意图.因为浏览器会一直自动发送请求(例如图像,样式表等)并发送任何身份验证凭据.

同样,CSRF攻击发生在浏览器内部,因此唯一可能的修复需要在浏览器内部进行修复.

但由于这并非完全可能(见上文),因此应用程序有责任实施一种允许区分真实和伪造请求的方案.始终传播的CSRF令牌就是这样一种技术.并且在正确实施并且防止其他攻击时效果很好(其中许多,再次,仅在现代技术的引入下才有可能).