Если предположить, что сценарий Perl позволяет пользователям указывать несколько выражений текстового фильтра в файле конфигурации, существует ли безопасный способ, позволяющий им также вводить регулярные выражения, без возможности непреднамеренных побочных эффектов или выполнения кода? Без фактического разбора регулярных выражений и проверки их на наличие проблемных конструкций, то есть. Подстановки не будет, только совпадение.
Кроме того, есть ли способ проверить, является ли указанное регулярное выражение действительным, прежде чем его реально использовать? Я хотел бы выдавать предупреждения, если было введено что-то вроде /foo (bar/
.
Спасибо, З.
EDIT:
Спасибо за очень интересные ответы. С тех пор я обнаружил, что следующие опасные конструкции будут оцениваться в регулярных выражениях только при использовании прагмы
use re 'eval'
:
(?{code})
(??{code})
${code}
@{code}
По умолчанию no re 'eval'
; поэтому, если я что-то упускаю, то можно безопасно читать регулярные выражения из файла, единственной проверкой является eval / catch, отправленный Axeman. По крайней мере, я не смог спрятать в них ничего злого в своих тестах.
Еще раз спасибо. Z.