【问题标题】:Angular and Spring Security ArchitectureAngular 和 Spring 安全架构
【发布时间】:2017-10-11 13:54:58
【问题描述】:

我一直在尝试构建一个前端有 angular (2) 的应用程序和一个 Spring Restful 服务来从/在数据库中获取/操作数据。现在,一直困扰我的一件事是如何确保安全。我已经实现了 Spring Security 来处理身份验证。

但是,现在有一些事情,例如通过跨源请求完成的 CSRF 攻击。 Angular 在不同于 Spring Rest 服务(例如 tomcat - localhost:8080)的服务器(默认为 localhost:4200)上运行。当向其余服务发出请求时,它将被视为跨源请求。令我困惑的是,如果我可以在这种情况下使用 spring security 提供的 csrf 保护。如果没有,那么如何防止我的 Rest Service 被恶意攻击利用?

我遇到过以下问题: CORS issue - No 'Access-Control-Allow-Origin' header is present on the requested resource 我可以看到 csrf 保护被禁用,CORS 正在根据需要进行配置。 但是,这并没有解决我关于休息服务是否容易受到攻击的问题?

P.S 我对 Web 应用程序的安全配置非常陌生,所以请指出我做错了什么或概念有误。

【问题讨论】:

    标签: java angularjs spring rest spring-security


    【解决方案1】:

    要解决关于易受 CSRF 攻击的问题,您需要首先确定要使用的身份验证机制(基于令牌或基于 cookie)。 CSRF 攻击的症结在于利用一个应用程序,该应用程序使用 Cookie、IP 地址或浏览器自动包含在请求中的任何其他内容来保持用户的登录上下文(查看this 帖子以获取有关 CSRF 和示例攻击的更多详细信息) .

    例如,您正在使用基于 cookie 的身份验证,并且您依靠浏览器在后续 Http 请求中自动包含 cookie 的事实(假设 cookie 仍然有效,即尚未过期等)来验证特定用户已发送请求。由于 cookie 自动包含在浏览器的请求中,攻击者可以重建后端服务器可以处理的请求,如果他们能够让您网站的用户在浏览器中触发此请求,您的后端服务器将不会能够抹黑该请求,因为它似乎是来自您的某个用户的合法请求。

    对于基于令牌的身份验证,这不是问题,因为浏览器不会自动将您的身份验证令牌包含在请求标头中。因此,攻击者将无法仅依靠浏览器来验证他们的虚假请求。

    现在是关于跨域政策的下一个问题。这现在由所有受信任的浏览器强制执行,因此您可以预期大多数用户将发送符合跨域策略的请求。因此,您需要在后端服务器上执行以下操作之一:

    1. 看到您指定支持的服务器在localhost:8080 上运行,而您的Angular 应用程序在localhost:4200 上运行,我假设您让它们在同一主机上运行。如果您还打算让它们在生产环境中的同一主机上运行,​​那么您只需在后端服务器中将 'Access-Control-Allow-Origin' 标头设置为 '*'
      这将使您的后端服务器接受来自任何来源的请求。然后,您可以使用防火墙使端口 8080 无法访问外部连接。
      这是一种快速解决方法(尤其是为了让事情在本地进行),但并不理想,因为不建议单独依赖防火墙。
    2. 我建议您将Access-Control-Allow-Origin 标头设置为仅接受您的Angular 应用程序作为源。因此,如果您的应用程序与后端服务器位于同一主机上,例如用于本地开发,则应将其设置为 http://localhost:4200。如果您的 Angular 应用程序与 Spring 服务器位于不同的主机上,那么您将需要指定您网站的域,例如。 http://example.comAccess-Control-Allow-Origin 标头中(有关如何使用此标头的更清晰说明,请参阅 this 帖子)。

    我希望这能回答你的问题。

    【讨论】:

      猜你喜欢
      • 2015-12-02
      • 1970-01-01
      • 2015-04-26
      • 2016-08-05
      • 2011-07-03
      • 1970-01-01
      • 2021-05-29
      • 2016-04-05
      • 1970-01-01
      相关资源
      最近更新 更多