sql注入攻击是很多语言经常遇到的问题,在php大行其道的年代,类似dedecms这类都出现过sql注入攻击漏洞。之前小沃无论是使用php,还是nodejs,都很小心处理sql注入攻击。最近小沃由于项目原因,开始使用go语言作为自己的主要开发语言。对于go语言动态查询数据库使用sql注入攻击,小沃在这里给大家讲讲。

主要是用到了go语言的'...'特性,示例代码如下:

package main

import (
    "fmt"
    _ "github.com/mattn/go-sqlite3"
    "database/sql"
)

var type_name string = "hello"
var topick string = ""
var isdelete uint64 = 0

func main () {
    var tn, tk string
    var isd uint64
    db, _ := sql.Open("sqlite3", "sqlite.db")
    defer db.Close()
    sql := "SELECT * FROM `sw_equipment_type` WHERE 1"
    params := make([]interface{}, 0) // 初始化一个大小为0的切片,用来存参数。
    if (type_name != "") {
        sql += " AND `type_name` = ?"
        params = append(params, type_name) // 将参数动态塞入切片中。
    }
    if (topick != "") {
        sql += " AND `topick` = ?"
        params = append(params, topick)
    }
    if (isdelete != 99) {
        sql += " AND `isdelete` = ?"
        params = append(params, isdelete)
    }
    rows, _ := db.Query(sql, params...) // 利用...将切片分成单个元素
    for rows.Next() {
        rows.Scan(&tn, &isd, &tk)
        fmt.Println(tn, isd, tk)
    }
}