Как предотвратить то, что я бы назвал «инъекцией регулярных выражений»?
Я использую регулярные выражения для разбора строк, которые могут выглядеть - один из примеров -
Размер: 10, Кол-во: 20
Написание регулярного выражения для захвата "10" и "20" само по себе не сложно.
«Размер» и «Кол-во», однако, можно настраивать - пользователь может вместо этого выбрать другие слова.
Итак, что я делаю:
var pattern = String.Format(
@"{0}[ \t]*(?<size>{1}|\d*)[ \t]*:[ \t]*{2}:[ \t]*(?<quantity>[\d]*)",
sizeSign,
univerSizeAbbrev,
qtySign);
Но как мне «санировать» sizeSign, qtySign (или, если на то пошло, univerSizeAbbrev)?
Regex не имеет параметров процедуры, как в SQL (?), Поэтому как мне убедиться в том, что sizeSign и qtySign всегда рассматриваются как литералы, какими бы они ни были .