当前位置: 首页 > news >正文

Grom 如何解决 SQL 注入问题

什么是 SQL 注入

SQL 注入是一种常见的数据库攻击手段, SQL 注入漏洞也是网络世界中最普遍的漏洞之一。 SQL 注入就是恶意用户通过在表单中填写包含 SQL 关键字的数据来使数据库执行非常规代码的过程。

这个问题的来源就是, SQL 数据库的操作是通过 SQL 命令执行的,无论是执行代码还是数据项都必须卸载 SQL 语句中,这就导致如果我们在数据项中加入了某些 SQL 语句关键字(比如 SELECT,DROP等等),这些关键字就很可能在数据库写入或读取数据时得到执行。

SQL 注入需要满足的条件

  1. 参数用户可控:前端传给后端的参数用户可控
  2. 参数代入数据库查询:传入的参数拼接到 SQL 语句中,且代入数据库中查询
id := "031904102" + " AND 1=1 "
where := "stu_number=" + id 
err := DB.Model(&User{}).Where(where).Find(&user).Error
if err != nil {fmt.Println(err)
}

如果使用上述代码的话进行字符串的拼接,就会导致 sql 注入的发生,本来是查询一条语句的,但是由于后面注入了 1 = 1 所以把数据库中的信息全部查出来了。

解决方法:使用占位符

user2 := []User{}
id := "156315775 ; drop table notice;"
err = DB.Model(&User{}).Where("stu_number=?", id).Find(&user2).Error
if err != nil {fmt.Println(err)
}

最终的语句为:

SELECT * FROM `user` WHERE stu_number=031904102; drop table notice;

这条语句在 sql 中是可以执行的,但是在 gorm 框架中是不能执行的。

总结

避免在操作数据库的时候使用字符串直接拼接的方式进行 SQL 查询。

http://www.lryc.cn/news/172655.html

相关文章:

  • 腾讯mini项目-【指标监控服务重构】2023-07-19
  • 抖音矩阵系统源代码开发部署--SaaS开源技术开发文档
  • CLIP模型资料学习
  • 【c语言】贪吃蛇
  • 【Node.js】定时任务cron:
  • vue3 引入element-plus
  • 数据通信——传输层TCP(超时时间选择)
  • 【数据库索引优化】
  • WebGL 选中物体
  • 科目二倒车入库
  • PostgreSQL如何支持PL/Python过程语言
  • 【C++】STL之适配器---用deque实现栈和队列
  • PHY6230低成本遥控灯控芯片国产蓝牙BLE5.2 2.4G SoC
  • OceanBase杨传辉传递亚运火炬:国产数据库为“智能亚运”提供稳稳支持
  • 分布式锁实现方法
  • 软件测试缺陷报告详解
  • pytorch冻结参数训练的坑
  • P1827 [USACO3.4] 美国血统 American Heritage(前序 + 中序 生成后序)
  • 【四、centOS安装docker】
  • 想学嵌入式开发,薪资怎么样?
  • SQL死锁进程内容查询语句
  • Ubuntu 20.04中Nightingale二进制部署
  • 深入探讨Java面试中内存泄漏:如何识别、预防和解决
  • win10 安装.net framework 3.5,错误代码0x8024401C
  • 杂记 | Langchain中few-shot提示词模板的使用(给提示词添加示例)
  • SVN -基础
  • MySQL基础终端命令与Python简单操作MySQL
  • 编译原理.龙书学习1
  • anaconda安装完成之后输入conda -V没有反应
  • netty报文解析之粘包半包问题