gpt4 book ai didi

asp.net-mvc - 如何使用 ASP.Net Web API 防止 session 跳跃?

转载 作者:行者123 更新时间:2023-12-05 00:28:39 26 4
gpt4 key购买 nike

创建一个尝试使用 RESTful API 的 angularjs 单页应用程序时,我遇到了一个似乎找不到答案的问题。我试图阻止 session 希望,登录观看请求的一位用户计算出他的帐户 ID 是 13。因此他执行相同的请求,但这次更改了获取帐户 ID 14 信息的请求。

因此,在用户登录后,我将 session 变量设置为他的帐户 ID,并将从 ajax 请求中去除帐户 ID。然后我尝试从继承自 ApiController 的类访问 Session。环顾四周后,我意识到存储 session 信息不是很 RESTful。

那么我将如何确保一个帐户无法访问另一个帐户的信息,因为他们查看了 ajax 请求并想出了如何操作 ajax 请求?

难道restful 不适合需要认证和授权的用户使用吗?我正在考虑可能会散列 ID 或其他东西,但我不确定这是正确的方法。

更新:

我现在有基于 token 的身份验证工作。但是对于如何防止某人摆弄 HTTP 请求并获取不属于他的信息,我仍然一无所知。例如,我想检索 ID 为 14 的帐户的所有用户。

HTTP Get /users/14

我有一个 token ,所以我知道在某个时候尝试使用 Web API 的人对自己进行了身份验证。我可以将其锁定为角色。但是没有什么可以阻止这个经过身份验证的人摆弄/攻击请求并执行以下操作
HTTP Get /users/58

现在此人已获得ID 58 信息的所有帐户。这是不属于账号14的信息,但现在他可以浏览其他人的信息了。

我需要有人知道来自浏览器的请求并说它是针对 ID 为 14 的帐户,它确实是帐户 14。我可以将该信息放入 token 中,但如何在处理程序中检查它或检查它Api Controller ?

最佳答案

您描述的问题并不是基于 REST 的服务所独有的。事实上,这是前 10 名 OWASP 漏洞(不安全的直接对象引用)之一。您将需要首先识别用户,然后对用户进行身份验证。为了识别,使用ID,例如用户ID。标识符可以是您想要的任何内容。身份验证后,您需要对用户进行身份验证。这是通过验证提供给应用程序的凭据(例如密码)来完成的。标识符和凭证可以是任何东西,比如旧用户名/密码,也可以是 token 或 API key 。手头的问题其实并不重要。通过身份验证后,您可以根据用户可以在您的应用中执行的操作来授权请求​​。无论您是否使用 token 、证书,authz 部分都是必须的。散列用户 ID 或使用某种方法隐藏事物是默默无闻的安全性,并不是一个好的做法。

假设您正在使用消息处理程序来验证用户提交的凭据。身份验证完成后,您可以将与经过身份验证的用户关联的帐号存储在 HttpRequestMessage 的属性集合中。 .这是在服务器端完成的,没有用户可以让系统存储一些随机帐号。只有与经过身份验证的用户关联的帐号才会存储在属性集合中。有了它,您现在可以授权请求。比如说,您可以编写一个授权过滤器来提取这个帐号并将其与 URI 中的帐号进行比较,以确定是否允许请求。通过对 GET 操作方法应用此过滤器,您可以确保只有正确的人才能看到正确的数据。

例如,用户 ID 为“abc”且密码为“pwd1”的用户向/users/14 发出 GET 请求。第一步是,您将验证用户 ID。如果您的商店中存在 ID 为“abc”且密码为“pwd1”的用户,您将认为该用户是真实的。作为此身份验证的一部分,您可以提取与用户“abc”关联的帐号。假设它是 15。您将在 request.properties 中存储 15。从您的授权过滤器中,您可以从 URI 中获取帐号,即 14,并将其与请求中的帐号进行比较,即 15。显然这些数字不匹配,您拒绝了 OnActionExecuting 中的请求。使用 401 过滤器的方法。

我上面描述的是一个简单的方法。更好的方法(在可扩展性方面)是使用声明,但在这里无法解释所有这些。您可以从 Dominick 的 blog 获得大量与基于声明的身份相关的信息。 .

关于asp.net-mvc - 如何使用 ASP.Net Web API 防止 session 跳跃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18568609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com