0

我有多个网站,其中一些从 POST 获取参数,一些有 JQuery AJAX 处理程序,一些在查询字符串中,一些在 onclick asp:Button 或 ImageButton..

我想制作一种可以放在我所有网站中的方法,它可以处理所有问题。我做了这个方法:

private void Si()
{     
    foreach (String key in Request.Params)
    {
        string temp = Request[key];

        string[] array_split_item = new string[] { "–", ";", "/*", "*/", "@@", "char", "nchar", "varchar", "nvarchar", "alter", "begin", "cast", "create", "cursor", "declare", "delete", "drop", "end", "exec", "execute", "fetch", "insert", "kill", "open", "select", "sys", "sysobjects", "syscolumns", "table", "update", "<script", "<//script>", "‘" };


        foreach (string strItem in array_split_item)
        {
            temp = temp.ToLower().Replace(strItem.ToLower(), "");
        }
    }
}

2个问题:

  1. 这是制作这种方法的最佳方法吗?

  2. 是否有可能知道是否有人在这种方法中被“抓住”,试图注入一些东西?如果是,怎么做?

谢谢!

4

5 回答 5

8

不,这是一种“保护”免受 SQL 注入的可怕方式。不要这样做。它不仅非常不安全(你永远不会抓住一切),它还会严重破坏用户输入。为什么不允许用户使用“之后”、“等”等词?这些是非常常见的词。

使用参数化查询,就不可能通过用户输入注入任何代码。

于 2013-10-09T10:51:05.680 回答
1

最好使用参数化查询。

请通过此链接

http://bobby-tables.com/

于 2013-10-09T10:58:17.480 回答
0

这是一个非常糟糕的保护自己的方法。因此,简单的事情应该已经被 asp.net 本身验证了。

如前所述:使用参数化查询。

于 2013-10-09T10:54:53.867 回答
0

为了避免 sql 注入攻击,建议执行 2 个步骤: 1. 在 sql 请求中使用参数 2. 使用 HTML 编码/解码

于 2013-10-09T13:12:55.117 回答
0

我同意所有坚持使用参数化查询的发帖人。这就是要走的路。

此外,我想指出一点。您所从事的工作被称为黑名单验证,您可以在其中尝试考虑黑客会想到的所有事情并阻止他们进入。将事物列入黑名单的问题在于,黑客有更多的时间来弄清楚这些事情。首选的验证方法是白名单验证——您可以在其中决定允许哪些输入(而不是不允许哪些输入)。这可能最终是特定于页面的。你不能为此写一个通用的例程。

于 2013-10-09T14:35:36.797 回答