sql - 将通配符字符串存储在列中(与 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 通配符的示例?
解决方案
如果用户输入未经验证直接放入表中并且用户仅限于他们可以看到的内容,那么安全漏洞将会出现。
也就是说,如果'%'
可以让某人看到他们不应该看到的数据。
但是,使用类似模式的列名不是 SQL 注入风险,因为它不会导致另一个命令“无意”运行。如果您将模式放入表中以进行匹配,则没有额外的风险。
性能可能存在问题,但这完全是另一个问题。
推荐阅读
- laravel - 如何在 laravel 的邮递员中发送图像
- google-apps-script - 如何将所有 DriveApp 活动粘贴到电子表格中
- python - 使用 pandas 获取该行中第一个非零值的列名
- react-native - FCM 推送通知的负载测试
- php - 我正在使用 $_SESSION('ID') ,更新到表中不起作用并且通过 php 页面没有错误
- java - Spring Boot 应用程序属性
- azure-devops - Azure DevOps Service 已导入数据库成功但错误 404 NotFound can't access to link
- microsoft-graph-api - 是否可以通过 microsoft graph webhooks 获取更新的实时更新?
- html - 合并两个 Observable 并作为 Angular 材料表的单个 Observable 传递到 dataSource
- nginx - NGINX 代理传递部分请求 URL