golang gorm框架的sql注入漏洞

keluda · · 7395 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

最近的golang项目,orm框架选择的是gorm。今天开始做单元测试,顺便手动检查一下安全问题。结果发现gorm框架是直接拼接的sql语句。gorm框架在golang生态中的影响力非常大。在测试中发现这个问题也感觉比较意外。下面是执行测试的结果:

首先是where查询,在这里我使用的语句是api是Where("user_email=?", email),正常测试时,我输入的是随便一个字符串“dfks@qq.com”,生成的sql语句是:“SELECT * FROM `users` WHERE `users`.`deleted_at` IS NULL AND ((user_email='dfks@qq.com')) ORDER BY `users`.`id` ASC LIMIT 1”。如果不做安全方面的校验,这个生成的语句看上去没有任何问题。

下面我修改一下email的值为"dfks@qq.com' or '1'='1",然后调用这个api,生成的sql语句是:SELECT * FROM `users` WHERE `users`.`deleted_at` IS NULL AND ((user_email='dfks@qq.com' or '1'='1')) ORDER BY `users`.`id` ASC LIMIT 1.在这里,我在where后面调用的是first(gorm链式调用),所以最后生成的sql语句后面又limit1。可以看出,现在生成的语句是被sql注入了的。

后面我又测试了create api,直接传入的要创建的实体,结果依然生成了被注入的sql语句。时间问题,不再赘述。

软件开发接单,软件开发培训,QQ:2695827051


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:keluda

查看原文:golang gorm框架的sql注入漏洞

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

7395 次点击  
加入收藏 微博
2 回复  |  直到 2020-06-28 09:29:29
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传