October 2017

S M T W T F S
12 34567
8910111213 14
15 161718192021
22232425262728
293031    

Style Credit

Expand Cut Tags

No cut tags
Thursday, July 13th, 2017 03:26 pm
TIL another Java WTF: you can not interrupt regex matches. I mean you can try, but it would just ignore that. So for any Java service that has regex matching and timeouts, that's DoS-in-a-box. 
Thursday, July 13th, 2017 10:35 pm (UTC)
Не очень понятно, как их предполагается "прерывать" кроме как убить тред. Да и никто нигде их как-то особо не прерывает.
Friday, July 14th, 2017 06:53 am (UTC)
предсказуемое время выполнения даёт только реалтайм ос с реалтайм джавой и хорошим дизайном

регекспы никто никогда нигде не прерывает
считается, что девелопер понимает и может писать норм. линейный паттерн

если вам нужно, то форкните апачевские, да и сановскую никто не запрещал копипастить

InterruptedException, Thread.interrupt -- это всё хинты, которые надо руками проверять
Wednesday, July 26th, 2017 06:08 pm (UTC)
>> предсказуемое время выполнения даёт только реалтайм ос с реалтайм джавой
>> считается, что девелопер понимает и может писать норм. линейный паттер
> Кем считается? Вы вообще поняли, о чём речь идёт, или чисто по ключевым словам реагируете?

вы написали про регэкспы "функция с непредсказуемым временем выполнения и без возможности его ограничить"

это чушь, потому что у регэкспов время выполнения предсказуемое, да, экспоненциальное, и нет, даже сортировку (qsort может выродиться в O(n^2) при специально неудачном подборе данных, "непредсказуемо" в вашем лексиконе) нельзя в библиотеке любого языка прервать

>> если вам нужно, то форкните апачевские, да и сановскую никто не запрещал копипастить
> Это вы о чём?

про библиотеки регэкспов
самые распространённые - встроенная java.util.regex и jakarta.apache.org/regexp/
исходники есть, если надо -- вставьте проверку на интеррапт
Thursday, July 13th, 2017 10:56 pm (UTC)
а Вы на джаве пишете?
Thursday, July 13th, 2017 11:50 pm (UTC)
Кстати, в сервисах обычно имеет смысл устраивать ограничение ресурсов на весь запрос. Оно решит проблемы и с парсингом XML, и со всем остальным.
Friday, July 14th, 2017 04:53 pm (UTC)
Тем, что запрос - единица работы. Имеет смысл ограничивать по ресурсам весь запрос, а не индивидуальные части.
Friday, July 14th, 2017 10:35 pm (UTC)
Нет смысла вставлять ограничения в конкретные вызовы API. Есть смысл делать ограничения на уровне единиц работы, а уж какие API там вызываются в процессе работы - неважно (но не знаю, есть ли такие ограничения в Джаве).
Friday, July 14th, 2017 11:18 pm (UTC)
Правильная единица - скорее не тред а, ClassLoader или как-то в этом роде, которая создает виртуальную под-машину со своим контекстом. Казалось бы, сборка мусора как раз позволяет все аккуратно позакрывать. Но на самом деле, конечно, наверное никто ничего такого не делает.
Monday, July 17th, 2017 08:44 pm (UTC)
Если его собирать сразу, а не неизвестно когда, и честно chfpe запускать finalizers - еще как достаточно. Ну можно еще исключение бросить чтоб оно раскрутило все блоки finally.
Tuesday, July 18th, 2017 12:22 am (UTC)
Таки да, управление памятью в нативном коде - это проблема для такого решения. В-общем, как ни гляди, а такие вещи надо засовывать в отдельный процесс, что мне и пришло недавно в голову: http://babkin-cep.blogspot.com/2017/03/os-support-for-thread-stopping.html

И в общем и целом оно нынче недорого, особенно по сравнению с выполнением байткода.
Friday, July 14th, 2017 12:38 am (UTC)
Ну ни хуя себе сюрпризы.

Когда-то меня в Гугле ругали, что я слишком долгий регекс написал для ловли емейл-адресов в чате. Ну типа, хоть и правильно, да медленно; давай неправильно, но быстро.
Friday, July 14th, 2017 02:33 pm (UTC)
Да, в общем, interruptible, действительно, как-то решает эти жуткие вопросы.
Friday, July 14th, 2017 07:11 pm (UTC)
Кстати да, наверно. Вообще интересная тема. Тьюринг тут уже где-то рядом. Busy Beaver machine.
Tuesday, July 18th, 2017 05:11 am (UTC)
Интересный вектор для DOS атаки