ASP.Net中的Int-UserID和Session不安全吗?

时间:2009-10-23 08:57:14

标签: asp.net

我正在为我的新主页开发我的登录信息。

现在我发现,我必须在浏览器的会话变量中保存类似userID(或我可以识别我的用户的其他值)。

目前我使用INT作为userID。

将userID放入会话中是不安全的?

E.g。当我从userID 111编辑会话变量手册到用户ID 112时,我作为一个完整的其他用户登录了吗?!

3 个答案:

答案 0 :(得分:2)

是的,仅仅依赖用户ID是不安全的。

您可能希望添加由服务器生成和记住的唯一身份验证令牌。这也是一个非常简单的解决方案,但它将停止操纵用户ID,因为无法猜到其他用户的身份验证令牌的正确值。

在执行请求的操作之前,您还需要在服务器端提交用户ID和每个请求的相应身份验证令牌,以便在服务器端进行联合验证。

P.S。如果您将此信息存储在客户端可访问且可以操作的cookie中,则上述情况适用。视图状态(以页面形式序列化)也可以被操纵。会话集合是服务器端变量,在客户端上不可用,因此无法对其进行操作。在后一种情况下,您的用户ID应该是安全的。

我建议你实现双系统:将用户ID和令牌存储在cookie和会话中,并使用相同的验证逻辑(为简单起见)。如果cookie被禁用,您将自动回退到使用会话而不更改您的代码。

答案 1 :(得分:1)

会话变量未存储在浏览器中,它存储在Web服务器上。 (通常无论如何。)
指示要使用哪个会话变量的标记存储在浏览器中。

因此,将userid存储在会话变量中很好,因为用户无法直接访问它。

如果用户要将会话令牌更改为另一个会话令牌,那将是一个问题,但他们需要先知道另一个令牌。 (我不知道自己该怎么做。) (您可以通过使用加密或其他标识(如IP地址等)来进一步减少这种情况,这实际上是您需要网站安全性的情况吗?)。

此外,如果您的网站需要用户登录,建议您使用https / SSL。

答案 2 :(得分:0)

正如Bravax所说,用户无法访问会话变量(他们可以访问的Cookie)。

如果你担心我会使用GUID,因为它们不是连续的,几乎不可能猜到。

另外,你看过.Net中内置的东西进行身份验证吗?看看FormsAuthentication。

HTH, ARRY