【发布时间】:2010-12-03 07:22:04
【问题描述】:
谁能告诉我有关如何保护应用程序免受 CSRF 影响的信息?
与此相关的任何代码。
我在 UI 上使用 extjs,在后端和 tomcat 服务器上使用 Java。
提前致谢。
【问题讨论】:
-
CSRF issue in Tomcat 的可能重复项
标签: csrf csrf-protection
谁能告诉我有关如何保护应用程序免受 CSRF 影响的信息?
与此相关的任何代码。
我在 UI 上使用 extjs,在后端和 tomcat 服务器上使用 Java。
提前致谢。
【问题讨论】:
标签: csrf csrf-protection
以 dan_waterworth 建议的方式使用会话 ID,虽然很容易,但保护效果很差。攻击者只需要捕获会话ID cookie,然后就可以绕过会话生命周期的保护。
会话 ID 是一个 cookie,因此它随任何请求一起提交。因此,攻击者要捕获 sessionid 所需要做的就是使您的应用程序向攻击者控制的服务器提交请求。这可以通过跨站点脚本攻击来完成,但也可以通过构建应用程序并提交 iFrame 的表单来完成(还有其他方法可以做到这一点)。
需要保护免受 CSRF 影响的交互应该包括攻击者不可能事先知道的信息(CSRF 令牌),每个会话、每个页面和每个表单都是唯一的,理想情况下只使用一次。 CSRF 令牌应该在表单中提交,而不是在 cookie 中(出于上述原因)。有关详细信息和示例实现,请参阅OWASP CSRF protection cheatsheet 中的“实现示例”。一些 Web 应用程序引擎(例如 Tomcat 8)和框架(例如 Spring、JSF)具有可以通过打开配置来应用的保护。
【讨论】:
是的,我有一个对我很有效的简单解决方案。对于每个 post 请求,通过 javascript(从 cookie 获取)发送数据中的 sessionid,在服务器端它只需要检查每个 post 请求的 sessionid cookie 和数据中的 sessionid 是否相同。
【讨论】: