【发布时间】:2017-03-11 14:30:49
【问题描述】:
我正在尝试了解 SQL 注入。似乎人们可以变得很有创意。这让我想知道我正在制作的基于搜索的 Rails Web 应用程序。
假设我只是将用户输入的信息直接输入到我的 SQL 查询的“where”语句中。允许这样做会对我的数据库造成多大的损害?
def self.search(search)
if search
includes(:hobbies, :addresses).where(search)
else
self.all
end
所以基本上,无论用户在主页上的搜索栏中输入什么内容,都会直接输入到“where”语句中。
有效的“搜索”示例如下:
"hobby LIKE ? OR (gender LIKE ? AND hobby LIKE ?)", "golf", "male", "polo"
它仅限于“where”语句的上下文这一事实是否提供了任何形式的防御?他们还能以某种方式执行删除或创建操作吗?
编辑:
当我查看this 教程时,我看不到在 where 子句之外执行删除或创建操作的直接方法。如果我的数据库不包含我不愿意从有效搜索结果中显示的信息,并且没有用户帐户或管理员权限之类的信息,那么这里真正的危险是什么?
【问题讨论】:
-
如果您正确使用占位符和准备好的语句,则没有注入风险。不,仅仅因为注入的数据在
where中并不意味着什么。开始阅读:bobby-tables.com) -
where 子句正是要攻击的向量。但是当你参数化它时,漏洞就会消失。
-
如何参数化?
-
我很困惑,你希望用户输入字符串
"hobby LIKE ? OR (gender LIKE ? AND hobby LIKE ?)"? -
一个很好的参考:rails-sqli.org
标签: ruby-on-rails sql-server sql-injection