【发布时间】:2013-05-14 14:32:31
【问题描述】:
我正在开发一个应用程序,它使用 Session 变量来跟踪用户,检查母版页是否存在,否则会导致他们退出登录。我想将其更改为表单身份验证,因为我读到它更安全并且数据已加密。
谁能告诉我哪些数据实际上是加密的?我尝试在我的网站上设置表单身份验证,它工作正常,用户被正确跟踪,并且无法在不登录的情况下访问页面。但是,当我使用 Fiddler 查看请求正文时,我看到了所有表单字段内容。黑客不能使用它来更改数据并重新提交请求,就像他们使用从 Session 变量生成的 cookie 一样?这个应用程序没有使用 SSL,所以我知道 SSL 会加密正文,但我认为这也是 Forms Authentication 会做的事情。否则它会加密什么,只是 cookie 中的 Session ID?
这是我使用的代码:
<authentication mode="Forms">
<forms loginUrl="default.aspx" name=".ASPXFORMSAUTH_Test" defaultUrl="home.aspx" protection="All"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
在登录页面我尝试手动创建cookie:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
txtEmail.Text,
DateTime.Now,
DateTime.Now.AddMinutes(30),
false,
txtEmail.Text,
FormsAuthentication.FormsCookiePath);
// Encrypt the ticket.
string encTicket = FormsAuthentication.Encrypt(ticket);
// Create the cookie.
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
// Redirect back to original URL.
Response.Redirect(FormsAuthentication.GetRedirectUrl(txtEmail.Text, false));
我也试过:
FormsAuthentication.RedirectFromLoginPage(txtEmail.Text, false);
早些时候,得到了相同的结果,Fiddler 中的请求正文显示了所有正在提交的字段及其内容。
【问题讨论】:
-
不是您问题的答案(我猜 cookie 值包含一些哈希信息,但不确定。)。无论如何,您不应该手动设置 cookie。您应该依赖 FormsAuthentication.SetAuthCookie。这里有一些细节:stackoverflow.com/a/15199149/1236044
标签: asp.net