Форумы Форум www.proxomitron.ru
Все о программе Proxomitron
Главная  • FAQ для форума  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Личные сообщения  •  Вход
 HTML в юникоде - не фильтруется
 Сайт -> Форумы » Безопасность
Следующая тема
Предыдущая тема

Новая тема  Ответить
Автор Сообщение
Partyzan
Platinum Member
Platinum Member


Зарегистрирован: 15.02.2005
Сообщения: 319

СообщениеДобавлено: Сб, Авг 26 2006 05:04 Цитировать |  |  | 

Нашел вот такой сайтик

http://www.lambounfall.de/indexr.html

То, что он тип странички как видео отдает, это еще полбеды, поправил. Но вот там внутри - <html>яю< h t m l > < h e a d > ....

яю - это стандартное начало медиафайлов, возможно есть расчет на то, что IE будет автоматом что-то проигрывать. А дальше идет HTML, но в юникоде, после каждого символа стоит нулевой символ. В тексте еще местами видны вкрапления данных. Ни Проксомитрон такое не фильтрует, ни Мозилла не открывает. В IE открывать как-то не хочется, еще подумает, что это играть надо, ну его :-)

Как такое чудо преобразовать в нормальный вид можно, чтобы фильтры работали? Ну то есть, в общем случае, вдруг еще кто додумается до такого изврата. У меня пока только есть мысль повырезать нулевые символы, что тоже пока неясно как сделать.

Когда на страничке фильтры не работают - это ж ЧП, блин.
К началу Профиль Сообщение
vital mogilny
Advanced Member
Advanced Member


Зарегистрирован: 24.03.2005
Сообщения: 89

СообщениеДобавлено: Сб, Авг 26 2006 13:31 Цитировать |  |  | 

По адресу http://www.geocities.com/sidki3003/prox-down.html
есть неплохой, но очень непростой набор фильтров.
У него, в частности, есть возможность работы с юникодом.
К сожалению, все кириллические символы он превращает в минусы.
К началу Профиль Сообщение
Partyzan
Platinum Member
Platinum Member


Зарегистрирован: 15.02.2005
Сообщения: 319

СообщениеДобавлено: Вс, Авг 27 2006 01:40 Цитировать |  |  | 

В общем-то, думаю, каждый под себя фильтры пишет, а что не свое, то разбирается на кирпичики, осмысливается и вставляется в свой код.

Спасибо, полазил я по тому набору, как там идет работа с юникодом, не осознал, зато выяснил, что [%00] - нулевой символ. Соответственно, если его поубивать, то текст будет фильтроваться.

Втупую удалять не получилось, в конечном итоге решил брать кусками, делать цикл по повторам и записывать результат в стековую переменную. Стабильности хватания кусков я не добился, решил брать от угловой скобки до скобки.
Пару часов убил на отладку, получилось вот такое:

Name = "Патчим юникод --Partyzan"
Active = TRUE
Multi = TRUE
Limit = 512
Match = "([<>])\2([%00]|[%01]|[%02]|[%03]|[%04])(([^%00])\#([%00]|[%01]|[%02]|[%03]|[%04]))++([<>])\3"
Replace = " \2\@\3"

С точки зрения безопасности неплохо, фильтры работают, оформление сохраняется. Теряется только весь неанглийский текст.
К началу Профиль Сообщение
vital mogilny
Advanced Member
Advanced Member


Зарегистрирован: 24.03.2005
Сообщения: 89

СообщениеДобавлено: Вс, Авг 27 2006 15:26 Цитировать |  |  | 

Мне показалось, что работает твой вариант не совсем корректно - на приведенной, в качестве примера странице сбивалось форматирование. А чтобы "запустить" чистку юникода из набора Sidki нужно импортировать четыре нижеприведенных фильтра:

Цитата:
[Patterns]
Name = "Top All Mark: Start 4.07.11 (multi) [sd] (d.r)"
Active = TRUE
Multi = TRUE
URL = "^$TST(spBounds=*)"
Limit = 1
Match = "$STOP()"
Replace = "\ø\þ\ø"

Name = "Top Remove: Unicode BOM: HTML 6.02.23 (multi) [sj sd] (d.1)"
Active = TRUE
Multi = TRUE
URL = "$TYPE(htm)(^$TST(spBounds=*)|$TST(keyword=*.a_code.*))"
Limit = 1024
Match = "øþø$STOP()"
"("
"[%ff][%fe]$SET(1=le_low)"
"|[%fe][%ff]$SET(1=be_high)"
"($TST(volat=*.log:[12]*)$ADDLST(Log-Rare,WEB HTML_Unicode html\t\1 \t\u)|)"
"|([^%00][%00][^%00][%00][^%00][%00])\0$SET(1=le_low)"
"($TST(volat=*.log:[12]c.*)$ADDLST(Log-Rare,WEB HTML_Unicode html - No BOM\t\1 \t\u)|)"
"|?*[%ff][%fe]([^%00][%00][^%00][%00][^%00][%00])\0$SET(1=le_low)"
"($TST(volat=*.log:[12]c.*)$ADDLST(Log-Rare,WEB HTML_Unicode html - Top UTF8\t\1 \t\u)|)"
")"
""
"&(^*<html)$SET(bom=\1)"
"($TST(volat=*.log:2*)$ADDLST(Log-Main,[$DTM(d T)]\tWEB HTML_Unicode html\t\1 \t\u)|)"
Replace = "øþø\0"

