【发布时间】:2021-09-01 14:21:45
【问题描述】:
func startHandler(w http.ResponseWriter, r *http.Request) {
conn_str := dbuser + ":" + dbpass + "@tcp(" + dbhost + ":" + dbport + ")/" + dbdb
log.Println(conn_str)
db, err := sql.Open("mysql", conn_str)
if err != nil {
log.Println("DB Error - Unable to connect:", err)
}
defer db.Close()
table := r.URL.Query().Get("table")
rows, _ := db.Query("SELECT * FROM "+ table) //selects all columns from table
cols, _ := rows.Columns()
fmt.Fprintf(w, "%s\n", cols)
当我尝试这个时,它不会填写我从我的网站输入的值。如果我 log.Println(table) 它确实显示在我的终端中。但它不会显示在网站上或用表格填写select语句......
【问题讨论】:
-
不像你做的那样,通过连接来自不受信任的来源(用户指定的查询参数)的字符串来构建查询。这样做会引入 SQL 注入漏洞!
-
这是供个人使用的。我只是在创建一个 webapp 来获取我输入的表的字段。我试图只获取表的值来填写 FROM 语句
-
db.Query 返回的错误可能会告诉您问题所在。