(Тестировалось только Опере, FF3, IE7) Недавно в процессе проведения SQL-инъекции на MSSQL столкнулся с трудностью. Как известно, в этой СУБД в именах таблиц можно использовать символы из разных алфавитов (не только латинские). В моём случае имя таблицы было на французском: 'Résultats' (Далее будет рассмотрен пример именно с этим вариантом). Здесь присутствовала буква 'é' ('e' с диакритическим знаком). Ошибка, выдаваемая сервером сообщала о несуществующей таблице. Это происходит потому, что по умолчанию браузер кодирует этот символ в URL используя 2 байта (%C3%A9), что, как стало ясно, не совпадало с кодировкой базы, и, следовательно, имя таблицы интерпретировалось как неверное. Я вспомнил, что французские символы нативно присутствуют в кодировке windows-1252 (она же Latin-1 или ISO 8859-1). Она как раз и содержит специфические символы европейских языков (французский, немецкий и т.п.). Подходящую программу для кодирования искать было лень и я набросал свой вариант на C#: PHP: private string Encode(string strInput) { Encoding enc = Encoding.GetEncoding(1252); char[] chr = enc.GetChars(enc.GetBytes(strInput)); string strOutput = ""; for (int i = 0; i < chr.Length; strOutput += Uri.HexEscape( chr[i++] )) ; return strOutput; } На PHP это ещё проще: Сохраняем скрипт с содержимым PHP: echo urlencode('Résultats'); в кодировке Windows-1252 и запускаем его. С помошью одного из способов я получил правильный URL-вариант данной буквы - %E9. Подставив в запрос 'R%E9sultats' всё прошло как полагается, что свидетельствовало о том что я выбрал верную кодировку (windows-1252). Естественно, данный метод подходит для других европейских языков. Для сербского, чешского, и восточноевропейских языков рекомендую использовать windows-1250. Информация по кодировкам: http://ru.wikipedia.org/wiki/Windows-1250 http://ru.wikipedia.org/wiki/Windows-1252
Интересная заметка! Многим будет полезно! Я допустим об этом не задумывался! P.S. Всем бы нам и мне в частности научиться анализировать, а не юзать готовые сплойты из статей...
Согласен очень интересная заметка, примерно такое же присутствует в mysql(насчет таблиц хз) в кодировки Windows-1251 символ %b3 означает тройку над строчкой(или что то типа этого) а в кодировки GBK это \ и возможен обход экранирования кавычки поясню: Когда пхп обрабатывает строчку(в кодировки Windows-1251 или другой) то это тройка вверху строки и не трогает его А в базе с кодировкой GBK это \ которого пхп не тронул PS взято из паблик эксплойта
Речь немного не о том. Я описал случай когда браузеры неверно воспринимают нестандартные символы. Дело не в базе как таковой (субд может быть любая), а в невозможности послать сам url-запрос.
привет всем, срочно нужно перекодировать в урл это символ ó. но возможности это сделать самому нету, помогите пжл. сайт бразильский.