如何使用带有C#regex'的白名单拒绝姓名(人员和公司);s
我在使用C#regex实现web输入上允许字符的白名单时遇到了一些问题。我试图避免SQL注入和XSS攻击。我已经读到了允许字符的白名单 输入的是人名和公司名 其中一些问题是:如何使用带有C#regex'的白名单拒绝姓名(人员和公司);s,regex,xss,Regex,Xss,我在使用C#regex实现web输入上允许字符的白名单时遇到了一些问题。我试图避免SQL注入和XSS攻击。我已经读到了允许字符的白名单 输入的是人名和公司名 其中一些问题是: 带有符号和的公司名称。比如《吉姆父子》。符号是重要的,但它是危险的 名称中的Unicode字符(例如,我们有亚洲客户),使用其字符集输入名称。我需要把所有这些都列入白名单 公司名称可以有各种斜杠,如“S/A”和“S\A”。这些有风险吗 在看到数据库中已经存在的所有数据(并且是新用户输入的)之后,我发现自己想要允许几乎每个字
注意:这是一个遗留系统,因此我无法控制所有代码。我希望通过首先防止坏数据进入系统来减少攻击次数。公司名称中可能包含几乎任何类型的符号,因此我不知道这对您的效果如何。我会专注于直接保护自己免受各种攻击,而不是希望你的琴弦“自然”安全
(当然,它们可以有符号、冒号、分号、感叹号、连字符、百分号,以及在许多上下文中可能“不安全”的所有其他东西。)不要尝试清理名称,尤其是正则表达式
只要确保正确地转义这些值并将它们安全地保存在数据库中,并且在以HTML显示时将它们转义回来,我认为编写自己的regexp不是一个好主意:这将非常困难。尝试利用web框架的现有功能,因为网络上有很多资源。如果您说C#,我假设您使用的是ASP.NET,请尝试以下文章: 对如何保护自己免受注射攻击进行了大量讨论 简言之:
Regex reWhiteList = new Regex("^[A-Za-z ]+$")
检查整个字符串是否由这些字符组成。请注意,带有数字、句点、引号或任何其他内容的字符串将与此正则表达式不匹配,因此将无法通过白名单
if (reWhiteList.IsMatch(strInput))
// it's ok, proceed to step 2
else
// it's not ok, inform user they've entered invalid characters and try again
希望这能帮助更多人!对于名称和公司名称,您将很难制定一个严格的模式来进行检查,但您可以创建一个简单的允许字符列表,如我在这里所示。为什么要过滤或正则化数据,甚至转义数据,您应该使用绑定变量来访问数据库 这样,客户可以输入如下内容:anything'或'x'='x 您的应用程序并不关心,因为您的SQL代码没有解析变量,因为在准备语句时没有设置变量。即
'SELECT count(username) FROM usertable WHERE username = ? and password = ?'
然后在设置这些变量的情况下执行代码
这适用于PHP、PERL、J2EE应用程序等。这是我当前公司名称的regex白名单。拒绝这些字符之外的任何输入:
"^[0-9\p{L} '\-\.,\/\&]{0,50}$"
匹配任何unicode“字母”。因此,口音和亚洲字符被列入白名单\p{L}
有点问题,因为它可能允许javascript特殊字符\&
- 由于SQL注入,如果不使用参数化查询,
就会出现问题\'
可以允许“-”,如果不使用参数化查询,也有可能进行SQL注入\-
\p{L}
无法在客户端工作,因此如果不禁用客户端验证,则无法在ASP.NET正则表达式验证程序中使用它:EnableClientScript=“False”
步骤1就是我想要弄清楚的。参考文章提到了白名单。>>试图开发一个白名单,它不是社区可以分发的东西,我认为它是社区可以帮助的东西。我想把人们的名字列入白名单。大多数人都有:)这不是什么稀奇古怪的事。我同意你的方法。我只需要找出“reWhiteList”他们难道不能继续输入javascript并进行XSS攻击吗?在将数据发送到浏览器时,还需要对数据进行html编码。看起来很相似——也许会有帮助。