【问题标题】:SQL injection attack in LIKE clauseLIKE 子句中的 SQL 注入攻击
【发布时间】:2019-04-10 13:54:19
【问题描述】:

我有一个运行 SQL 查询的文件:

SELECT * FROM items WHERE name LIKE "%<String Passed to It>%"

我正在尝试在这里测试基本的网络安全。如何在不使用 spacessemi-colons 的情况下打破此查询以删除 items

【问题讨论】:

  • 如果<String Passed to It>[n]varchar 参数中传递给它,那么您无需执行任何操作。如果它被连接到查询中,那么请不要这样做。
  • 理论上,如果不能先注入分号终止选择,就不能中断查询。但是,考虑到输入文本很可能有一个文字分号作为该文本的一部分,你怎么能强制不使用分号呢?在这里你最安全的选择是使用准备好的语句,让 MySQL 担心清理你的查询。

标签: mysql sql


【解决方案1】:

尝试将 的值设置为:

'\gDROP TABLE 项目\g--

你需要避开那个撇号。

让你的查询看起来像这样:

SELECT * FROM items WHERE name LIKE '%'\gDROP TABLE items\g--%'

在 mySQL 中,\g 相当于分号。但是,我不确定是否需要间距,因为我目前没有设置本地安装的 mySQL,而且我不知道您使用什么语言和框架来执行该查询。

但是,其他 cmets 是正确的,使用准备好的语句和参数而不是在代码中构建 SQL 字符串是尝试防止 SQL 注入攻击的方法。

here

【讨论】:

  • 嗯.. 这似乎不起作用。什么样的SQL注入攻击可以忽略LIKE子句?
  • 我建议回顾一下一些常见的 SQL 注入策略和原因。在 like 或 equals 的情况下,SQL 注入不仅可以用来破坏您的数据库模式,还可以映射它或从数据库中提取关键信息。在这个 [链接] (unixwiz.net/techtips/sql-injection.html) 中,您不仅可以找到原因,还可以找到降低攻击风险的方法,这些方法得到了很好的解释。该链接确实解释了什么样的攻击会试图忽略 like 子句,以及如何出现它。密切关注绑定参数部分。
猜你喜欢
  • 2013-08-15
  • 2015-03-26
  • 2015-10-03
  • 2019-08-10
  • 2017-05-23
  • 2013-05-21
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多