@@ -41,24 +41,22 @@ var good4 = /(\r\n|\r|\n)+/;
4141// BAD - PoC: `node -e "/((?:[^\"\']|\".*?\"|\'.*?\')*?)([(,)]|$)/.test(\"'''''''''''''''''''''''''''''''''''''''''''''\\\"\");"`. It's complicated though, because the regexp still matches something, it just matches the empty-string after the attack string.
4242var actuallyBad = / ( (?: [ ^ " ' ] | " .* ?" | ' .* ?' ) * ?) ( [ ( , ) ] | $ ) / ;
4343
44- // NOT GOOD; attack: "a" + "[]".repeat(100) + ".b\n"
4544// Adapted from Knockout (https://github.com/knockout/knockout), which is
4645// licensed under the MIT license; see file knockout-LICENSE
47- var bad6 = / ^ [ \_ $ a - z ] [ \_ $ a - z 0 - 9 ] * ( \[ .* ?\] ) * ( \. [ \_ $ a - z ] [ \_ $ a - z 0 - 9 ] * ( \[ .* ?\] ) * ) * $ / i;
46+ var bad6 = / ^ [ \_ $ a - z ] [ \_ $ a - z 0 - 9 ] * ( \[ .* ?\] ) * ( \. [ \_ $ a - z ] [ \_ $ a - z 0 - 9 ] * ( \[ .* ?\] ) * ) * $ / i; // $ Alert - attack: "a" + "[]".repeat(100) + ".b\n"
4847
4948
5049var good6 = / ( a | .) * / ;
5150
5251// Testing the NFA - only some of the below are detected.
53- var bad7 = / ^ ( [ a - z ] + ) + $ / ;
54- var bad8 = / ^ ( [ a - z ] * ) * $ / ;
55- var bad9 = / ^ ( [ a - z A - Z 0 - 9 ] ) ( ( [ \\ - .] | [ _ ] + ) ? ( [ a - z A - Z 0 - 9 ] + ) ) * ( @ ) { 1 } [ a - z 0 - 9 ] + [ . ] { 1 } ( ( [ a - z ] { 2 , 3 } ) | ( [ a - z ] { 2 , 3 } [ . ] { 1 } [ a - z ] { 2 , 3 } ) ) $ / ;
56- var bad10 = / ^ ( ( [ a - z ] ) + .) + [ A - Z ] ( [ a - z ] ) + $ / ;
52+ var bad7 = / ^ ( [ a - z ] + ) + $ / ; // $ Alert
53+ var bad8 = / ^ ( [ a - z ] * ) * $ / ; // $ Alert
54+ var bad9 = / ^ ( [ a - z A - Z 0 - 9 ] ) ( ( [ \\ - .] | [ _ ] + ) ? ( [ a - z A - Z 0 - 9 ] + ) ) * ( @ ) { 1 } [ a - z 0 - 9 ] + [ . ] { 1 } ( ( [ a - z ] { 2 , 3 } ) | ( [ a - z ] { 2 , 3 } [ . ] { 1 } [ a - z ] { 2 , 3 } ) ) $ / ; // $ Alert
55+ var bad10 = / ^ ( ( [ a - z ] ) + .) + [ A - Z ] ( [ a - z ] ) + $ / ; // $ Alert
5756
58- // NOT GOOD; attack: "[" + "][".repeat(100) + "]!"
5957// Adapted from Prototype.js (https://github.com/prototypejs/prototype), which
6058// is licensed under the MIT license; see file Prototype.js-LICENSE.
61- var bad11 = / ( ( [ \w # : . ~ > + ( ) \s - ] + | \* | \[ .* ?\] ) + ) \s * ( , | $ ) / ;
59+ var bad11 = / ( ( [ \w # : . ~ > + ( ) \s - ] + | \* | \[ .* ?\] ) + ) \s * ( , | $ ) / ; // $ Alert - attack: "[" + "][".repeat(100) + "]!"
6260
6361// Adapted from Prism (https://github.com/PrismJS/prism), which is licensed
6462// under the MIT license; see file Prism-LICENSE.
@@ -279,11 +277,11 @@ var bad78 = /^(b+.)+$/; // $ Alert
279277
280278var good39 = / a * b / ;
281279
282- // All 4 bad combinations of nested * and +
283- var bad79 = / ( a * ) * b / ;
284- var bad80 = / ( a + ) * b / ;
285- var bad81 = / ( a * ) + b / ;
286- var bad82 = / ( a + ) + b / ;
280+ // All 4 bad combinations of nested * and +)
281+ var bad79 = / ( a * ) * b / ; // $ Alert
282+ var bad80 = / ( a + ) * b / ; // $ Alert
283+ var bad81 = / ( a * ) + b / ; // $ Alert
284+ var bad82 = / ( a + ) + b / ; // $ Alert
287285
288286
289287var good40 = / ( a | b ) + / ;
@@ -300,45 +298,45 @@ var bad86AndAHalf = /^((?:a{0,2}|-)|\w\{\d,\d\})+X$/; // $ MISSING: Alert
300298var good43 = / ( " [ ^ " ] * ?" | [ ^ " \s ] + ) + (? = \s * | \s * $ ) / g;
301299
302300var bad87 = / ( " [ ^ " ] * ?" | [ ^ " \s ] + ) + (? = \s * | \s * $ ) X / g; // $ Alert
303- var bad88 = / ( " [ ^ " ] * ?" | [ ^ " \s ] + ) + (? = X ) / g;
304- var bad89 = / ( x * ) + (? = $ ) /
305- var bad90 = / ( x * ) + (? = $ | y ) /
301+ var bad88 = / ( " [ ^ " ] * ?" | [ ^ " \s ] + ) + (? = X ) / g; // $ Alert
302+ var bad89 = / ( x * ) + (? = $ ) / // $ Alert
303+ var bad90 = / ( x * ) + (? = $ | y ) / // $ Alert
306304
307305// OK - but we spuriously conclude that a rejecting suffix exists.
308306var good44 = / ( [ \s \S ] * ) + (? = $ ) / ;
309307var good45 = / ( [ \s \S ] * ) + (? = $ | y ) / ;
310308
311309var good46 = / ( f o o | F O O ) * b a r / ;
312- var bad91 = / ( f o o | F O O ) * b a r / i;
310+ var bad91 = / ( f o o | F O O ) * b a r / i; // $ Alert
313311
314312var good47 = / ( [ A B ] | [ a b ] ) * C / ;
315- var bad92 = / ( [ D E ] | [ d e ] ) * F / i;
313+ var bad92 = / ( [ D E ] | [ d e ] ) * F / i; // $ Alert
316314
317- var bad93 = / (?< = ^ v ? | \s v ? ) ( a | a a ) * $ / ;
318- var bad94 = / ( a | a a ) * $ / ;
315+ var bad93 = / (?< = ^ v ? | \s v ? ) ( a | a a ) * $ / ; // $ Alert
316+ var bad94 = / ( a | a a ) * $ / ; // $ Alert
319317
320318var bad95 = new RegExp (
321319 "(a" +
322320 "|" +
323321 "aa)*" +
324322 "b$"
325- ) ;
323+ ) ; // $ Alert
326324
327325var bad96 = new RegExp ( "(" +
328326 "(c|cc)*|" +
329327 "(d|dd)*|" +
330328 "(e|ee)*" +
331- ")f$" ) ;
329+ ")f$" ) ; // $ Alert
332330
333331var bad97 = new RegExp (
334332 "(g|gg" +
335- ")*h$" ) ;
333+ ")*h$" ) ; // $ Alert
336334
337- var bad98 = / ^ (?: \* \/ \* | [ a - z A - Z 0 - 9 ] [ a - z A - Z 0 - 9 ! \# \$ & \- \^ _ \. \+ ] { 0 , 126 } \/ (?: \* | [ a - z A - Z 0 - 9 ] [ a - z A - Z 0 - 9 ! \# \$ & \- \^ _ \. \+ ] { 0 , 126 } ) (?: \s * * ; * [ a - z A - Z 0 - 9 ] [ a - z A - Z 0 - 9 ! \# \$ & \- \^ _ \. \+ ] { 0 , 126 } (?: = " ? [ a - z A - Z 0 - 9 ] [ a - z A - Z 0 - 9 ! \# \$ & \- \^ _ \. \+ ] { 0 , 126 } " ? ) ? \s * ) * ) $ / ;
335+ var bad98 = / ^ (?: \* \/ \* | [ a - z A - Z 0 - 9 ] [ a - z A - Z 0 - 9 ! \# \$ & \- \^ _ \. \+ ] { 0 , 126 } \/ (?: \* | [ a - z A - Z 0 - 9 ] [ a - z A - Z 0 - 9 ! \# \$ & \- \^ _ \. \+ ] { 0 , 126 } ) (?: \s * * ; * [ a - z A - Z 0 - 9 ] [ a - z A - Z 0 - 9 ! \# \$ & \- \^ _ \. \+ ] { 0 , 126 } (?: = " ? [ a - z A - Z 0 - 9 ] [ a - z A - Z 0 - 9 ! \# \$ & \- \^ _ \. \+ ] { 0 , 126 } " ? ) ? \s * ) * ) $ / ; // $ Alert
338336
339337var good48 = / ( \/ (?: \/ [ \w . - ] * ) * ) { 0 , 1 } : ( [ \w . - ] + ) / ;
340338
341- var bad99 = / ( a { 1 , } ) * b / ;
339+ var bad99 = / ( a { 1 , } ) * b / ; // $ Alert
342340
343341var unicode = / ^ \n \u0000 ( \u0000 | .) + $ / ;
344342
0 commit comments