我一直在尝试构建一个在前端具有角(2)的应用程序和一个,以便从数据库/在数据库中获取/操作数据。现在,有件事一直困扰着我,那就是如何确保安全。我已经实现了Security来处理身份验证。
但是,现在有一些东西,比如CSRF攻击,是通过跨源请求完成的。角运行在服务器上(默认情况下为4200),与Spring服务不同(例如:8080)。当向rest服务提出请求时,它将被视为跨源请求。让我困惑的是,在这种情况下,我是否可以使用spring安全性提供的csrf保护。如果没有,那么如何防止Rest服务被恶意攻击所利用?
我曾经经历过这样的问题:在CORS问题-请求的资源上不存在“访问-控制-允许-源”标头中,我可以看到csrf保护被禁用,CORS是根据需要配置的。但是,这并没有解决我关于rest服务是否对攻击开放的问题?
我对web应用程序的安全配置非常陌生,所以请指出我是否做错了什么或概念错误。
发布于 2017-05-12 11:46:20
要解决您对CSRF攻击易受攻击的问题,您需要首先决定要使用哪种身份验证机制(基于令牌基还是基于cookie )。CSRF攻击的关键在于利用应用程序使用Cookie、IP地址或浏览器在请求中自动包含的任何其他内容来保持用户登录上下文(请查看这 )。
例如,假设您使用的是基于cookie的身份验证,并且您依赖于浏览器在随后的Http请求中自动包含cookie这一事实(假设cookie仍然有效,即未过期等)。若要验证特定用户是否已发送请求,请执行以下操作。由于cookie自动包含在浏览器的请求中,攻击者可以重构后端服务器可以处理的请求,而且如果他们能够让网站的用户在浏览器中发送此请求,则后端服务器将无法破坏该请求的信誉,因为它似乎是来自您的用户之一的合法请求。
在基于令牌的身份验证中,这不是问题,因为浏览器不会自动将身份验证令牌包含在请求头中。因此,攻击者将无法仅依靠浏览器来验证他们的假请求。
现在下一个问题是关于跨源政策。这现在由所有受信任的浏览器强制执行,因此您可以预期大多数用户将发送符合跨源策略的请求。因此,您需要在后端服务器上执行以下操作之一:
localhost:8080上运行,而您的角应用程序在localhost:4200上运行时,我将假设您将它们运行在同一台主机上。如果您打算让它们在生产环境中的同一主机上运行,那么只需将后端服务器中的'Access-Control-Allow-Origin'头设置为'*'即可。
这将允许后端服务器接受来自任何来源的请求。然后您可以使用防火墙使外部连接可以访问端口8080 .
这是一个快速的修复(尤其是让事情在本地进行),但是并不理想,因为仅依靠防火墙是不可取的。Access-Control-Allow-Origin头设置为只接受您的角应用程序作为源。因此,如果您的应用程序与后端服务器(例如用于本地开发)位于同一主机上,则应该将其设置为http://localhost:4200。如果您的角度应用程序将在一个与Spring服务器不同的主机上,那么您将需要指定您的网站的域名。http://example.com在Access-Control-Allow-Origin头中(请参阅这 post,以获得有关如何使用此标题的更清晰解释)。我希望这能回答你的问题。
https://stackoverflow.com/questions/43934449
复制相似问题