我正在尝试创建一个函数,如果文本不包含任何可能允许SQL注入的输入,则该函数将返回true。我用流行的数据库操作符创建了一个正则表达式模式。
我不确定为什么它不起作用?
static void Main(string[] args)
{
bool validQuestionText = validateText("<script>");
if (validQuestionText == true)
{
Console.WriteLine("Valid Text");
}
else
{
Console.WriteLine("Invalid Text");
}
}
public static bool validateText(string input)
{
Regex nonTextRegex = new Regex(@"[^-<>=&%]");
if (nonTextRegex.IsMatch(input) || input == "")
{
return false;
}
else
{
return true;
}
}
即使我将传递给validateText()方法的字符串更改为不包含正则表达式中的任何字符,控制台中也始终显示无效文本,例如传入“脚本”而不是。
答案 0 :(得分:1)
[^-<>=&%]
表示除-<>=&%
以外的所有字符。字符集开头的^
是正则表达式中的否定。
但要小心,要小心。使用绑定变量来防止SQL注入。您尝试排除的字符集不会处理可能破坏SQL的内容。
例如,如果您的查询是
INSERT INTO logtable (user) VALUES ('$user')
攻击者通过巧妙的参数格式化将$user
设置为bobbytables');DROP TABLE logtable;--
,然后您的查询会说
INSERT INTO logtable (user) VALUES ('bobbytables');DROP TABLE logtable;--')
你和pwnd。除非您有丰富的经验,否则请不要自己尝试这样做。 Cybercrooks比我们更聪明,更有动力。