как удалить недопустимые символы из возвращаемого значения для метода шифрования, используемого в строке запроса vars - PullRequest
0 голосов
/ 12 января 2012

Я занимаюсь разработкой проекта с помощью Asp.net, и у меня есть метод шифрования. когда я использую его для шифрования строки, он возвращает строку, содержащую некоторые символы, такие как «+», и, поскольку я использую его возвращенные значения в строке запроса, мне нужно удалить эти символы

например:

http://localhost/Cpanel/CompanyInfo/Hotels/EditHotel/VKWbk+G9F6E=

Ошибка: ошибка HTTP 404.11 - не найдена Модуль фильтрации запросов настроен на отклонение запроса, который содержит двойную escape-последовательность.

http://localhost/Cpanel/CompanyInfo/Hotels/EditHotel/bprrmsZ6atI=

Отлично работает

это мой метод шифрования:

 public static string EncryptString(string Message)
        {
            string Passphrase = System.Configuration.ConfigurationSettings.AppSettings["CryptographyKey"];

            byte[] Results;
            System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();

            //Hash the passphrase using MD5            
            MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
            byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));

            TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
            TDESAlgorithm.Key = TDESKey;
            TDESAlgorithm.Mode = CipherMode.ECB;
            TDESAlgorithm.Padding = PaddingMode.PKCS7;

            byte[] DataToEncrypt = UTF8.GetBytes(Message);

            try
            {
                ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
                Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
            }
            finally
            {
                TDESAlgorithm.Clear();
                HashProvider.Clear();
            }

            return HttpUtility.HtmlEncode(Convert.ToBase64String(Results));
        }

как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 12 января 2012

Кажется, ваше "шифрование" - это кодировка base64.Base64 использует только буквенно-цифровые символы, символ + и символ равенства =.Символ равенства не вызывает никаких проблем, только «+» (который интерпретируется как пробел в URI).Вы можете просто выполнить string.Replace () для + с _ и наоборот и сделать это в вашем главном контроллере, чтобы обойти это.

Другой подход (не требующий изменения кода) - разрешить двойное экранированиеyour web.config:

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true"/>
    </security>
</system.webServer>

Это будет работать только с IIS, но не с ASP.NET Development Server.Однако это налагает некоторые проблемы с безопасностью.Для деталей, вот очень хорошая статья, охватывающая это: http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

0 голосов
/ 12 января 2012

Когда вы готовите значение строки запроса, выполните:

Server.UrlEncode(Variable)

и затем передайте его в строку запроса.

Во время чтения строки запроса используйте метод для декодирования, например:

Server.UrlDecode("QuerySting"); 

Сообщите мне о любых проблемах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...