Name = "Top Remove: Unicode BOM: Other 5.01.21 (multi) [sj sd] (d.1)"
Active = TRUE
Multi = TRUE
URL = "(^$TYPE(htm)|$TST(keyword=*.a_code.*))|$TST(volat=*.txt2html:3*)"
Limit = 6
Match = "øþø$STOP()"
"("
"[%ff][%fe]$SET(bom=le_low)"
"|"
"[%fe][%ff]$SET(bom=be_high)"
")"
"($TST(volat=*.log:2*)$ADDLST(Log-Main,[$DTM(d T)]\tWEB HTML_Unicode other\t$GET(bom) \t\u)|)"
Replace = "\ø\þ\ø"

Name = "UTF-16 to UTF-8 Page Converter 5.07.01 (multi) [sj sd mona] (d.1)"
Active = TRUE
Multi = TRUE
Limit = 192
Match = "(^$TST(bom=*))$STOP()PrxFail$TST()"
"|"
"("
""
"($TST(bom=le_low)(?)\#[%00]$SET(bom=le_low_ok)|$TST(bom=le_low_ok))"
"((?)\#[%00]|?[%20-%7E]$SET(#= )|??$SET(#=-))+{1,*}"
"|"
"($TST(bom=be_high)[%00](?)\#$SET(bom=be_high_ok)|$TST(bom=be_high_ok))"
"([%00](?)\#|[%20-%7E]?$SET(#= )|??$SET(#=-))+{1,*}"
""
")"
"$SET(dump=$GET(dump)\@)"
"|"
"(^?)$STOP()(^$TST(protect=1))$SET(bom=)$SET(stack=$GET(dump))$SET(dump=)$SET(1=$GET(stack))"
"($TYPE(htm)$SET(eExploit=$GET(eExploit)<span class=ProxFlyVar>unicode page</span><br />)|)"
Replace = "\1$SET(stack=)"

Name = "Top All Mark: End 5.11.17 [sd] (d.r)"
Active = TRUE
Limit = 3
Match = "øþø$SET(mHtml=0)$STOP()"


Мне, к сожалению, так и не удалось понять принципы его работы. Но ориентируется он изначально, судя по всему, на "яю".
К началу Профиль Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Пн, Авг 28 2006 12:10 Цитировать |  |  | 

Во-первых, про сайты в юникоде, а конкретно в UTF-16, есть весьма подробная тема. Т.е. описание проблемы там подробное, а вот решения нет.

Но насчёт [%00] -- это сильно. Спасибо, vital mogilny, за наводку! Это ведь, значит, и русские тексты можно парсить, и вообще.. В общем, здорово. И ведь в Changes.txt всё написано -- а я не знал :(

Пока туда не лазил, но вижу очевидный вариант: конвертировать весь UTF-16 во что-нибудь попроще, вплоть до cp1251. Примерно как Sidki, только попроще: BOM сразу и везде выкидывать, а перекдировку осуществлять для определённых сайтов по блоклисту символов: [%00][%20]$SET(0= ) и т.п.
К началу Профиль Сообщение
Partyzan
Platinum Member
Platinum Member


Зарегистрирован: 15.02.2005
Сообщения: 319

СообщениеДобавлено: Вт, Авг 29 2006 07:29 Цитировать |  |  | 

Перекодировать можно, но это уже тема для немного другого обсуждения, я думаю. Просто надо убить энное количество времени и внимательно составить блоклист. Согласен с chAlx, хорошо бы это перекодировать в cp1251.

Про ту тему - а вот хрен таким сайтам, а не байпасс. Лучше уж кракозябры лицезреть, чем на баннеры и прочее. Это мое личное мнение, конечно - думаю, большинство с этим не согласится :-)

Сейчас полез смотреть, что это за зверь BOM, и понял, что все немного глубже, чем кажется.

Отсюда:

unicode - это не кодировка. Это абстрактное описание.

"Hello": 00 48 00 65 00 6C 00 6C 00 6F
"Hello": 48 00 65 00 6C 00 6C 00 6F 00

Делают и так, и так. "FE FF" -- BOM -- Unicode Byte Order Mark. UCS-2/UTF-16, два варианта из-за BOM

utf8: от 1-го до 6-ти символов. Если буквы только латинские, то совпадает с ASCII.

А ещё бывают UTF-7 и UCS-4, и это не всё.
К началу Профиль Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Вт, Авг 29 2006 18:41 Цитировать |  |  | 

Partyzan:

Всё правильно, только вот это не понял:
Цитата:
utf8: от 1-го до 6-ти символов.

Возможно, имелось ввиду, что длина битовой последовательности для кодирования одного символа варьируется от 8 до 32 бит?
К началу Профиль Сообщение
Partyzan
Platinum Member
Platinum Member


Зарегистрирован: 15.02.2005
Сообщения: 319

СообщениеДобавлено: Чт, Авг 31 2006 01:03 Цитировать |  |  | 

Сам удивился, всегда считал, что там фиксированно два байта на символ.

Вообще, для перекодировки надо глубже вкопаться, только мне это пока неинтересно, мало сайтов на юникоде таком извращенном, что не фильтруются элементы.
К началу Профиль Сообщение
Partyzan
Platinum Member
Platinum Member


Зарегистрирован: 15.02.2005
Сообщения: 319

СообщениеДобавлено: Пн, Май 18 2009 23:17 Цитировать |  |  | 

Update: тот сайтик исправился, и других подобных особо замечено не было.
К началу Профиль Сообщение
Показать сообщения:      
 
Новая тема  Ответить

 Перейти:   




Следующая тема
Предыдущая тема
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


P o w e r e d b y p h p B B © p h p B B G r o u p :: T h e m e b a s e d o n FI T h e m e :: Часовой пояс: GMT + 3