- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在使用 ASP.NET Core 构建 3 个不同的应用程序:MVC 应用程序、API、SPA(不是 Angular)。此应用程序中的所有操作仅适用于授权用户。这就是我们使用 IdentityServer 保护它们的原因。
我们使用 cookie 来存储不记名 token 的值。据我所知,cookie 的值会自动发送到服务器。但因为它应该添加为授权 header ,所以浏览器不会自动完成此操作。
这是否可以降低 CSRF 攻击的可能性?或者,CSRF 仍然可以使用不记名代币吗?我们是否仍然需要添加 CSRF 代币?
最佳答案
如果我理解你是对的,MVC 和 SPA 都会使用 Identity Server 对用户进行身份验证,并将 token 存储在主要的 cookie 中以用于访问 API。
一般来说,这里有两种情况:
您的 cookie 是 HTTP only (无法在前端访问)。然后,您将 cookie 发送到 MVC 和 SPA 服务器端,后者提取 cookie 并将请求进一步发送到 API。在这种情况下,您像往常一样容易受到 CSRF 的攻击,因为您确实使用 cookie 进行了有效的身份验证,并且随后的 token 提取和针对 API 的承载身份验证完全基于自动 cookie 身份验证的结果。
Cookie 可在前端访问。在这种情况下,您可以使用 Javascript 读取它们,并将经过身份验证的请求发送到 MVC 和 SPA 服务器端(以进一步传递到 API)或直接发送到 API,使所有后端忽略可能受到损害的 cookie 内容。在这种情况下,您不易受到 CSRF 的影响(正如您所指出的,必须显式构造承载身份验证 header )。但是,您很容易受到 XSS ( cross site scripting ) 的攻击:使用数据验证/卫生中的安全漏洞或简单的第三方依赖项注入(inject)到页面中的任何代码都可以读取 cookie 并将其重新发送到任何服务器。这种情况与使用本地/ session 存储非常相似,因此任何描述其漏洞的文章也适用于您的场景(例如 here )。
所以你必须在CSRF或XSS之间做出选择作为主要攻击方式。
可以通过防伪 token 完全防止 CSRF,但如果不这样做,攻击很容易组织。
XSS 理论上很难在现代开发中完全防止,因为您使用了大量的第三方库(另一个 XSS 攻击向量 - 输入卫生通常不是什么大问题,因为大多数 MVC 框架都是这样做的)默认情况下 like ASP NET Core )。但是,您有很大的机会避免它,这使得此选项在许多情况下成为合理的选择 e.g. Auth0 recommends it 。
关于asp.net-mvc - 不记名代币和 CSRF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44197680/
我是一名优秀的程序员,十分优秀!