Что Крис сказал в своем ответе абсолютно правильно. Я бы согласился с этим в ответ, если он подходит.
Первый вопрос: вы, , нуждаетесь в, чтобы использовать строку запроса, если вы скрываете ее от пользователя? Возможно, что-то вроде Session State лучше избегать, когда пользователь видит его в первую очередь.
Однако, за исключением этого - возможно, у вас есть требование, чтобы вы не могли работать, и вам абсолютно необходимо сделать это самостоятельно, используя строку запроса.
Вы можете зашифровать строку запроса, в вашем случае я бы использовал 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);
}
Вы должны добавить ссылку на System.Security
сборки и импортировать пространство имен System.Security.Cryptography
.
Вот пример того, как использовать его на странице:
Response.Redirect("~/somepage.aspx?data=" + Server.UrlEncode(Encrypt("SomeSensitiveData")));
И чтобы расшифровать его:
var data = Decrypt(Request.QueryString["data"]);
Вы можете использовать это, чтобы зашифровать значение строки запроса, такие как Encrypt
и используйте Decrypt
на странице, которая должна интерпретировать строку запроса.
Вы можете использовать это в дополнение к SSL; что является хорошей идеей. Это также означает, что пользователь не сможет увидеть значения строки запроса.
Есть предостережения от использования DPAPI. Во-первых, он плохо работает с балансирами нагрузки. Вам нужно будет использовать что-то еще или настроить балансировщик нагрузки для использования липкой сессии. Другим является то, что если они закланизуют страницу с зашифрованным значением строки запроса; и вы перешли на другой сервер, тогда все закладки будут содержать зашифрованные строки запросов, которые сервер не может расшифровать.
Если строки запроса необходимо сохранить (например, для закладок), и это не просто «временное» использование, тогда вам нужно будет найти общий ключ, сохранить его где-нибудь в безопасности и сделать шифрование себя с чем-то вроде AES.
Какой уровень обфускации вам нужен? Параметры строки запроса всегда будут отображаться в той или иной форме, если они не будут полностью исключены. – RedFilter
Мне нужно обфускать все значения строк запроса, которые я передаю между страницами по соображениям безопасности. –