Grom 如何解决 SQL 注入问题

2023-09-22 10:18:19

什么是 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 查询。

更多推荐

springBoot整合minio

<minio.version>8.3.4</minio.version><!--其它&&数据源加密--><org.bouncycastle.bcprov-jdk15on.version>1.70</org.bouncycastle.bcprov-jdk15on.version><dependencies><depend

《向量数据库指南》——文心大模型+Milvus向量数据库搭建AI原生应用

亲爱的科技探险家们和代码魔法师们:未来的钟声已经敲响,预示着一场极度炫酷的虚拟现实游戏即将展开。从初期简单的智能识别,到设计师级别的图纸设计,生成式AI技术(GenerativeAI)以其独特理念和创新模式重塑了传统内容生产效率和交互模式,在无数领域展现着非凡的才华。在这场人工智能游戏中,高性能、高稳定的各类大模型的不

恩智浦i.MX8MM核心板在智能售货机产品中的应用方案-迅为电子

迅为i.MX8MM核心板在自动售货机产品中可以实现多种应用,提高自动售货机的功能和性能。以下是i.MX8MM核心板在自动售货机产品中的应用方案:支付和交易处理:i.MX8MM核心板可以用作自动售货机的支付和交易处理器,支持各种支付方式,如信用卡、手机支付、硬币和纸币识别,以提供便捷的购物体验。库存管理:核心板可用于实时

文举论金:黄金原油全面走势分析策略指导。

市场没有绝对,涨跌没有定势,所以,对市场行情的涨跌平衡判断就是你的制胜法宝。欲望!有句意大利谚语:让金钱成为我们忠心耿耿的仆人,否则,它就会成为一个专横跋扈的主人。空头,多头都能赚钱,唯有贪心不能赚。是你掌控欲望还是欲望掌控你?古人云:不积硅步无以至千里,不积小流无以成江海。希望这句话成为我们之间的共勉。自知!人贵自知

R语言绘图-3-Circular-barplot图

0.参考:https://r-graph-gallery.com/web-circular-barplot-with-R-and-ggplot2.html1.说明:利用ggplot绘制环状的条形图(circularbarplot),并且每个条带按照数值大小进行排列。2绘图代码:注意:绘图代码中的字体为“TimesNew

什么是单页面应用(SPA)?它们的优点和缺点是什么?

聚沙成塔·每天进步一点点⭐专栏简介⭐什么是单页面应用(SPA)?⭐SPA的优缺点是什么?⭐SPA中如何处理搜索引擎优化(SEO)?⭐什么是前端路由(Front-endrouting)在SPA中的作用是什么?⭐SPA中如何处理浏览器历史记录和页面刷新?⭐SPA通常使用哪些前端框架或库来简化开发?⭐写在最后⭐专栏简介前端入

WebGL笔记: 2D和WebGL坐标系对比和不同的画图方式, 程序对象通信,顶点着色器,片元着色器

WebGL坐标系canvas2d画布和webgl画布使用的坐标系都是二维直角坐标系,但它们坐标原点、y轴的坐标方向,坐标基底都不一样canvas2d坐标系的原点在左上角,x轴朝右,y轴朝下1个单位的宽就是一个像素的宽,1个单位的高就是一个像素的高,都是按像素来走webgl坐标系的原点在画布中心,x轴朝右,y轴朝上1个单

在线客服系统品牌排行榜

客服系统是针对企业和组织的客户服务领域开发和提供的一种信息化系统。它可以帮助企业更好地管理与顾客之间的沟通、反馈和服务等。随着互联网技术和人工智能技术的不断发展,市场上的客服系统产品越来越多,如何选择一款适合自己的产品成为众多企业和组织面临的问题。今天,我们为大家提供客户服务系统排行榜热门品牌榜,为大家在做选择时提供可

LeetCode 1588. Sum of All Odd Length Subarrays

Givenanarrayofpositiveintegersarr,returnthesumofallpossibleodd-lengthsubarraysofarr.Asubarrayisacontiguoussubsequenceofthearray.Example1:Input:arr=[1,4,2,5,3]Ou

ACT汽车电子与软件技术周回顾 | 龙智技术专家分享汽车行业中版本控制与静态扫描的最佳实践

在2023ACT汽车电子与软件技术周期间,我们对话了龙智资深顾问、技术支持部门负责人李培,他聚焦结合行业趋势、自身经验与过往成功案例,分享了版本控制与静态代码扫描在汽车行业中的应用与实践。此外,还对比分析了包括Git、SVN等的多款工具,为大家提供帮助与参考。对话龙智技术负责人、“TechnicalHero”李培,探索

springboot和vue:五、RESTful服务+HTTP状态码+swagger配置

RESTfulRESTful的特点每一个URI代表一种资源客户端使用GET、POST、PUT、DELETE四种表示操作方式的动词对服务端资源进行操作:POST用于新建资源(也可以用于更新资源),PUT用于更新资源资源的表现形式是JSON或者HTML。客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请

热文推荐