我不知道如果我只是过于乐观,但有没有办法隐藏在URL中返回的查询字符串?
我在这个场景是在那里我有page1.aspx这个通过后重定向命令到外部服务器,并返回它page2.aspx。 我有这个唯一的问题是,返回变量的查询字符串的URL仍然离开了。
我只是想掩盖从普通用户的丑串/信息。 那么,有没有编辑和重新加载,在页面加载方法还是我只需要保存一个中间人页面上的变量,然后打2页的方式。
我不知道如果我只是过于乐观,但有没有办法隐藏在URL中返回的查询字符串?
我在这个场景是在那里我有page1.aspx这个通过后重定向命令到外部服务器,并返回它page2.aspx。 我有这个唯一的问题是,返回变量的查询字符串的URL仍然离开了。
我只是想掩盖从普通用户的丑串/信息。 那么,有没有编辑和重新加载,在页面加载方法还是我只需要保存一个中间人页面上的变量,然后打2页的方式。
我不喜欢这种方法,但它会奏效。
一旦你知道你在哪里,你需要是可以的Response.Redirect到相同的页面,他们将不复存在。
什么是这些查询字符串变量的由来? 您不能提交的所有数据作为POST数据,因此没有查询字符串?
你可能也使用
Context.RewritePath("/foo.aspx")
这里有一个ScottGu博客文章URL重写的链接。
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
一段时间回来我做了一些HTTP编码加密/解密用于此目的的方法。 有时在asp.net你需要使用的查询字符串,但你还需要最终用户不知道的价值。 我要做的就是基地64编码,加密值,基于哈希我的私有密钥值,并用粘在一起,他们 - 。 在另一边我检查左侧哈希来验证真伪,并解密右侧。 一个非常好的小问题,就是+(这是一个有效的base64字符串值)等于在HTML编码空间,所以我考虑到这一点的解密。
我用这种方法就是加密值添加到查询字符串,然后将其解密的另一边
private const string KEY = "<random value goes here>";
public static string EncryptAndHash(this string value)
{
MACTripleDES des = new MACTripleDES();
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
des.Key = md5.ComputeHash(Encoding.UTF8.GetBytes(KEY));
string encrypted = Convert.ToBase64String(des.ComputeHash(Encoding.UTF8.GetBytes(value))) + '-' + Convert.ToBase64String(Encoding.UTF8.GetBytes(value));
return HttpUtility.UrlEncode(encrypted);
}
/// <summary>
/// Returns null if string has been modified since encryption
/// </summary>
/// <param name="encoded"></param>
/// <returns></returns>
public static string DecryptWithHash(this string encoded)
{
MACTripleDES des = new MACTripleDES();
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
des.Key = md5.ComputeHash(Encoding.UTF8.GetBytes(KEY));
string decoded = HttpUtility.UrlDecode(encoded);
// in the act of url encoding and decoding, plus (valid base64 value) gets replaced with space (invalid base64 value). this reverses that.
decoded = decoded.Replace(" ", "+");
string value = Encoding.UTF8.GetString(Convert.FromBase64String(decoded.Split('-')[1]));
string savedHash = Encoding.UTF8.GetString(Convert.FromBase64String(decoded.Split('-')[0]));
string calculatedHash = Encoding.UTF8.GetString(des.ComputeHash(Encoding.UTF8.GetBytes(value)));
if (savedHash != calculatedHash) return null;
return value;
}
它保留查询字符串和表单变量(可选)。 它不显示它在重定向用户的网络浏览器的请求真实的URL。 Server.Transfer
发生没有浏览器一无所知。 浏览器请求一个页面,但服务器返回的另一个内容。
protected void btnServer_Click(object sender, EventArgs e)
{
Server.Transfer("~/About.aspx?UserId=2");
}