ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости
   
 
 
Опции темы Поиск в этой теме Опции просмотра

[заметка] Нестандартные символы в именах таблиц MSSQL
  #1  
Старый 17.04.2009, 14:03
Аватар для [x26]VOLAND
[x26]VOLAND
Moderator - Level 7
Регистрация: 07.06.2006
Сообщений: 556
Провел на форуме:
7549607

Репутация: 2702


Отправить сообщение для [x26]VOLAND с помощью ICQ Отправить сообщение для [x26]VOLAND с помощью AIM
По умолчанию [заметка] Нестандартные символы в именах таблиц MSSQL

(Тестировалось только Опере, 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 0chr.LengthstrOutput += Uri.HexEscapechr[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

Последний раз редактировалось [x26]VOLAND; 17.04.2009 в 17:45..
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