gpt4 book ai didi

mysql - 防止SQL注入(inject)

转载 作者:IT王子 更新时间:2023-10-29 02:34:02 26 4
gpt4 key购买 nike

问题一:

我有下面的 MySQL 查询,它运行良好,但我刚刚发现这不是一种安全的方法,因为它对 SQL 注入(inject)开放。如您所见,如果我想作为参数传递,where 子句是一个问题。

_, err := dbmap.Select(&response.AppsData, "SELECT...", ?)

非常感谢任何建议。

where := ""

for i := 0; i < (len(acl_user_apps)); i++ {
fmt.Println(acl_user_apps[i].AppId)
fmt.Println(acl_user_apps[i].Permissions)

if where == "" {
where = "WHERE Apps.id=" + strconv.Itoa(acl_user_apps[i].AppId)
} else {
where = where + " OR Apps.id=" + strconv.Itoa(acl_user_apps[i].AppId)
}
}

query := "SELECT Apps.*, GROUP_CONCAT(DISTINCT IFNULL(AppCategoryMatches.category_id,'-1') SEPARATOR ',') as temp, GROUP_CONCAT(DISTINCT IFNULL(AppCategories.category_name,'-1') SEPARATOR ',') as tmp_name FROM Apps LEFT JOIN AppCategoryMatches ON AppCategoryMatches.app_id=Apps.id LEFT JOIN AppCategories ON (AppCategoryMatches.`category_id` = AppCategories.id) " + where + " GROUP BY Apps.id ORDER BY " + sort_by + " " + order_by + " LIMIT " + limit + " OFFSET " + offset)
_, err := dbmap.Select(&response.AppsData,query)

问题 2:还想知道是否有人在传递 ORDER 参数时遇到过问题......

_, err := dbmap.Select(&response.AppsData,
"SELECT Apps.*, GROUP_CONCAT(DISTINCT IFNULL(AppCategoryMatches.category_id,'-1') SEPARATOR ',') as temp, GROUP_CONCAT(DISTINCT IFNULL(AppCategories.category_name,'-1') SEPARATOR ',') as tmp_name FROM Apps LEFT JOIN AppCategoryMatches ON AppCategoryMatches.app_id=Apps.id LEFT JOIN AppCategories ON (AppCategoryMatches.category_id = AppCategories.id) GROUP BY Apps.id ORDER BY ?", "title")

这个 ORDER 是有史以来最简单的事情......为什么它不起作用?

最佳答案

您绝对不想自己“转义”任何字符串,也不想连接字符串进行查询。

  1. Go 的 database/sql ( http://golang.org/pkg/database/sql/ ) 包支持 parameterised queries默认情况下 - 例如db.Query("SELECT * FROM users WHERE id=? AND active=?", id, userStatus) - 其中 ? 充当 mySQL 处理变量的占位符.

  2. 您可以(结合参数化查询)使用查询生成器,例如 mgutz/dat如果您不擅长编写原始 SQL,这会有所帮助。像这样的包裹或sqlx还有助于将查询打包/解包到/从应用程序中的结构或映射。

还有一个很棒的指南 in this tutorial用于使用 Go 的数据库包。我强烈建议阅读它。

关于mysql - 防止SQL注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30843058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com