Автор |
Сообщение |
Partyzan
Platinum Member

Зарегистрирован: 15.02.2005
Сообщения: 319
|
Нашел вот такой сайтик
http://www.lambounfall.de/indexr.html
То, что он тип странички как видео отдает, это еще полбеды, поправил. Но вот там внутри - <html>яю< h t m l > < h e a d > ....
яю - это стандартное начало медиафайлов, возможно есть расчет на то, что IE будет автоматом что-то проигрывать. А дальше идет HTML, но в юникоде, после каждого символа стоит нулевой символ. В тексте еще местами видны вкрапления данных. Ни Проксомитрон такое не фильтрует, ни Мозилла не открывает. В IE открывать как-то не хочется, еще подумает, что это играть надо, ну его :-)
Как такое чудо преобразовать в нормальный вид можно, чтобы фильтры работали? Ну то есть, в общем случае, вдруг еще кто додумается до такого изврата. У меня пока только есть мысль повырезать нулевые символы, что тоже пока неясно как сделать.
Когда на страничке фильтры не работают - это ж ЧП, блин.
|
|
|
К началу |
Профиль Сообщение |
 |
vital mogilny
Advanced Member

Зарегистрирован: 24.03.2005
Сообщения: 89
|
|
К началу |
Профиль Сообщение |
 |
Partyzan
Platinum Member

Зарегистрирован: 15.02.2005
Сообщения: 319
|
В общем-то, думаю, каждый под себя фильтры пишет, а что не свое, то разбирается на кирпичики, осмысливается и вставляется в свой код.
Спасибо, полазил я по тому набору, как там идет работа с юникодом, не осознал, зато выяснил, что [%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

Зарегистрирован: 24.03.2005
Сообщения: 89
|
Мне показалось, что работает твой вариант не совсем корректно - на приведенной, в качестве примера странице сбивалось форматирование. А чтобы "запустить" чистку юникода из набора 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

Зарегистрирован: 30.06.2004
Сообщения: 2635
Откуда: SPb
|
Во-первых, про сайты в юникоде, а конкретно в UTF-16, есть весьма подробная тема. Т.е. описание проблемы там подробное, а вот решения нет.
Но насчёт [%00] -- это сильно. Спасибо, vital mogilny, за наводку! Это ведь, значит, и русские тексты можно парсить, и вообще.. В общем, здорово. И ведь в Changes.txt всё написано -- а я не знал :(
Пока туда не лазил, но вижу очевидный вариант: конвертировать весь UTF-16 во что-нибудь попроще, вплоть до cp1251. Примерно как Sidki, только попроще: BOM сразу и везде выкидывать, а перекдировку осуществлять для определённых сайтов по блоклисту символов: [%00][%20]$SET(0= ) и т.п.
|
|
|
К началу |
Профиль Сообщение |
 |
Partyzan
Platinum Member

Зарегистрирован: 15.02.2005
Сообщения: 319
|
Перекодировать можно, но это уже тема для немного другого обсуждения, я думаю. Просто надо убить энное количество времени и внимательно составить блоклист. Согласен с 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

Зарегистрирован: 30.06.2004
Сообщения: 2635
Откуда: SPb
|
Partyzan:
Всё правильно, только вот это не понял:
Цитата: |
utf8: от 1-го до 6-ти символов. |
Возможно, имелось ввиду, что длина битовой последовательности для кодирования одного символа варьируется от 8 до 32 бит?
|
|
|
К началу |
Профиль Сообщение |
 |
Partyzan
Platinum Member

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

Зарегистрирован: 15.02.2005
Сообщения: 319
|
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
|