Amr*_*har 2 asp.net encryption query-string
我有一个现有的asp.net网站,它使用母版页构建,我需要隐藏或加密所有传递查询字符串值,而不需要更改大量代码.
任何人都可以帮我解决这个问题吗?还是有其他想法而不是隐藏或加密>>?
谢谢.
克里斯在答案中所说的是绝对正确的.如果合适,我会接受这个答案.
第一个问题是,如果要将查询字符串隐藏起来,是否需要使用查询字符串?也许会话状态之类的东西最好避免用户从一开始就看到它.
但是,除非这样 - 也许你有一个要求你无法解决的问题,你必须自己使用查询字符串.
您可以加密查询字符串,在您的情况下我会使用DPAPI,因此您不必担心密钥管理等麻烦事项.以下是一个示例用法:
public static string Encrypt(string val)
{
var bytes = System.Text.Encoding.UTF8.GetBytes(val);
var encBytes = System.Security.Cryptography.ProtectedData.Protect(bytes, new byte[0], System.Security.Cryptography.DataProtectionScope.LocalMachine);
return Convert.ToBase64String(encBytes);
}
public static string Decrypt(string val)
{
var bytes = Convert.FromBase64String(val);
var encBytes = System.Security.Cryptography.ProtectedData.Unprotect(bytes, new byte[0], System.Security.Cryptography.DataProtectionScope.LocalMachine);
return System.Text.Encoding.UTF8.GetString(encBytes);
}
Run Code Online (Sandbox Code Playgroud)
您必须添加对System.Security程序集的引用并导入名称空间System.Security.Cryptography.
以下是如何在页面中使用它的示例:
Response.Redirect("~/somepage.aspx?data=" + Server.UrlEncode(Encrypt("SomeSensitiveData")));
Run Code Online (Sandbox Code Playgroud)
并解密它:
var data = Decrypt(Request.QueryString["data"]);
Run Code Online (Sandbox Code Playgroud)
您可以使用它来加密查询字符串值,例如在需要解释查询字符串的页面上Encrypt使用Decrypt.
除了SSL之外,您还可以使用它; 这是一个好主意.这也意味着用户将无法查看查询字符串值.
使用DPAPI有一些注意事项.一个是它与负载平衡器不匹配.您必须使用其他东西,或设置负载均衡器以使用粘性会话.另一个是,如果他们用加密的查询字符串值为页面添加书签; 并且您移动到另一台服务器,然后所有书签都将包含服务器现在无法解密的加密查询字符串.
如果需要保留查询字符串(例如用于书签),并且它不仅仅是"临时"使用,那么您需要提供一个公共密钥,将其保存在安全的地方,并自己进行加密像AES这样的东西.
| 归档时间: |
|
| 查看次数: |
10483 次 |
| 最近记录: |