【发布时间】:2013-06-05 19:25:49
【问题描述】:
我发布了一些关于令牌和密码重置的问题,并最终设法解决了这一切。谢谢大家!
因此,在阅读某些字符在查询字符串中不起作用之前,我决定对查询字符串进行哈希处理,但正如您所猜到的那样,加号已被删除.
如何保护或散列查询字符串?
这是我收到的一封公司电子邮件的示例,字符串如下所示:
AweVZe-LujIAuh8i9HiXMCNDIRXfSZYv14o4KX0KywJAGlLklGC1hSw-bJWCYfia-pkBbessPNKtQQ&t=pr&ifl
在我的设置中,我只是使用 GUID。但这有关系吗?
在我的场景中,即使没有 GIUD,用户也无法访问密码页面。那是因为如果查询字符串与会话变量不匹配,页面设置为重定向 onload?
有没有办法处理查询字符串以给出上述结果?
这个问题更多的是关于获取知识。
更新:
这是哈希码:
public static string QueryStringHash(string input)
{
byte[] inputBytes = Encoding.UTF8.GetBytes();
SHA512Managed sha512 = new SHA512Managed();
byte[] outputBytes = sha512.ComputeHash(inputBytes);
return Convert.ToBase64String(outputBytes);
}
然后我将 HASH (UserID) 传递给 SESSION,然后将其作为查询字符串发送: 在下一页上,Session HASH 与 Query 不同,导致值不匹配并导致查询字符串无效。
注意:我创建了一个名为 Encryption 的类来处理所有的哈希和加密。
Session["QueryString"] = Encryption.QueryStringHash(UserID);
Response.Redirect("~/public/reset-password.aspx?uprl=" +
HttpUtility.UrlEncode(Session["QueryString"].ToString()));
我也尝试了此页面上提到的所有内容,但没有运气:
How do I replace all the spaces with %20 in C#
感谢阅读。
【问题讨论】:
-
Mads Kristensen 有blogged 的相关内容,您可能想查看一下。
-
那是因为页面设置为重定向 onload ... 那么,如果用户禁用 JavaScript,他们可以查看受限页面吗? (您永远不应该依赖客户端脚本来确保安全。)
-
你知道UrlEncode/UrlDecode吗?
-
我没有使用 JavaScript,也不打算为任何与安全相关的事情这样做。即使用户访问该页面,他们也需要有一个用户名。进入该页面需要回答密码问题并输入 12 位帐号或通过电子邮件发送链接。密码重置不提供用户名。顺便说一句,如果关闭 JS,页面仍然会重定向。
-
Aristos,我尝试了几种 Url Encoding 仍然无法正常工作。查询字符串不同。请参阅上面的更新代码:谢谢!