2014-08-31 3 views
7

Скажите, что я хочу, чтобы пользователь вводил какое бы то ни было регулярное выражение, а также строку, которая будет соответствовать, и я проверю, соответствует ли она, используя Python re.compile. Это безопасно? Есть ли способ для вредоносного пользователя сбой или получить удаленное выполнение путем передачи в специально созданных строках?Безопасность регулярных выражений

+2

В качестве побочного примечания, в зависимости от ваших потребностей, возможно стоит рассмотреть простое выражение _glob_, а не полноценное регулярное выражение. Для большинства пользователей это проще понять. И это потребует гораздо меньшей мощности для обработки. Но опять же, это будет зависеть от ваших потребностей ... –

ответ

9

Я не думаю, что re.compile() будет проблемой. Конечно, это может вызвать исключение из недопустимых регулярных выражений, но вы можете легко их поймать. Режимы Python не позволяют вызывать код (в отличие от Perl, например), поэтому я не вижу механизм, который злоумышленник может использовать для вставки вредоносного кода в регулярное выражение.

На самом деле работа с регулярным выражением (через re.search() и т. Д.) Может быть проблемой, поскольку Python не принимает никаких мер предосторожности против catastrophic backtracking, что может привести к увеличению времени выполнения регулярного выражения.

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

Смежные вопросы