所以基本上我想知道我使用Session变量的方式有多安全。
我有一个登录表单,用户输入他的用户名/密码,然后进行参数化,然后查询,如果存在用户名/密码,则从db表返回userID。这对每个用户都是唯一的。
当我有这个值时,这就是我想知道这种方式是否是在会话变量uID中存储userID的安全方式?无论如何这就是我的表现,
Session["uID"] = (int)dt.DefaultView[0]["userID"];
FormsAuthentication.RedirectFromLoginPage(username.Text, false);
Response.Redirect("userPage.aspx", false);
然后页面被重定向到另一个页面,我使用会话变量从数据库中获取用户表。
提前感谢您的反馈
答案 0 :(得分:40)
无论您使用哪种存储方法(内存,会话状态服务器或数据库),会话状态都完全保留在服务器端。
因此,除非您的服务器被黑客攻击,否则会话变量是安全的。如果您的服务器遭到入侵,黑客只能访问自己会话中的数据,除非他找到了分析IIS进程内存的方法。
答案 1 :(得分:15)
非常安全,.NET会话变量与可以从客户端查看的cookie变量不同,此实例中的会话变量只能从C#代码访问。
因此,您可以安全地知道,除了运行后台的代码之外,任何人/事物都无法编辑Session变量。
与您的问题没有完全相关,但在您的情况下可能很有用:
您还可以在Session中存储整个对象,因此您可以在会话中存储用户对象,例如
user_Class user = new user_Class();
user.UID = 1;
Session["User"] = user;
然后在每页的加载中重新加载它。
user_Class user = (user_Class)Session["User"];
然后,您每次都可以从会话中获取user.UID。
答案 2 :(得分:3)
说到会话,您可以放心,数据无法直接访问。如果由于某种原因,您的应用程序直接从会话中返回可能被利用的数据,但很少有任何理由这样做,因此风险相当小。
会话中最危险的部分是会话劫持。请注意,即使您的所有数据都安全地存储在服务器上,我们仍然需要处理整个“HTTP无状态”问题。因此,必须在客户端上存储某种标识符,以便服务器可以查找正确的会话数据。但是,如果另一个系统获得该ID的支持,那么只要服务器保持会话活动,他们就可以伪装成你。
除了不断解决您网站中的任何跨站点脚本编写潜力之外,如果没有安全连接,您无法做很多事情。即便如此,它也可能被不正确地实施。
答案 3 :(得分:2)
一切都很好,直到您的网站超过单个服务器。然后你必须迁移你的session provider to a state server or back it off with sql server,这最终会变得有点糟糕。
有关会话安全性的全面问题,请参阅http://msdn.microsoft.com/en-us/library/ms178201%28v=vs.80%29.aspx。
答案 4 :(得分:0)
即使您的服务器没有被摧毁,您仍然很脆弱 使用MITM Attack可以轻松劫持会话,当攻击者获得会话时,他可以做任何你可以做的事情。
您可以使用技术来避免会话劫持,但请记住,如果存在编码问题等导致您的应用程序容易受到攻击,您仍然容易受到攻击。
使用SSL
SSL您的网站
生成Hash