Действительно ли безопасно считать регулярные выражения из файла?

Использование консоли в качестве источника данных, безусловно, выполнимо, но есть проблема, заключающаяся в том, что ваше приложение не будет отказоустойчивым, поскольку Flink не сможет перематывать и воспроизводить входной поток в случае сбоя. [114 ]

Но это часто делается для прототипов и экспериментов, обычно с SocketTextStreamFunction, как в

env.addSource(new SocketTextStreamFunction("localhost", 9999, "\n", -1))

. Затем вы можете использовать netcat для подключения консоли к порту 9999

nc -lk 9999
[117 ] или, как требуют некоторые версии netcat,

nc -l -p 9000
12
задан Zilk 28 October 2008 в 20:38
поделиться

5 ответов

В зависимости от того, чему Вы соответствуете против, и версия Perl, который Вы выполняете, могли бы быть некоторые regexes, которые действуют как эффективная атака "отказ в обслуживании" при помощи чрезмерных предвидений, lookbehinds, и другие утверждения.

Вы являетесь лучшими от разрешения только маленького, известного подмножества regex шаблонов и расширения его осторожно, поскольку Вы и Ваши пользователи изучаете, как использовать систему. Таким же образом то, что много блогов, комментируя системы позволяют только небольшое подмножество HTML-тэгов.

В конечном счете Синтаксический анализ:: RecDescent мог бы стать полезным, если необходимо сделать сложный анализ regexes.

13
ответ дан 2 December 2019 в 04:26
поделиться

Это

eval { 
    qr/$re/;
};
if ( $@  ) { 
    # do something
}

компилирует выражение и позволяет Вам восстановиться с ошибки.

Можно наблюдать за злонамеренным выражением, так как Вы только собираетесь сделать соответствие путем поиска этих шаблонов, которые позволили бы произвольному коду быть выполненным:

(?: \( \?{1,2} \{  # '(' followed by '?' or '??', and then '{'
|   \@ \{ \s* \[   # a dereference of a literal array, which may be arbitrary code.
)

Удостоверьтесь, что Вы компилируете это с x флаг.

11
ответ дан 2 December 2019 в 04:26
поделиться

Необходимо будет, вероятно, сделать некоторый уровень санитизации. Например, perlre страница справочника описывает следующую конструкцию:

(?{ code })

который позволяет исполняемый код в соответствии шаблона.

5
ответ дан 2 December 2019 в 04:26
поделиться

Я предложил бы не доверять никаким регулярным выражениям от пользователей. Если Вы на самом деле полны решимости сделать так, выполните жемчуг в инфекции (-T) режим. В этом случае Вам будет нужна некоторая форма проверки. Вместо того, чтобы использовать Синтаксический анализ:: RecDescent для записи Вашего собственного синтаксического анализатора регулярного выражения как другой ответ предлагает, необходимо использовать существующий YAPE:: синтаксический анализатор Regex regexp, который, вероятно, быстрее, был записан экспертом и работами как очарование.

Наконец, начиная с жемчуга 5.10.0, можно включить различные механизмы регулярного выражения в жемчуг (лексически!). Вы могли проверить, существует ли менее мощный механизм регулярного выражения, доступный, чей синтаксис более легко поддается проверке. Если Вы хотите спуститься по тому маршруту, прочитайте описание API, ре Авара:: механизм:: Плагин, или в общем выезде любой из сменных механизмов Авара.

5
ответ дан 2 December 2019 в 04:26
поделиться

Безопасный модуль имел бы какое-либо применение относительно компиляции/выполнения недоверяемых регулярных выражений?

0
ответ дан 2 December 2019 в 04:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: