@@ -25,6 +25,9 @@ import (
2525// errInvalidFieldPath is the common prefix returned when a field path fails validation.
2626const errInvalidFieldPath = "invalid field path"
2727
28+ // errInvalidColumn is the common prefix returned when a column fails validation.
29+ const errInvalidColumn = "invalid column"
30+
2831func TestBuildEntSelectorFromJSONFilter (t * testing.T ) {
2932 tests := []struct {
3033 name string
@@ -46,6 +49,38 @@ func TestBuildEntSelectorFromJSONFilter(t *testing.T) {
4649 filter : & JSONFilter {Column : "metadata" , Operator : "gt" , Value : "foo" },
4750 wantErr : "unsupported operator: gt" ,
4851 },
52+ {
53+ // A double quote in the column breaks out of the identifier quoting
54+ // performed by ent's builder, allowing raw SQL injection.
55+ name : "column with double quote breaks out of identifier" ,
56+ filter : & JSONFilter {Column : `metadata" OR "1"="1` , FieldPath : "name" , Operator : OpEQ , Value : "foo" },
57+ wantErr : errInvalidColumn ,
58+ },
59+ {
60+ name : "column with single quote" ,
61+ filter : & JSONFilter {Column : `metadata' OR '1'='1` , FieldPath : "name" , Operator : OpEQ , Value : "foo" },
62+ wantErr : errInvalidColumn ,
63+ },
64+ {
65+ name : "column with whitespace" ,
66+ filter : & JSONFilter {Column : "metadata OR 1=1" , FieldPath : "name" , Operator : OpEQ , Value : "foo" },
67+ wantErr : errInvalidColumn ,
68+ },
69+ {
70+ name : "column with parenthesis" ,
71+ filter : & JSONFilter {Column : "pg_sleep(2)" , FieldPath : "name" , Operator : OpEQ , Value : "foo" },
72+ wantErr : errInvalidColumn ,
73+ },
74+ {
75+ name : "column starting with digit" ,
76+ filter : & JSONFilter {Column : "1metadata" , FieldPath : "name" , Operator : OpEQ , Value : "foo" },
77+ wantErr : errInvalidColumn ,
78+ },
79+ {
80+ name : "column with dot qualifier" ,
81+ filter : & JSONFilter {Column : "workflow.metadata" , FieldPath : "name" , Operator : OpEQ , Value : "foo" },
82+ wantErr : errInvalidColumn ,
83+ },
4984 {
5085 name : "eq operator with string value" ,
5186 filter : & JSONFilter {Column : "metadata" , FieldPath : "name" , Operator : OpEQ , Value : "foo" },
0 commit comments