首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >持久Cookie REST Api网站/移动应用程序的安全实现

持久Cookie REST Api网站/移动应用程序的安全实现
EN

Stack Overflow用户
提问于 2019-06-25 11:27:39
回答 1查看 291关注 0票数 3

所以我现在的状态是我有一个REST服务器(ASP.Net web ),这是一个纯Html的网站,它通过ajax /REST和get与服务器通信,我还有一个移动应用程序,它通过ajax /REST和get进行通信。

我使用Basic Auth header来保护请求,web服务器将解密auth报头的内容,然后进行验证。

系统会受到什么样的攻击?另外,我应该实现什么样的安全性。

我读过关于CSRF攻击的文章,我认为我的系统对它没有保护,但是我不知道如何在REST上实现它。

那么偷饼干的攻击呢。由于我的系统使用持久化的cookie来存储令牌,如何处理这种攻击?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-06 12:40:47

为了防止CSRF攻击,必须配置后端(ASP.NET Web )和前端( prevent )以防止这种攻击。

取自https://angular.io/guide/security#xsrf

为了防止XSRF,应用程序必须确保用户请求来自真正的应用程序,而不是来自不同的站点。服务器和客户端必须合作来阻止这种攻击。 在一种常见的反XSRF技术中,应用服务器后端在cookie中发送随机生成的身份验证令牌。客户端代码读取cookie,并在所有后续请求中添加带有令牌的自定义请求头。服务器将接收到的cookie值与请求头值进行比较,如果值丢失或不匹配,则拒绝请求。 这种技术是有效的,因为所有浏览器都实现了相同的原始策略。只有设置cookie的网站上的代码才能从该站点读取cookie,并对该站点的请求设置自定义标头。这意味着只有应用程序才能读取此cookie令牌并设置自定义标头。evil.com上的恶意代码不能。

考虑到这一点,这里有另一个来自角HttpClient文档的引用,它解释了如何实现它。

取自https://angular.io/guide/http#security-xsrf-protection

在执行HTTP请求时,拦截器从cookie中读取令牌,默认情况下是XSRF-令牌,并将其设置为HTTP标头XSRF令牌。因为只有在您的域中运行的代码才能读取cookie,所以后端可以确定HTTP请求来自您的客户端应用程序,而不是攻击者。 默认情况下,拦截器会在所有变异请求(POST等)上发送此标头。相对URL,而不是在GET/HEAD请求或具有绝对URL的请求上。 您的服务器需要在页面加载或第一个GET请求上在名为XSRF的JavaScript可读会话cookie中设置令牌。在随后的请求中,服务器可以验证cookie是否与XSRF报头匹配,因此确保只有在您的域中运行的代码才能发送请求。令牌必须对每个用户都是唯一的,并且必须由服务器进行验证;这将阻止客户端创建自己的令牌。将令牌设置为站点身份验证cookie的摘要,并添加安全性。

要注意的要点是:

  1. 在加载角应用程序时,它应该首先对后端进行API调用,以检索一个身份验证令牌,该令牌被保存为一个名为“XSRF”的cookie。可能在根组件(app.component.ts)的某个地方,ngOnInit()听起来是个不错的地方。
  2. 默认情况下,身份验证令牌将在所有变异请求(如POST )上自动注入到http头中。(注意到这一点,它是无文档的:Angular 6 does not add X-XSRF-TOKEN header to http request)。除非您返回一个自定义名称cookie,否则您必须使用角的HttpClientXsrfModule。
  3. 考虑到这一点,您的XSRF在接收请求时也应该对ASP.NET令牌进行验证。

关于第二个问题,cookie劫持是通过XSS完成的。

XSS漏洞通常发生在应用程序获取用户输入并将其输出到页面而不进行验证、编码或转义时。

角在默认情况下消毒输入的标签。然而,这是如果你做的事情“角度的方式”。如果您使用第三方库(如jQuery )来操作DOM,而不是使用角的renderer2模块,则可能会失去这种保护。

摘自:https://angular.io/guide/security#xss

同样,如果您与操作DOM的其他库进行交互,则很可能不会有与角插值相同的自动清除功能。避免直接与DOM交互,而是在可能的情况下使用角度模板。 对于不可避免的情况,使用内置的角度消毒函数。使用DomSanitizer.sanitize方法和适当的SecurityContext清理不受信任的值。

为了提高安全性,您还应该对后端中的任何变异请求(如PUT或POST)进行消毒。

很难为您提供代码示例,因为您的问题似乎是一个更基于理论的问题。

我希望你会阅读那些链接,我有超链接以上。它们肯定更详细,解释得更好.我希望它至少会给你指明正确的方向,开始做什么。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56753038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档