首页 > 解决方案 > 将通配符字符串存储在列中(与 LIKE 运算符一起使用)会导致意外的查询结果或安全问题吗?

问题描述

将通配符字符串存储在表的列中(用作LIKE查询中运算符的第二个操作数)会导致任何不明显的行为吗?我特别想知道意外查询结果或安全问题的可能性。

这是我想知道的示例用法:

示例表:

| ID        | String              |
|-----------|---------------------|
| 1         | A__XX____5__________|
| 2         | A__XX____6__________|
| 3         | A__YX____5__________|
| 4         | B__XX____5__________|
| 5         | A__XX____5__________|
| 6         | A__XX____7__________|
| 7         | A__YY____5__________|

示例查询:

SELECT ID
FROM ExampleTable
WHERE 'AVVYXZZZZ5ABCDEFGHIJ' LIKE String;

查询结果:

| ID        |
|-----------|
| 3         | 

这是使用它们的有效且惯用的方式吗?某些文档或其他参考资料中是否有使用此类 SQL 通配符的示例?

标签: sqlsql-servertsqlwildcardsql-like

解决方案


如果用户输入未经验证直接放入表中并且用户仅限于他们可以看到的内容,那么安全漏洞将会出现。

也就是说,如果'%'可以让某人看到他们不应该看到的数据。

但是,使用类似模式的列名不是 SQL 注入风险,因为它不会导致另一个命令“无意”运行。如果您将模式放入表中以进行匹配,则没有额外的风险。

性能可能存在问题,但这完全是另一个问题。


推荐阅读