我在broswer中运行spring web应用程序。我使用网址localhost:80/update/name
登录我的帐户并更新了一些值。在控制器端,如果没有重定向到登录页面,我会检查principal==null
。
现在登录此应用程序时。我在同一浏览器中打开其他Web应用程序页面,并通过ajax调用执行相同的更新URL localhost:80/update/name
,并且它正在更新该值。我怎样才能避免这种安全威胁。
如何确保Application1更新URL仅由application1请求执行?不管应用程序2是否在同一个浏览器中,都不应该允许它执行app1的更新请求吗?
答案 0 :(得分:3)
你为什么感到惊讶?您已登录,因此浏览器具有有效的会话cookie。您要求浏览器向主机发送请求(无论是在第一个窗口还是在任何其他窗口,它都是相同的):它发送带有所有相关cookie的请求,包括会话cookie以及任何其他安全cookie。服务器接收包含有效登录用户的有效会话cookie的请求,即使它控制来自相同地址的IP地址:所有都是有效的,并继续请求。
如果您的客户端计算机上有不同的浏览器,并且您打开了此无关浏览器的连接,则服务器应拒绝您的请求,因为浏览器不会显示有效的Cookie。
答案 1 :(得分:1)
您正在描述跨站点请求伪造的变体,您应该启用Spring Security CSRF保护。你可以read about it in the reference manual.
即使两个应用程序位于同一台服务器上,它们也会获得不同的CSRF令牌,这将保护您的案例。
答案 2 :(得分:0)
您描述了跨站点请求伪造攻击。通常在使用POST方法时,会添加隐藏令牌以防止它。我假设您正在使用GET方法 - 最好不要使用GET方法更改任何状态。