使用会话变量有多安全 – asp.net / c#

所以基本上我想知道我使用Session变量的方式有多安全。

我有一个登录表单,用户输入他的用户名/密码,然后进行参数化,然后查询,如果存在用户名/密码,则从db表返回userID。 这对每个用户都是独一无二的。

当我有这个值时,这就是我想知道这种方式是否是在会话变量uID中存储userID的安全方式? 无论如何我是这样做的,

Session["uID"] = (int)dt.DefaultView[0]["userID"]; FormsAuthentication.RedirectFromLoginPage(username.Text, false); Response.Redirect("userPage.aspx", false); 

然后页面被重定向到另一个页面,我使用会话变量从数据库中获取用户表。

提前感谢您的反馈

无论您使用哪种存储方法(内存,会话状态服务器或数据库),会话状态都完全保留在服务器端。

因此,除非您的服务器被黑客入侵,否则Session变量是安全的。 如果您的服务器遭到入侵,黑客只能访问自己会话中的数据,除非他找到了分析IIS进程内存的方法。

非常安全,.NET会话变量与可以从客户端查看的cookie变量不同,此实例中的会话变量只能从C#代码访问。

因此,您可以安全地知道,除了运行后台的代码之外,任何人/事物都无法编辑Session变量。

与您的问题没有完全相关,但在您的情况下可能很有用:

您还可以在Session中存储整个对象,因此您可以在会话中存储用户对象,例如

 user_Class user = new user_Class(); user.UID = 1; Session["User"] = user; 

然后在每页的加载中重新加载它。

 user_Class user = (user_Class)Session["User"]; 

然后你可以每次从session获取user.UID。

谈到会话,您可以放心,数据无法直接访问。 如果由于某种原因,您的应用程序直接从会话中返回可能被利用的数据,但很少有任何理由这样做,因此风险相当小。

会话中最危险的部分是会话劫持。 请注意,即使您的所有数据都安全地存储在服务器上,我们仍然需要处理整个“HTTP无状态”问题。 因此,必须在客户端上存储某种标识符,以便服务器可以查找正确的会话数据。 但是,如果另一个系统获得该ID的支持,那么只要服务器保持会话活动,他们就可以伪装成您。

除了不断解决您网站中的任何跨站点脚本编写潜力之外,没有安全连接,您无法做很多事情。 即便如此,它也可能被不正确地实施。

一切都很好,直到你的网站超过一台服务器。 然后你必须将会话提供程序迁移到状态服务器或使用sql server将其关闭,这最终会变得有点糟糕。

有关会话安全性的全面问题列表,请参见http://msdn.microsoft.com/en-us/library/ms178201%28v=vs.80%29.aspx 。

你仍然容易受到攻击,即使你的服务器没有被破解 ,使用MITM攻击可以轻易劫持会话,当攻击者获得你的会话时,他可以做你能做的任何事情。

您可以使用技术来避免会话劫持,但请记住,如果存在编码问题或类似问题导致应用程序容易受到攻击,您仍然容易受到攻击。

使用SSL

SSL您的网站

在此处输入图像描述

生成哈希

保护会话