У меня есть система, которая анализирует поток данных и на основе подписки многих пользователей ей необходимо ее отфильтровать. Однако эти фильтры могут содержать регулярные выражения, и мне нужно сделать их достаточно безопасными, чтобы злоумышленники не могли вставлять регулярные выражения, которые целенаправленно дорогостоящие CPU, чтобы уничтожить службу.Каков наилучший подход для обработки большого количества пользовательских регулярных выражений
Я интересно, что лучший подход должен быть,
В другой программе я сделал я это, порождая новую нить, которая выполняется поиск регулярных выражений обработки, и если эта нить работает дольше, чем предел, он был убит и вход заблокирован.
Однако эта система может обрабатывать тысячи записей каждую минуту, и я не могу себе представить, что я бы породил новый поток для каждого из них (на самом деле мне нужно зацикливать все подписки на каждую запись, чтобы она могла сотнями тысяч потоки каждую минуту).
Есть ли лучший способ справиться с этим? Должен ли я тестировать регулярные выражения с использованием некоторых тестовых данных после создания подписки? Или, может быть, использовать отдельную очередь для каждого пользователя, который разбирается в другом потоке?
Кроме того, подходит другой подход, который приходит мне на голову, собирает статистику о том, сколько процессорного времени занимает каждый фильтр, и отключите их, которые слишком много едят, но на самом деле не справляются с «очень плохими» регулярными выражениями, которые могут нужно минут процессорного времени, чтобы закончить
Если кто-то интересно, я пишу это в C#, но этот вопрос является довольно общим и может применяться к любому языку
Я думал о блокировке всех вложенных повторений, но я боюсь, что будет слишком много ложных срабатываний. Кроме того, он не будет блокировать такие вещи, как '/.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*^/' ('O (п^16) '). –
Регулярные выражения могут быть слишком сложными для этой задачи. Сколько пользователей вы знаете, что понимаете регулярные выражения? Если вы создаете службу фильтрации RSS-каналов, не будут ли ключевые слова хорошими? –
Переместите фильтрующую часть на клиент. –