1.2.1【必须】SQL语句默认使用预编译并绑定变量

    • 使用的prepare、Query或使用GORM等ORM执行SQL操作
    • 使用参数化查询,禁止拼接SQL语句,另外对于传入参数用于order by或表名的需要通过校验
    1. // bad
    2. import (
    3. "database/sql"
    4. "net/http"
    5. func handler(db *sql.DB, req *http.Request) {
    6. q := fmt.Sprintf("SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='%s' ORDER BY PRICE",
    7. req.URL.Query()["category"])
    8. // good
    9. func handlerGood(db *sql.DB, req *http.Request) {
    10. //使用?占位符
    11. q := "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='?' ORDER BY PRICE"
    12. }