使用 Go SQL 库,我们可以使用如下参数创建 SELECT、INSERT、UPDATE 和 DELETE 语句:
db.Query("SELECT * FROM database.table WHERE param = ?", param_value)
我想根据用户提供的描述表结构的输入创建表,用户将被要求提供表的名称以及他们要创建的每一列的名称和类型。但是,在查询接口(interface)中构建 CREATE 语句 通过将字符串连接在一起创建 CREATE 语句是可行的,但这是等待发生的 SQL 注入(inject)攻击。
有没有办法使用 Go SQL 库来参数化 CREATE 语句?
最佳答案
SQL 查询参数仅代替标量值。
也就是说,您只能使用参数来替换原本要使用常量引用字符串、常量引用日期/时间或常量数字的地方。
SQL 查询参数不能用于:
- 表名、列名或其他标识符
- SQL 表达式
- 标量值列表(如在
IN(...)
谓词中) - SQL关键字
编写接受描述表结构的用户输入的应用程序的正确方法是将用户输入解释为指南,而不是文字 SQL 语法。避免传递用户输入(或任何不安全的内容)作为任何 SQL 语句的一部分执行。
关于mysql - 我可以在 Go 中参数化 create 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50477597/