【问题标题】:Spring Security : restrict other web application accessSpring Security:限制其他 Web 应用程序访问
【发布时间】:2014-10-29 20:07:11
【问题描述】:

我正在浏览器中运行 Spring Web 应用程序。我登录到我的帐户并使用 URL 更新一些值,例如 localhost:80/update/name。在控制器端,如果没有重定向到登录页面,我会检查 principal==null

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

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

【问题讨论】:

    标签: spring spring-mvc spring-security


    【解决方案1】:

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

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

    【讨论】:

    • 如何在与我从 APP2 访问 APP1 url 相同的浏览器中避免这种情况
    • 是的,我知道它在同一个浏览器会话中的 cos 将被启用,直到注销。但我的问题是如何防止这种从另一个应用程序访问其他应用程序请求
    • 如果你想防止跨站请求伪造,spring security 3.2 开箱即用。它可以自动将_csrf 令牌添加到任何表单并在表单提交时对其进行控制。令牌是随机生成的,任何其他应用程序都不应该知道。 Spring Security Reference Manual 中有很好的示例。但这与您所描述的不完全一样;-)
    • 你认为这是什么威胁?我们如何称呼这种威胁?
    • 不清楚第二个请求是表单提交还是来自另一个站点发送的页面的链接。通常任何体面的浏览器都应该拒绝对不同站点的 ajax 调用。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这与跨站点无关。
      猜你喜欢
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 2018-09-13
      • 1970-01-01
      • 2016-03-28
      相关资源
      最近更新 更多