Go语言如何防SQL注入_Go语言SQL注入防护教程【精选】

使用 database/sql 时必须用占位符参数化查询,禁止字符串拼接;ORDER BY 和表名等标识符需白名单校验;Scan 须处理 NULL 和类型匹配;日志和错误信息不得暴露敏感数据。用 database/sql 的 Query 和 Exec 时必须传参,别拼字符串Go 原生 database/sql 包本身不防注入,但它强制你用占位符------只要你不手动拼接 SQL 字符串,基本就安全了。很多人栽在"图省事",比如写成 "SELECT * FROM users WHERE id = " + userID,这等于把门敞开。PostgreSQL/MySQL 驱动(如 lib/pq、go-sql-driver/mysql)只认 1、2(PostgreSQL)或 ?(MySQL)占位符,不支持命名参数(如 :name),硬写会报错:sql: expected 0 arguments, got 1参数类型要匹配:传 int64 给 WHERE id = ? 没问题,但传 string 表示数字 ID 时,驱动通常能隐式转换;可一旦涉及时间、JSON 或空值,隐式转换可能失败或绕过校验切忌在 ORDER BY 或 TABLE NAME 里用参数------SQL 占位符只适用于值,不适用于标识符。这类场景必须白名单校验 + 显式映射处理动态字段名或表名时,必须用白名单 + 显式映射想按用户选的字段排序?想查不同租户的表?这时候不能靠参数化,得靠代码逻辑兜底。否则一上 ORDER BY ?,驱动直接报错,而有人就改用 fmt.Sprintf("ORDER BY %s", input),这就崩了。只允许从预设集合中选:比如排序字段限定为 \[\]string{"created_at", "name", "score"},用 mapstringbool{"created_at": true, "name": true} 快速判断是否合法表名映射建议用常量+switch:比如用户输入 "prod" → 实际查 "users_prod",而不是拼 "users_" + input别信 strings.ReplaceAll 过滤单引号或分号------攻击者用注释符 /**/、Unicode 空格、或换行就能绕过用 Scan 接收结果时,注意类型和 NULL 兼容性防注入不只是"发出去"的事,接收端出问题也可能导致逻辑异常甚至间接泄露。比如把数据库里的 NULL 直接扫进 string 变量,会 panic:sql: Scan error on column index 0: unsupported Scan, storing driver.Value type <nil> into type *string。所有可能为 NULL 的字段,都该用指针类型或 sql.NullXXX 类型接收,例如 sql.NullString、sql.NullInt64扫描到结构体时,字段名必须和 SELECT 列顺序/别名严格一致;用 SELECT id, name AS username 就得对应结构体字段 Username string,否则扫错位置,可能把恶意构造的字段名当数据用如果用 ORM(如 gorm),注意它默认开启 PrepareStmt,但若关掉(PrepareStmt: false),某些查询会退化为字符串拼接,失去参数化保护日志和错误信息里别暴露原始 SQL 或参数值开发时习惯打日志:log.Printf("query: %s, args: %v", query, args),上线后这就成了攻击者的探针。哪怕 SQL 是参数化的,把参数值全打出来,等于把密码、手机号、身份证号直接写进日志文件。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

相关推荐
阳光九叶草LXGZXJ10 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
怕浪猫10 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
高洁0110 小时前
具身智能中的世界模型训练
人工智能·python·深度学习·机器学习·transformer
无线通信科研笔记11 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
字节渡客11 小时前
Redis键明明过期了,业务还在读到旧数据
数据库·redis·spring
朝朝辞暮i11 小时前
VLA 系统学习第 1 课:VLA 到底在干什么?
人工智能·python·计算机视觉·vla
2601_9628857211 小时前
如何用 Python 自动识别股票的支撑位与压力位?
开发语言·python
北冥有鱼被烹12 小时前
VCSEL全景解析:与光模块NPO CPO的关系、市场量化分析与产业链影响
python
caoerzhong12 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
正在走向自律12 小时前
AI数据分析与可视化:从基础到应用实践
服务器·人工智能·python·机器学习·数据分析·pandas