c# - URL 中的 ServiceStack 会话 ID
问题描述
美好的一天,我对这个话题不太熟悉,如果没有以最好的方式解释,请原谅。我使用 ServiceStack 作为我的后端 API 并启用了“AllowSessionIdsInHttpParams = true”。我通过我的网址传递 ss-id。我注意到我可以复制该 ss-id 并在不同的客户端(浏览器)中使用。ss-id 是否应该不针对用户代理/客户端进行验证,并且仅在客户端相同时才进行验证?
后端代码
//Configure Host
SetConfig(new HostConfig
{
DebugMode = false,
AllowSessionIdsInHttpParams = false,
UseSecureCookies = true,
UseSameSiteCookies = true,
AllowNonHttpOnlyCookies = true
});
// Plugins
Plugins.Add(new CorsFeature(AppConfig.allowedOrigins, "GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD", "Content-Type, Authorization, Accept, X-ss-id", true));
前端
var instance = axios.create({
baseURL: Vue.prototype.$AppConfig.URL_API,
withCredentials: true,
})
设置后端和前端都是 HTTPS。设置 allowedOrigins 而不是通配符 (*) 如果我使用它会给出不同的问题。
错误:401 -
解决方案
如果不针对用户代理/客户端验证 ss-id
不,cookie 用于识别会话,因为它是具有高熵的唯一 id,是 HTTP 客户端发送的最不可预测的标识符。它与其他承载令牌(例如 JWT 令牌或 API 密钥)没有太大区别,它们按原样验证承载,即无需额外的用户代理验证。
针对用户代理进行验证只是一种常见的、高度可预测和可欺骗的安全剧院,即如果他们能够从 HTTP 标头访问您的 Cookie,他们也可以访问所有其他 HTTP 标头。
您可以根据 IP 地址对其进行验证,但这会在网络更改时中断会话,例如,每当设备漫游 Wifi 点时,这就是通常不完成的原因。
为了最好地保护您的 cookie,它们应该仅通过 SSL 作为Secure 和 HTTP Only Cookies 发送(即ServiceStack中的默认值):
SetConfig(new HostConfig {
UseSecureCookies = true,
UseHttpOnlyCookies = true,
});
对于 CSRF 的额外保护,您可以启用SameSite Cookies:
SetConfig(new HostConfig {
UseSameSiteCookies = true,
});
尽管这可能会破坏跨站点功能和 Twitter OAuth 等第 3 方 OAuth 提供程序,但Lax
默认设置为。
推荐阅读
- html - CSS FlexBox递归模式递归地对齐一行不同宽度的两个项目
- docker - docker build 后执行脚本
- c# - 从方法签名中的父类推断泛型失败
- r - 如何rbind具有相同列名但顺序不同的多个data.frame
- android - 使用 spyk 和 coVerify 进行验证时出现奇怪的失败消息(额外参数)
- qt - 使用 QtConcurrent::mapped 连续应用多个函数
- html - 用户输入一些值后如何使输入字段不可编辑
- html - Use custom CSS for radio buttons in JQuery
- ruby-on-rails - Rails 6 + Capistrano - 没有这样的 puma.sock 文件
- javascript - JavaScript 更改 JavaScript 中某些值的键并保持其他键相同