1
1
import { readFileSync } from "fs" ;
2
2
import { join } from "path" ;
3
3
import * as t from "tap" ;
4
+ import { SQL_KEYWORDS } from "./config" ;
4
5
import { SQLDialectMySQL } from "./dialects/SQLDialectMySQL" ;
5
6
import { SQLDialectPostgres } from "./dialects/SQLDialectPostgres" ;
6
7
import { userInputContainsSQLSyntax } from "./userInputContainsSQLSyntax" ;
@@ -13,6 +14,29 @@ t.test("it does not flag common SQL keywords", async () => {
13
14
t . same ( userInputContainsSQLSyntax ( "SELECT" , new SQLDialectMySQL ( ) ) , false ) ;
14
15
} ) ;
15
16
17
+ t . test ( "it ignores alphanumeric input" , async ( ) => {
18
+ t . same ( userInputContainsSQLSyntax ( "1" , new SQLDialectMySQL ( ) ) , false ) ;
19
+ t . same ( userInputContainsSQLSyntax ( "123" , new SQLDialectMySQL ( ) ) , false ) ;
20
+ t . same ( userInputContainsSQLSyntax ( "1313" , new SQLDialectMySQL ( ) ) , false ) ;
21
+ t . same ( userInputContainsSQLSyntax ( "0" , new SQLDialectMySQL ( ) ) , false ) ;
22
+ t . same ( userInputContainsSQLSyntax ( "abc" , new SQLDialectMySQL ( ) ) , false ) ;
23
+ t . same ( userInputContainsSQLSyntax ( "ABC" , new SQLDialectMySQL ( ) ) , false ) ;
24
+ } ) ;
25
+
26
+ t . test ( "it does not flag SQL keyword as dangerous" , async ( ) => {
27
+ // They just contain alpha characters
28
+ SQL_KEYWORDS . forEach ( ( keyword ) => {
29
+ t . same (
30
+ userInputContainsSQLSyntax ( keyword . toLowerCase ( ) , new SQLDialectMySQL ( ) ) ,
31
+ false
32
+ ) ;
33
+ t . same (
34
+ userInputContainsSQLSyntax ( keyword . toUpperCase ( ) , new SQLDialectMySQL ( ) ) ,
35
+ false
36
+ ) ;
37
+ } ) ;
38
+ } ) ;
39
+
16
40
const files = [
17
41
// Taken from https://github.com/payloadbox/sql-injection-payload-list/tree/master
18
42
join ( __dirname , "payloads" , "Auth_Bypass.txt" ) ,
0 commit comments