mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-09 12:00:26 +08:00
WAF SQL注入检测和XSS注入检测自动进行URL解码
This commit is contained in:
@@ -69,6 +69,11 @@ func DetectSQLInjection(input string) bool {
|
|||||||
return detectSQLInjectionOne(args)
|
return detectSQLInjectionOne(args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
unescapedInput, err := url.QueryUnescape(input)
|
||||||
|
if err == nil && input != unescapedInput {
|
||||||
|
return detectSQLInjectionOne(unescapedInput)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import (
|
|||||||
func TestDetectSQLInjection(t *testing.T) {
|
func TestDetectSQLInjection(t *testing.T) {
|
||||||
var a = assert.NewAssertion(t)
|
var a = assert.NewAssertion(t)
|
||||||
a.IsTrue(injectionutils.DetectSQLInjection("' UNION SELECT * FROM myTable"))
|
a.IsTrue(injectionutils.DetectSQLInjection("' UNION SELECT * FROM myTable"))
|
||||||
|
a.IsTrue(injectionutils.DetectSQLInjection("id=1 ' UNION select * from a"))
|
||||||
a.IsTrue(injectionutils.DetectSQLInjection("asdf asd ; -1' and 1=1 union/* foo */select load_file('/etc/passwd')--"))
|
a.IsTrue(injectionutils.DetectSQLInjection("asdf asd ; -1' and 1=1 union/* foo */select load_file('/etc/passwd')--"))
|
||||||
a.IsFalse(injectionutils.DetectSQLInjection("' UNION SELECT1 * FROM myTable"))
|
a.IsFalse(injectionutils.DetectSQLInjection("' UNION SELECT1 * FROM myTable"))
|
||||||
a.IsFalse(injectionutils.DetectSQLInjection("1234"))
|
a.IsFalse(injectionutils.DetectSQLInjection("1234"))
|
||||||
@@ -27,6 +28,7 @@ func TestDetectSQLInjection(t *testing.T) {
|
|||||||
a.IsTrue(injectionutils.DetectSQLInjection("/sql/injection?id=123 or 1=1"))
|
a.IsTrue(injectionutils.DetectSQLInjection("/sql/injection?id=123 or 1=1"))
|
||||||
a.IsTrue(injectionutils.DetectSQLInjection("/sql/injection?id=123%20or%201=1"))
|
a.IsTrue(injectionutils.DetectSQLInjection("/sql/injection?id=123%20or%201=1"))
|
||||||
a.IsTrue(injectionutils.DetectSQLInjection("https://example.com/sql/injection?id=123%20or%201=1"))
|
a.IsTrue(injectionutils.DetectSQLInjection("https://example.com/sql/injection?id=123%20or%201=1"))
|
||||||
|
a.IsTrue(injectionutils.DetectSQLInjection("id=123%20or%201=1"))
|
||||||
a.IsTrue(injectionutils.DetectSQLInjection("https://example.com/' or 1=1"))
|
a.IsTrue(injectionutils.DetectSQLInjection("https://example.com/' or 1=1"))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,7 +100,7 @@ func BenchmarkDetectSQLInjection_Normal_Large(b *testing.B) {
|
|||||||
|
|
||||||
b.RunParallel(func(pb *testing.PB) {
|
b.RunParallel(func(pb *testing.PB) {
|
||||||
for pb.Next() {
|
for pb.Next() {
|
||||||
_ = injectionutils.DetectSQLInjection("a/sql/injection?id=" + types.String(rands.Int64()%10000) + "&s=" + s)
|
_ = injectionutils.DetectSQLInjection("a/sql/injection?id=" + types.String(rands.Int64()%10000) + "&s=" + s + "&v=%20")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,6 +68,11 @@ func DetectXSS(input string) bool {
|
|||||||
return detectXSSOne(args)
|
return detectXSSOne(args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
unescapedInput, err := url.QueryUnescape(input)
|
||||||
|
if err == nil && input != unescapedInput {
|
||||||
|
return detectXSSOne(unescapedInput)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ func TestDetectXSS(t *testing.T) {
|
|||||||
a.IsTrue(injectionutils.DetectXSS("onkeyup=a"))
|
a.IsTrue(injectionutils.DetectXSS("onkeyup=a"))
|
||||||
a.IsTrue(injectionutils.DetectXSS("<iframe scrolling='no'>"))
|
a.IsTrue(injectionutils.DetectXSS("<iframe scrolling='no'>"))
|
||||||
a.IsFalse(injectionutils.DetectXSS("<html><body><span>RequestId: 1234567890</span></body></html>"))
|
a.IsFalse(injectionutils.DetectXSS("<html><body><span>RequestId: 1234567890</span></body></html>"))
|
||||||
|
a.IsTrue(injectionutils.DetectXSS("name=s&description=%3Cscript+src%3D%22a.js%22%3Edddd%3C%2Fscript%3E"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkDetectXSS_MISS(b *testing.B) {
|
func BenchmarkDetectXSS_MISS(b *testing.B) {
|
||||||
|
|||||||
Reference in New Issue
Block a user