11import { readFileSync } from "fs" ;
22import { join } from "path" ;
33import * as t from "tap" ;
4+ import { SQL_KEYWORDS } from "./config" ;
45import { SQLDialectMySQL } from "./dialects/SQLDialectMySQL" ;
56import { SQLDialectPostgres } from "./dialects/SQLDialectPostgres" ;
67import { userInputContainsSQLSyntax } from "./userInputContainsSQLSyntax" ;
@@ -13,6 +14,29 @@ t.test("it does not flag common SQL keywords", async () => {
1314 t . same ( userInputContainsSQLSyntax ( "SELECT" , new SQLDialectMySQL ( ) ) , false ) ;
1415} ) ;
1516
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+
1640const files = [
1741 // Taken from https://github.com/payloadbox/sql-injection-payload-list/tree/master
1842 join ( __dirname , "payloads" , "Auth_Bypass.txt" ) ,
0 commit comments