RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1560946
Accepted
air2921
air2921
Asked:2024-01-10 05:23:23 +0000 UTC2024-01-10 05:23:23 +0000 UTC 2024-01-10 05:23:23 +0000 UTC

会话数据的泄露和修改

  • 772

出现了关于客户端的会话数据是否会被泄露或更改的问题。

假设我将用户数据保存在会话中

HttpContext.Session.SetString(ROLE, "User")

当从会话接收这些数据时,我不想获得不是User 的角色,但假设是Admin

因为在我的例子中,会话中的数据用于创建 jwt。

因此,据我了解,用户不会接收数据本身,他只接收会话标识符,并且假设数据不会被泄露或更改是合乎逻辑的,因为数据本身存储在服务器上,并且用户只有标识符,并不直接与该数据交互。

但我对此不确定,也许有一些值得担心的漏洞,如果有的话,请告诉我们。

如果有任何信息,我将非常感激。

我的情况,为什么我认为我需要会议:

主要端点验证数据并通常执行一些逻辑:

    [HttpPost("login")]
    public async Task<IActionResult> Login(UserModel userModel)
    {
        try
        {
            if (userModel.email is null || userModel.password is null)
                return StatusCode(422, new { message = AccountErrorMessage.InvalidUserData });

            var email = userModel.email.ToLowerInvariant();
            var user = await _dbContext.Users.FirstOrDefaultAsync(u => u.email == email);
            if (user is null)
                return StatusCode(404, new { message = AccountErrorMessage.UserNotFound });

            bool IsCorrect = _passwordManager.CheckPassword(userModel.password, user.password!);
            if (!IsCorrect)
                return StatusCode(401, new { message = AccountErrorMessage.PasswordIncorrect });

            var clientInfo = Parser.GetDefault().Parse(HttpContext.Request.Headers["User-Agent"].ToString());

            if ((bool)!user.is_2fa_enabled)
                return await FactLogin(clientInfo, user);

            int code = _generateCode.GenerateSixDigitCode();
            var emailDto = new EmailDto
            {
                username = user.username,
                email = user.email,
                subject = EmailMessage.Verify2FaHeader,
                message = EmailMessage.Verify2FaBody + code
            };

            await _emailSender.SendMessage(emailDto);

            HttpContext.Session.SetString(ID, user.id.ToString());
            HttpContext.Session.SetString(EMAIL, email);
            HttpContext.Session.SetString(USERNAME, user.username!);
            HttpContext.Session.SetString(ROLE, user.role!);
            HttpContext.Session.SetString(CODE, code.ToString());

            return StatusCode(200, new { message = AccountSuccessMessage.EmailSended });
        }
        catch (UserException)
        {
            _logger.LogCritical("When trying to update the data, the user was deleted");
            _tokenService.DeleteTokens();
            _logger.LogDebug("Tokens was deleted");
            return StatusCode(404);
        }
        catch (Exception)
        {
            return StatusCode(500);
        }
    }

验证端点:

    [HttpPost("verify/2fa")]
    public async Task<IActionResult> VerifyTwoFA([FromQuery] int code)
    {
        int correctCode = int.Parse(HttpContext.Session.GetString(CODE));
        int userId = int.Parse(HttpContext.Session.GetString(ID));
        string? email = HttpContext.Session.GetString(EMAIL);
        string? username = HttpContext.Session.GetString(USERNAME);
        string? role = HttpContext.Session.GetString(ROLE);

        if (email is null || username is null || role is null)
            return StatusCode(422, new { message = AccountErrorMessage.NullUserData });

        if (!code.Equals(correctCode))
            return StatusCode(422, new { message = AccountErrorMessage.CodeIncorrect });

        var clientInfo = Parser.GetDefault().Parse(HttpContext.Request.Headers["User-Agent"].ToString());
        var userModel = new UserModel
        {
            id = userId,
            username = username,
            email = email,
            role = role
        };

        HttpContext.Session.Clear();
        return await FactLogin(clientInfo, userModel);
    }

是的,当然,你可以再次向数据库请求数据,但我不想再次加载数据库

c#
  • 1 1 个回答
  • 51 Views

1 个回答

  • Voted
  1. Best Answer
    Pavel Mayorov
    2024-01-10T16:21:52Z2024-01-10T16:21:52Z

    会话状态(“会话”)存储在服务器内存(默认情况下)、DBMS 或某种 Redis 中。客户不能以任何方式改变它。

    然而,对此状态(会话标识符)的引用存储在cookie中,并且可以被攻击者利用XSRF(跨站点请求伪造)攻击。因此,请使用反 XSRF 令牌保护任何变异操作,并且在任何情况下都不要将 CORS 策略设置为“允许一切和所有人”。

    • 1

相关问题

  • 使用嵌套类导出 xml 文件

  • 分层数据模板 [WPF]

  • 如何在 WPF 中为 ListView 手动创建列?

  • 在 2D 空间中,Collider 2D 挂在玩家身上,它对敌人的重量相同,我需要它这样当它们碰撞时,它们不会飞向不同的方向。统一

  • 如何在 c# 中使用 python 神经网络来创建语音合成?

  • 如何知道类中的方法是否属于接口?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5