2014-10-28 48 views
-1

我在浏览器中运行spring web应用程序。我登录到我的帐户,并使用URL更新一些值说localhost:80/update/name。在控制器端,我检查principal==null是否不重定向到登录页面。Spring安全:限制其他Web应用程序访问

现在,而登录到此应用程序。我在同一浏览器中打开其他Web应用程序页面,并通过ajax调用执行相同的更新URL localhost:80/update/name,它正在更新该值。我如何避免这种安全威胁。

我如何确保Application1更新网址将仅由application1请求执行?无论应用程序2是否在同一浏览器中,都不应允许应用程序2执行应用程序1的更新请求?

回答

3

你为什么感到惊讶?您已记录,因此浏览器有一个有效的会话cookie。您要求浏览器向主机发送请求(无论是在第一个窗口还是任何其他窗口,都是一样的):它会向请求发送所有相关的cookie,包括会话cookie和适当的任何其他安全cookie。服务器收到包含有效会话cookie的请求,该请求包含有效的记录用户,即使它控制来自相同地址的IP:all都有效,并且它继续处理请求。

如果您的客户端计算机上有不同的浏览器,并且您从此不相关的浏览器打开连接,则服务器应拒绝您的请求,因为浏览器不会显示有效的cookie。

+0

如何避免在同一浏览器,因为我从APP2访问APP1网址 – manish 2014-10-28 20:26:47

+0

是啊我知道它在同一个浏览器会话中的COS将被启用,直到注销。但我的问题是如何防止这种访问来自其他应用程序的其他应用程序请求 – manish 2014-10-28 20:40:04

+0

如果您想防止跨站点请求伪造,spring security 3.2可以直接使用。它可以自动将'_csrf'令牌添加到任何表单并在表单提交中对其进行控制。对任何其他应用程序来说,随机生成的令牌应该是未知的。 Spring Security参考手册中有很好的例子。但它不完全是你所描述的;-) – 2014-10-28 20:53:29

0

您描述了跨站请求伪造攻击。通常,当使用POST方法时,会添加隐藏标记以防止它出现。我假设您正在使用GET方法 - 最好不要使用GET方法更改任何状态。

+0

这里没有什么跨网站。 – 2014-10-28 20:30:08

1

您正在描述跨站请求伪造的变体,您应该启用Spring Security CSRF保护。您可以read about it in the reference manual.

即使这两个应用程序在同一台服务器上,它们也会得到不同的CSRF令牌,这将保护您的情况。