一个简单的正则过滤sql注入的问题?

1、下面是正确的:

func main() {
    str := `(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|(\b(select|update|and|or|delete|insert|trancate|char|chr|into|substr|ascii|declare|exec|count|master|into|drop|execute)\b)`

    re, err := regexp.Compile(str)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    aa := "存在 select"
    fmt.Println(re.MatchString(aa))  //打印出true。
}

2、将str:=。。。一行中的改为" ",则不正确。 字符串没有跨行。

func main() {
    str := "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|(\b(select|update|and|or|delete|insert|trancate|char|chr|into|substr|ascii|declare|exec|count|master|into|drop|execute)\b)" //此处改为“

    re, err := regexp.Compile(str)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    aa := "存在 select"
    fmt.Println(re.MatchString(aa))  //打印出false。
}

字符串一直没有跨行,而仅仅是``和""的不同。两者的区别,还是正则的问题? 请帮忙看一下。

共 3 个回复


stevewang

``里一些字符不转义,而在""里则转义。 所以你这两个程序的字符串str是完全不同的。

# 0