如何预防"regex injection"?



如何防止我称之为"正则表达式注入"?

我正在使用正则表达式来解析字符串,这些字符串可能看起来像-其中一个示例-

大小:, 数量: 20

编写一个正则表达式来捕获"10"one_answers"20"本身并不难。然而,"Size"one_answers"qty"是可定制的——用户可以选择其他单词代替。

所以我要做的是:

var pattern = String.Format(
                    @"{0}[ t]*(?<size>{1}|d*)[ t]*:[ t]*{2}:[ t]*(?<quantity>[d]*)",
                    sizeSign,
                    univerSizeAbbrev,
                    qtySign);

但是我如何"消毒"sizeSign, qtySign(或universzeabbrev)?

Regex不像SQL那样有过程参数(?),所以我如何确保,积极地确保sizeSignqtySign始终被视为字面量,无论它们是什么

使用正则表达式。逃脱:

逃最小的一组字符 (, *, +, ?, |, {, [, (,), ^, $,., #和空格),将它们替换为它们的转义码。这指示正则表达式引擎按字面意思解释这些字符,而不是作为元字符。

确保包含:

using System.Text.RegularExpressions;

然后像这样转义变量:

sizeSign = Regex.Escape(sizeSign);
qtySign = Regex.Escape(qtySign);

如果允许您假设标识符只能由字母字符组成,这就变得容易了。用

分别测试一下
str.Any(ch => ! Char.IsLetter(ch));

并拒绝任何返回false的选项

相关内容

  • 没有找到相关文章

最新更新