mysql - 避免在动态 MySQL CREATE TABLE 查询中注入
问题描述
通常在 Go 中,您可以通过使用参数化查询来避免 SQL 注入,例如:
db.Query("SELECT * FROM test WHERE name = ?", name)
但是,您不能以这种方式提供数据库、表或列名。
我正在编写一个从各种来源获取表并将它们放入 MySQL 数据库的程序,因此我需要动态创建表并因此动态提供列名。
例如,可以这样做:
db.Exec(fmt.Sprintf("CREATE TABLE test (%s VARCHAR(255)", columnName))
不幸的是,这对于 SQL 注入是不安全的,因为这绕过了通过使用参数化查询实现的卫生,如第一个示例所示。
对此有什么好的解决方案?我可以编写自己的卫生功能或从随机作者那里在线找到一个,但这些都没有经过很好的测试或官方,所以我认为它们很可能会丢失一些边缘案例。这个问题有什么规范的解决方案吗?
解决方案
推荐阅读
- javascript - 带有令牌形式离子本地存储的 ngx-socket-io
- mysql - 如何在mysql中使用动态表名和动态列名编写选择查询
- javascript - 有效地使用节点获取,获取无效的 json 响应正文错误*仅*我第一次查询服务器时
- oracle - 入队资源使用百分比 108.65% 对数据库来说太高了
- android - MIUI 11 防止从前台服务启动(其他应用程序的)活动?
- python - numpy memmap 一次可以处理的最大进程数是多少?
- javascript - 正则表达式 - 匹配字符串中的标记
- python - 在 Matplotlib 中使用左右轴绘制条形图和线形图
- php - 如何使我的 CodeIgniter 控制器能够正确识别来自 FullCalendar4 的 ajax 调用?
- ios - SKPhysicsJoint 移除节点之间的连接线