mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 16:00:25 +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