提交 6ae5c3f5 编写于 作者: martianzhang's avatar martianzhang

LIT.002 by pass insert values contain date time

上级 d096d6f5
......@@ -962,6 +962,20 @@ func (q *Query4Audit) RuleIPString() Rule {
// RuleDataNotQuote LIT.002
func (q *Query4Audit) RuleDataNotQuote() Rule {
var rule = q.RuleOK()
// by pass insert except, insert select
switch n := q.Stmt.(type) {
case *sqlparser.Insert:
var insertSelect bool
switch n.Rows.(type) {
case *sqlparser.Select:
insertSelect = true
}
if !insertSelect {
return rule
}
}
// 2010-01-01
re := regexp.MustCompile(`.\d{4}\s*-\s*\d{1,2}\s*-\s*\d{1,2}\b`)
sqls := re.FindAllString(q.Query, -1)
......
......@@ -484,11 +484,16 @@ func TestRuleSelectStar(t *testing.T) {
// COL.002
func TestRuleInsertColDef(t *testing.T) {
common.Log.Debug("Entering function: %s", common.GetFunctionName())
sqls := []string{
"insert into tbl values(1,'name')",
"replace into tbl values(1,'name')",
sqls := [][]string{
{
"insert into tbl values(1,'name')",
"replace into tbl values(1,'name')",
},
{
"insert into tb (col) values ('hello world')",
},
}
for _, sql := range sqls {
for _, sql := range sqls[0] {
q, err := NewQuery4Audit(sql)
if err == nil {
rule := q.RuleInsertColDef()
......@@ -499,6 +504,18 @@ func TestRuleInsertColDef(t *testing.T) {
t.Error("sqlparser.Parse Error:", err)
}
}
for _, sql := range sqls[1] {
q, err := NewQuery4Audit(sql)
if err == nil {
rule := q.RuleInsertColDef()
if rule.Item != "OK" {
t.Error("Rule not match:", rule.Item, "Expect : OK")
}
} else {
t.Error("sqlparser.Parse Error:", err)
}
}
common.Log.Debug("Exiting function: %s", common.GetFunctionName())
}
......@@ -634,10 +651,14 @@ func TestRuleDataNotQuote(t *testing.T) {
{
"select col1,col2 from tbl where time < 2018-01-10",
"select col1,col2 from tbl where time < 18-01-10",
"INSERT INTO tb1 SELECT * FROM tb2 WHERE time < 2020-01-10",
},
{
// TODO:
// "INSERT INTO `pay_order` (`app_pay_obj`) VALUES('timestamp=2019-12-16');",
"select col1,col2 from tbl where time < '2018-01-10'",
"INSERT INTO `tb` (`col`) VALUES ('timestamp=2019-12-16')",
"insert into tb (col) values (' 2020-09-15 ')",
"replace into tb (col) values (' 2020-09-15 ')",
"INSERT INTO tb1 SELECT * FROM tb2 WHERE time < '2020-01-10'",
},
}
for _, sql := range sqls[0] {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册