首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用"database/ SQL“的同时防止Go中的sql注入攻击?

如何在使用"database/ SQL“的同时防止Go中的sql注入攻击?
EN

Stack Overflow用户
提问于 2014-10-14 01:12:26
回答 2查看 27.8K关注 0票数 28

构建我的第一个web应用程序,希望更好地理解SQL注入(https://github.com/astaxie/build-web-application-with-golang/blob/master/en/eBook/09.4.md)。

总是使用'database/ SQL‘库并使用'?’构造查询,对sql注入有多大的保护作用?而不是连接字符串?在这种情况下,我还需要担心哪种SQL注入攻击?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-14 01:15:00

只要你在使用PrepareQuery,你就是安全的。

代码语言:javascript
运行
复制
// this is safe
db.Query("SELECT name FROM users WHERE age=?", req.FormValue("age"))
// this allows sql injection.
db.Query("SELECT name FROM users WHERE age=" + req.FormValue("age"))
票数 45
EN

Stack Overflow用户

发布于 2019-07-29 20:10:18

我同意@Oneonone的回答。

如果要检索数据,请执行以下操作:

代码语言:javascript
运行
复制
db.Query("SELECT name FROM users WHERE age=?", req.FormValue("age"))

如果您必须使用相同的查询安全地插入大量数据,这就是Prepare派上用场的地方。你可以这样做:

代码语言:javascript
运行
复制
tx, err := db.Begin()
if err != nil {
    return nil,err
}
stmt, err := tx.Prepare("INSERT INTO users VALUES (?, ?)")
if err != nil {
    tx.Rollback()
    return nil,err
}
defer 
for i := 0; i < 10; i++ {
    _, err = stmt.Exec(i, "dummy")
    if err != nil {
        tx.Rollback()
        return nil,err
    }
}
err = tx.Commit()
if err != nil {
    stmt.Close()
    tx.Rollback()
    return nil,err
}
stmt.Close()
return someValue, nil

参考:https://stackoverflow.com/a/46476451/5466534

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26345318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档