【问题标题】:C# Using LIKE to see if X contains YC# 使用 LIKE 查看 X 是否包含 Y
【发布时间】:2009-02-12 23:35:46
【问题描述】:

我继承了下面的代码,但我很困惑,因为代码工作得很好,但我不相信它是正确的。我以前没有使用过 LIKE,所以我无法决定是否应该费心改变它。你觉得这个怎么样?

代码用于 db 中的过滤器,它检查 X 值是否包含 Y 值,在 X 中查找 X*(例如,Fun 和 Fan 中的匹配将是 F*),并且 X 不包含 Y。

感谢您的意见。

foreach (ListViewItem item in listView1.Items)
                {
                    strStuff += item.Text;
                    object o = item.SubItems[1].Tag;
                    switch ((int)item.SubItems[1].Tag)
                    {
                        case 0:
                            strStuff += " LIKE '%" + item.SubItems[2].Text + "%'"; //contains
                            break;
                        case 1:
                            strStuff += " LIKE '" + item.SubItems[2].Text + "'"; //allows * wildcard
                            break;
                        case 2:
                            _strCriteria += " NOT LIKE '%" + item.SubItems[2].Text + "%'"; //doesn't contain
                            break;

                        default:
                            strStuff += "\"" + item.SubItems[2].Text + "\"";
                            break;
                    }
                    strStuff += " And ";
                }

【问题讨论】:

  • 这看起来很容易受到 SQL 注入攻击
  • 内部应用程序永远不会受到攻击!?!?!我想知道我在哪里可以找到一些“快乐阳光员工土地”的员工......
  • 我发现几乎不可能保护员工免受攻击。他们不需要 SQL 注入来开始随机化客户订单。

标签: sql sql-server tsql sql-like


【解决方案1】:

虽然这看起来应该可以达到预期目的,但您确实应该转义附加到可能是 SQL 字符串的文本。

【讨论】:

    【解决方案2】:

    转义文本字符串以避免 SQL 注入,否则你很好。 SQL 中的 LIKE 进行字符串模式匹配,并接受各种通配符,如“%”和“_”。

    详细信息可以在herehere找到。

    【讨论】:

      【解决方案3】:

      它看起来对我来说是正确的,你必须提供更多的上下文来说明它是否真的正确。 如前所述,您必须寻找可能的 SQL 注入攻击(是网络应用程序)

      要了解 Sql LIKE 关键字的功能,只需直接尝试对数据库进行一些查询。

      【讨论】:

        猜你喜欢
        • 2011-01-10
        • 2010-11-29
        • 1970-01-01
        • 2020-11-20
        • 2018-09-06
        • 2018-11-21
        • 2020-01-17
        • 1970-01-01
        • 2016-12-05
        相关资源
        最近更新 更多