C#regex出错以防止SQL注入

时间:2017-10-24 15:39:20

标签: c# mysql regex sql-injection

我正在尝试创建一个函数,如果文本不包含任何可能允许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()方法的字符串更改为不包含正则表达式中的任何字符,控制台中也始终显示无效文本,例如传入“脚本”而不是。

1 个答案:

答案 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。除非您有丰富的经验,否则请不要自己尝试这样做。 Cyber​​crooks比我们更聪明,更有动力。

相关问题