blitzstrike 1.0.38 → 1.0.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1781 @@
1
+ {
2
+ "frameworks": [
3
+ {
4
+ "id": "laravel",
5
+ "name": "Laravel",
6
+ "language": "php",
7
+ "description": "PHP MVC framework: Eloquent ORM, Blade templating, middleware, form requests.",
8
+ "detect": [
9
+ "Illuminate",
10
+ "Request::",
11
+ "Route::",
12
+ "artisan",
13
+ "extends Controller",
14
+ "->middleware(",
15
+ "Auth::",
16
+ "DB::table("
17
+ ],
18
+ "sources": [
19
+ {
20
+ "pattern": "Request::input(",
21
+ "label": "Request::input()"
22
+ },
23
+ {
24
+ "pattern": "request()->input(",
25
+ "label": "request()->input()"
26
+ },
27
+ {
28
+ "pattern": "$request->input(",
29
+ "label": "$request->input()"
30
+ },
31
+ {
32
+ "pattern": "Request::all(",
33
+ "label": "Request::all()"
34
+ },
35
+ {
36
+ "pattern": "request()->all(",
37
+ "label": "request()->all()"
38
+ },
39
+ {
40
+ "pattern": "$request->all(",
41
+ "label": "$request->all()"
42
+ },
43
+ {
44
+ "pattern": "Request::query(",
45
+ "label": "Request::query()"
46
+ },
47
+ {
48
+ "pattern": "request()->query(",
49
+ "label": "request()->query()"
50
+ },
51
+ {
52
+ "pattern": "Request::file(",
53
+ "label": "Request::file()"
54
+ },
55
+ {
56
+ "pattern": "$request->file(",
57
+ "label": "$request->file()"
58
+ },
59
+ {
60
+ "pattern": "->input(",
61
+ "label": "request input"
62
+ }
63
+ ],
64
+ "sinks": [
65
+ {
66
+ "pattern": "->create(",
67
+ "label": "Eloquent mass assignment",
68
+ "cwe": "CWE-915"
69
+ },
70
+ {
71
+ "pattern": "::create(",
72
+ "label": "Eloquent mass assignment (static)",
73
+ "cwe": "CWE-915"
74
+ },
75
+ {
76
+ "pattern": "::update(",
77
+ "label": "Eloquent mass assignment (static)",
78
+ "cwe": "CWE-915"
79
+ },
80
+ {
81
+ "pattern": "::firstOrCreate(",
82
+ "label": "Eloquent mass assignment",
83
+ "cwe": "CWE-915"
84
+ },
85
+ {
86
+ "pattern": "::updateOrCreate(",
87
+ "label": "Eloquent mass assignment",
88
+ "cwe": "CWE-915"
89
+ },
90
+ {
91
+ "pattern": "->update(",
92
+ "label": "Eloquent mass assignment",
93
+ "cwe": "CWE-915"
94
+ },
95
+ {
96
+ "pattern": "->fill(",
97
+ "label": "Eloquent mass assignment",
98
+ "cwe": "CWE-915"
99
+ },
100
+ {
101
+ "pattern": "->forceFill(",
102
+ "label": "Eloquent mass assignment",
103
+ "cwe": "CWE-915"
104
+ },
105
+ {
106
+ "pattern": "DB::statement(",
107
+ "label": "raw SQL statement",
108
+ "cwe": "CWE-89"
109
+ },
110
+ {
111
+ "pattern": "DB::select(",
112
+ "label": "raw SQL select",
113
+ "cwe": "CWE-89"
114
+ },
115
+ {
116
+ "pattern": "DB::unprepared(",
117
+ "label": "raw SQL unprepared",
118
+ "cwe": "CWE-89"
119
+ },
120
+ {
121
+ "pattern": "->whereRaw(",
122
+ "label": "raw SQL where",
123
+ "cwe": "CWE-89"
124
+ },
125
+ {
126
+ "pattern": "->havingRaw(",
127
+ "label": "raw SQL having",
128
+ "cwe": "CWE-89"
129
+ },
130
+ {
131
+ "pattern": "->orderByRaw(",
132
+ "label": "raw SQL order",
133
+ "cwe": "CWE-89"
134
+ },
135
+ {
136
+ "pattern": "->groupByRaw(",
137
+ "label": "raw SQL group",
138
+ "cwe": "CWE-89"
139
+ },
140
+ {
141
+ "pattern": "{!!",
142
+ "label": "Blade unescaped output",
143
+ "cwe": "CWE-79"
144
+ },
145
+ {
146
+ "pattern": "->links(",
147
+ "label": "pagination raw output",
148
+ "cwe": "CWE-79"
149
+ },
150
+ {
151
+ "pattern": "unserialize(",
152
+ "label": "deserialization",
153
+ "cwe": "CWE-502"
154
+ },
155
+ {
156
+ "pattern": "unserialize(base64_decode(",
157
+ "label": "deserialization (base64)",
158
+ "cwe": "CWE-502"
159
+ },
160
+ {
161
+ "pattern": "->markdown(",
162
+ "label": "markdown raw render",
163
+ "cwe": "CWE-79"
164
+ },
165
+ {
166
+ "pattern": "->download(",
167
+ "label": "file download",
168
+ "cwe": "CWE-434"
169
+ },
170
+ {
171
+ "pattern": "->storeAs(",
172
+ "label": "file upload",
173
+ "cwe": "CWE-434"
174
+ }
175
+ ],
176
+ "sanitizers": [
177
+ {
178
+ "pattern": "e(",
179
+ "label": "Laravel e() helper"
180
+ },
181
+ {
182
+ "pattern": "->validate(",
183
+ "label": "Laravel validation"
184
+ },
185
+ {
186
+ "pattern": "->validated(",
187
+ "label": "Laravel validated"
188
+ },
189
+ {
190
+ "pattern": "filter_var(",
191
+ "label": "PHP filter_var"
192
+ },
193
+ {
194
+ "pattern": "htmlspecialchars(",
195
+ "label": "htmlspecialchars"
196
+ },
197
+ {
198
+ "pattern": "->safe(",
199
+ "label": "Laravel safe"
200
+ },
201
+ {
202
+ "pattern": "clean(",
203
+ "label": "input cleaning"
204
+ }
205
+ ],
206
+ "auth": [
207
+ {
208
+ "pattern": "->middleware('auth'",
209
+ "label": "auth middleware"
210
+ },
211
+ {
212
+ "pattern": "->middleware(\"auth\"",
213
+ "label": "auth middleware"
214
+ },
215
+ {
216
+ "pattern": "Auth::check(",
217
+ "label": "Auth::check()"
218
+ },
219
+ {
220
+ "pattern": "->authorize(",
221
+ "label": "Laravel authorize"
222
+ },
223
+ {
224
+ "pattern": "Gate::allows(",
225
+ "label": "Laravel Gate"
226
+ },
227
+ {
228
+ "pattern": "->can(",
229
+ "label": "policy check"
230
+ },
231
+ {
232
+ "pattern": "auth()->user(",
233
+ "label": "authenticated user"
234
+ },
235
+ {
236
+ "pattern": "->middleware('role:",
237
+ "label": "role middleware"
238
+ }
239
+ ],
240
+ "routing": [
241
+ {
242
+ "pattern": "Route::get(",
243
+ "label": "route GET"
244
+ },
245
+ {
246
+ "pattern": "Route::post(",
247
+ "label": "route POST"
248
+ },
249
+ {
250
+ "pattern": "Route::match(",
251
+ "label": "route match"
252
+ },
253
+ {
254
+ "pattern": "Route::resource(",
255
+ "label": "resource route"
256
+ },
257
+ {
258
+ "pattern": "Route::any(",
259
+ "label": "route any"
260
+ },
261
+ {
262
+ "pattern": "->group(",
263
+ "label": "route group"
264
+ }
265
+ ],
266
+ "orm": [
267
+ {
268
+ "pattern": "->where(",
269
+ "label": "Eloquent where"
270
+ },
271
+ {
272
+ "pattern": "DB::table(",
273
+ "label": "query builder table"
274
+ },
275
+ {
276
+ "pattern": "->join(",
277
+ "label": "Eloquent join"
278
+ },
279
+ {
280
+ "pattern": "->leftJoin(",
281
+ "label": "Eloquent left join"
282
+ },
283
+ {
284
+ "pattern": "->select(",
285
+ "label": "query select"
286
+ },
287
+ {
288
+ "pattern": "->insert(",
289
+ "label": "query insert"
290
+ },
291
+ {
292
+ "pattern": "->pluck(",
293
+ "label": "query pluck"
294
+ }
295
+ ],
296
+ "middleware": [
297
+ {
298
+ "pattern": "->middleware(",
299
+ "label": "middleware binding"
300
+ },
301
+ {
302
+ "pattern": "app/Http/Middleware",
303
+ "label": "middleware directory"
304
+ },
305
+ {
306
+ "pattern": "->withoutMiddleware(",
307
+ "label": "middleware bypass"
308
+ }
309
+ ]
310
+ },
311
+ {
312
+ "id": "wordpress",
313
+ "name": "WordPress",
314
+ "language": "php",
315
+ "description": "PHP CMS: hooks, $wpdb, WP_Query, nonces, capabilities, REST API.",
316
+ "detect": [
317
+ "ABSPATH",
318
+ "add_action(",
319
+ "add_filter(",
320
+ "$wpdb",
321
+ "WP_Query(",
322
+ "get_option(",
323
+ "plugin_basename",
324
+ "wp_"
325
+ ],
326
+ "sources": [
327
+ {
328
+ "pattern": "$_GET",
329
+ "label": "HTTP GET"
330
+ },
331
+ {
332
+ "pattern": "$_POST",
333
+ "label": "HTTP POST"
334
+ },
335
+ {
336
+ "pattern": "$_REQUEST",
337
+ "label": "HTTP request"
338
+ },
339
+ {
340
+ "pattern": "$_COOKIE",
341
+ "label": "HTTP cookie"
342
+ },
343
+ {
344
+ "pattern": "$_FILES",
345
+ "label": "uploaded file"
346
+ },
347
+ {
348
+ "pattern": "$_SERVER",
349
+ "label": "server/header"
350
+ },
351
+ {
352
+ "pattern": "get_query_var(",
353
+ "label": "query var"
354
+ },
355
+ {
356
+ "pattern": "get_option(",
357
+ "label": "stored option"
358
+ }
359
+ ],
360
+ "sinks": [
361
+ {
362
+ "pattern": "$wpdb->query(",
363
+ "label": "raw SQL query",
364
+ "cwe": "CWE-89"
365
+ },
366
+ {
367
+ "pattern": "$wpdb->get_var(",
368
+ "label": "raw SQL",
369
+ "cwe": "CWE-89"
370
+ },
371
+ {
372
+ "pattern": "$wpdb->get_results(",
373
+ "label": "raw SQL",
374
+ "cwe": "CWE-89"
375
+ },
376
+ {
377
+ "pattern": "->query(",
378
+ "label": "SQL query",
379
+ "cwe": "CWE-89"
380
+ },
381
+ {
382
+ "pattern": "echo ",
383
+ "label": "HTML output",
384
+ "cwe": "CWE-79"
385
+ },
386
+ {
387
+ "pattern": "print ",
388
+ "label": "HTML output",
389
+ "cwe": "CWE-79"
390
+ },
391
+ {
392
+ "pattern": "wp_redirect(",
393
+ "label": "open redirect",
394
+ "cwe": "CWE-601"
395
+ },
396
+ {
397
+ "pattern": "header(",
398
+ "label": "redirect",
399
+ "cwe": "CWE-601"
400
+ },
401
+ {
402
+ "pattern": "include(",
403
+ "label": "file inclusion",
404
+ "cwe": "CWE-98"
405
+ },
406
+ {
407
+ "pattern": "require(",
408
+ "label": "file inclusion",
409
+ "cwe": "CWE-98"
410
+ },
411
+ {
412
+ "pattern": "unserialize(",
413
+ "label": "deserialization",
414
+ "cwe": "CWE-502"
415
+ },
416
+ {
417
+ "pattern": "maybe_unserialize(",
418
+ "label": "deserialization",
419
+ "cwe": "CWE-502"
420
+ },
421
+ {
422
+ "pattern": "wp_remote_get(",
423
+ "label": "SSRF",
424
+ "cwe": "CWE-918"
425
+ },
426
+ {
427
+ "pattern": "wp_remote_post(",
428
+ "label": "SSRF",
429
+ "cwe": "CWE-918"
430
+ },
431
+ {
432
+ "pattern": "file_get_contents(",
433
+ "label": "file read / SSRF",
434
+ "cwe": "CWE-918"
435
+ },
436
+ {
437
+ "pattern": "->extractTo(",
438
+ "label": "zip extraction",
439
+ "cwe": "CWE-22"
440
+ }
441
+ ],
442
+ "sanitizers": [
443
+ {
444
+ "pattern": "esc_html(",
445
+ "label": "esc_html"
446
+ },
447
+ {
448
+ "pattern": "esc_attr(",
449
+ "label": "esc_attr"
450
+ },
451
+ {
452
+ "pattern": "esc_url(",
453
+ "label": "esc_url"
454
+ },
455
+ {
456
+ "pattern": "esc_js(",
457
+ "label": "esc_js"
458
+ },
459
+ {
460
+ "pattern": "sanitize_text_field(",
461
+ "label": "sanitize_text_field"
462
+ },
463
+ {
464
+ "pattern": "absint(",
465
+ "label": "absint"
466
+ },
467
+ {
468
+ "pattern": "intval(",
469
+ "label": "intval"
470
+ },
471
+ {
472
+ "pattern": "wp_kses(",
473
+ "label": "wp_kses"
474
+ },
475
+ {
476
+ "pattern": "esc_sql(",
477
+ "label": "esc_sql"
478
+ },
479
+ {
480
+ "pattern": "$wpdb->prepare(",
481
+ "label": "prepared statement"
482
+ },
483
+ {
484
+ "pattern": "wp_verify_nonce(",
485
+ "label": "nonce verification"
486
+ },
487
+ {
488
+ "pattern": "check_ajax_referer(",
489
+ "label": "nonce check"
490
+ }
491
+ ],
492
+ "auth": [
493
+ {
494
+ "pattern": "current_user_can(",
495
+ "label": "capability check"
496
+ },
497
+ {
498
+ "pattern": "check_ajax_referer(",
499
+ "label": "AJAX nonce check"
500
+ },
501
+ {
502
+ "pattern": "wp_verify_nonce(",
503
+ "label": "nonce verification"
504
+ },
505
+ {
506
+ "pattern": "is_user_logged_in(",
507
+ "label": "logged-in check"
508
+ },
509
+ {
510
+ "pattern": "check_admin_referer(",
511
+ "label": "admin nonce check"
512
+ },
513
+ {
514
+ "pattern": "user_can(",
515
+ "label": "user capability"
516
+ }
517
+ ],
518
+ "routing": [
519
+ {
520
+ "pattern": "add_action(",
521
+ "label": "hook registration"
522
+ },
523
+ {
524
+ "pattern": "add_filter(",
525
+ "label": "filter registration"
526
+ },
527
+ {
528
+ "pattern": "register_rest_route(",
529
+ "label": "REST route"
530
+ },
531
+ {
532
+ "pattern": "wp_ajax_",
533
+ "label": "AJAX action"
534
+ },
535
+ {
536
+ "pattern": "admin_post_",
537
+ "label": "admin post action"
538
+ }
539
+ ],
540
+ "orm": [
541
+ {
542
+ "pattern": "WP_Query(",
543
+ "label": "WP_Query"
544
+ },
545
+ {
546
+ "pattern": "get_posts(",
547
+ "label": "get_posts"
548
+ },
549
+ {
550
+ "pattern": "$wpdb->get_row(",
551
+ "label": "raw row query"
552
+ },
553
+ {
554
+ "pattern": "$wpdb->insert(",
555
+ "label": "raw insert"
556
+ },
557
+ {
558
+ "pattern": "$wpdb->update(",
559
+ "label": "raw update"
560
+ }
561
+ ],
562
+ "middleware": [
563
+ {
564
+ "pattern": "add_action(",
565
+ "label": "action hook"
566
+ },
567
+ {
568
+ "pattern": "add_filter(",
569
+ "label": "filter hook"
570
+ },
571
+ {
572
+ "pattern": "register_rest_route(",
573
+ "label": "REST middleware"
574
+ },
575
+ {
576
+ "pattern": "plugins_loaded",
577
+ "label": "plugin lifecycle"
578
+ }
579
+ ]
580
+ },
581
+ {
582
+ "id": "express",
583
+ "name": "Express",
584
+ "language": "javascript",
585
+ "description": "Node.js web framework: middleware, routing, res/reply, body parsing.",
586
+ "detect": [
587
+ "express()",
588
+ "require(\"express\")",
589
+ "require('express')",
590
+ "app.get(",
591
+ "app.use(",
592
+ "app.post(",
593
+ "router.get(",
594
+ "res.send(",
595
+ "res.json("
596
+ ],
597
+ "sources": [
598
+ {
599
+ "pattern": "req.query",
600
+ "label": "req.query"
601
+ },
602
+ {
603
+ "pattern": "req.body",
604
+ "label": "req.body"
605
+ },
606
+ {
607
+ "pattern": "req.params",
608
+ "label": "req.params"
609
+ },
610
+ {
611
+ "pattern": "req.headers",
612
+ "label": "req.headers"
613
+ },
614
+ {
615
+ "pattern": "req.cookies",
616
+ "label": "req.cookies"
617
+ },
618
+ {
619
+ "pattern": "req.files",
620
+ "label": "req.files"
621
+ }
622
+ ],
623
+ "sinks": [
624
+ {
625
+ "pattern": "res.send(",
626
+ "label": "response send",
627
+ "cwe": "CWE-79"
628
+ },
629
+ {
630
+ "pattern": "res.json(",
631
+ "label": "response json",
632
+ "cwe": "CWE-79"
633
+ },
634
+ {
635
+ "pattern": "res.render(",
636
+ "label": "template render",
637
+ "cwe": "CWE-79"
638
+ },
639
+ {
640
+ "pattern": "res.redirect(",
641
+ "label": "redirect",
642
+ "cwe": "CWE-601"
643
+ },
644
+ {
645
+ "pattern": "res.write(",
646
+ "label": "response write",
647
+ "cwe": "CWE-79"
648
+ },
649
+ {
650
+ "pattern": "eval(",
651
+ "label": "eval",
652
+ "cwe": "CWE-94"
653
+ },
654
+ {
655
+ "pattern": "exec(",
656
+ "label": "command exec",
657
+ "cwe": "CWE-78"
658
+ },
659
+ {
660
+ "pattern": "execSync(",
661
+ "label": "command exec",
662
+ "cwe": "CWE-78"
663
+ },
664
+ {
665
+ "pattern": "spawn(",
666
+ "label": "command spawn",
667
+ "cwe": "CWE-78"
668
+ },
669
+ {
670
+ "pattern": "child_process",
671
+ "label": "child process",
672
+ "cwe": "CWE-78"
673
+ },
674
+ {
675
+ "pattern": "db.query(",
676
+ "label": "SQL query",
677
+ "cwe": "CWE-89"
678
+ },
679
+ {
680
+ "pattern": ".query(",
681
+ "label": "SQL query",
682
+ "cwe": "CWE-89"
683
+ },
684
+ {
685
+ "pattern": "fs.readFile(",
686
+ "label": "path traversal",
687
+ "cwe": "CWE-22"
688
+ },
689
+ {
690
+ "pattern": "fs.writeFile(",
691
+ "label": "file write",
692
+ "cwe": "CWE-434"
693
+ },
694
+ {
695
+ "pattern": "fs.readFileSync(",
696
+ "label": "path traversal",
697
+ "cwe": "CWE-22"
698
+ }
699
+ ],
700
+ "sanitizers": [
701
+ {
702
+ "pattern": "escapeHtml(",
703
+ "label": "escapeHtml"
704
+ },
705
+ {
706
+ "pattern": "sanitizeHtml(",
707
+ "label": "sanitizeHtml"
708
+ },
709
+ {
710
+ "pattern": "escape(",
711
+ "label": "escape"
712
+ },
713
+ {
714
+ "pattern": "encodeURIComponent(",
715
+ "label": "encodeURIComponent"
716
+ },
717
+ {
718
+ "pattern": "Number(",
719
+ "label": "Number cast"
720
+ },
721
+ {
722
+ "pattern": "parseInt(",
723
+ "label": "parseInt"
724
+ },
725
+ {
726
+ "pattern": "parameterize(",
727
+ "label": "parameterized query"
728
+ }
729
+ ],
730
+ "auth": [
731
+ {
732
+ "pattern": "passport.authenticate(",
733
+ "label": "passport auth"
734
+ },
735
+ {
736
+ "pattern": "req.isAuthenticated(",
737
+ "label": "session auth"
738
+ },
739
+ {
740
+ "pattern": "jwt.verify(",
741
+ "label": "JWT verify"
742
+ },
743
+ {
744
+ "pattern": "verifyToken(",
745
+ "label": "token verify"
746
+ },
747
+ {
748
+ "pattern": "authMiddleware(",
749
+ "label": "auth middleware"
750
+ },
751
+ {
752
+ "pattern": "isAdmin(",
753
+ "label": "admin check"
754
+ },
755
+ {
756
+ "pattern": "app.use(auth",
757
+ "label": "auth middleware"
758
+ }
759
+ ],
760
+ "routing": [
761
+ {
762
+ "pattern": "app.get(",
763
+ "label": "GET route"
764
+ },
765
+ {
766
+ "pattern": "app.post(",
767
+ "label": "POST route"
768
+ },
769
+ {
770
+ "pattern": "app.put(",
771
+ "label": "PUT route"
772
+ },
773
+ {
774
+ "pattern": "app.delete(",
775
+ "label": "DELETE route"
776
+ },
777
+ {
778
+ "pattern": "router.get(",
779
+ "label": "router GET"
780
+ },
781
+ {
782
+ "pattern": "router.post(",
783
+ "label": "router POST"
784
+ }
785
+ ],
786
+ "orm": [
787
+ {
788
+ "pattern": ".findOne(",
789
+ "label": "ORM findOne"
790
+ },
791
+ {
792
+ "pattern": ".find(",
793
+ "label": "ORM find"
794
+ },
795
+ {
796
+ "pattern": ".create(",
797
+ "label": "ORM create"
798
+ },
799
+ {
800
+ "pattern": ".updateOne(",
801
+ "label": "ORM update"
802
+ },
803
+ {
804
+ "pattern": ".insertOne(",
805
+ "label": "ORM insert"
806
+ },
807
+ {
808
+ "pattern": ".exec(",
809
+ "label": "ORM exec"
810
+ }
811
+ ],
812
+ "middleware": [
813
+ {
814
+ "pattern": "app.use(",
815
+ "label": "app middleware"
816
+ },
817
+ {
818
+ "pattern": "router.use(",
819
+ "label": "router middleware"
820
+ },
821
+ {
822
+ "pattern": "next(",
823
+ "label": "middleware next"
824
+ },
825
+ {
826
+ "pattern": "bodyParser(",
827
+ "label": "body parser"
828
+ }
829
+ ]
830
+ },
831
+ {
832
+ "id": "nextjs",
833
+ "name": "Next.js",
834
+ "language": "javascript",
835
+ "description": "React framework: API routes, getServerSideProps, server components, middleware.",
836
+ "detect": [
837
+ "getServerSideProps",
838
+ "getStaticProps",
839
+ "next/router",
840
+ "pages/api",
841
+ "app/api",
842
+ "NextRequest",
843
+ "route.ts"
844
+ ],
845
+ "sources": [
846
+ {
847
+ "pattern": "req.query",
848
+ "label": "req.query"
849
+ },
850
+ {
851
+ "pattern": "req.body",
852
+ "label": "req.body"
853
+ },
854
+ {
855
+ "pattern": "params",
856
+ "label": "route params"
857
+ },
858
+ {
859
+ "pattern": "searchParams",
860
+ "label": "search params"
861
+ },
862
+ {
863
+ "pattern": "req.json(",
864
+ "label": "request JSON"
865
+ },
866
+ {
867
+ "pattern": "request.json(",
868
+ "label": "request JSON"
869
+ },
870
+ {
871
+ "pattern": "req.formData(",
872
+ "label": "request form data"
873
+ },
874
+ {
875
+ "pattern": "request.formData(",
876
+ "label": "request form data"
877
+ }
878
+ ],
879
+ "sinks": [
880
+ {
881
+ "pattern": "res.json(",
882
+ "label": "response json",
883
+ "cwe": "CWE-79"
884
+ },
885
+ {
886
+ "pattern": "res.send(",
887
+ "label": "response send",
888
+ "cwe": "CWE-79"
889
+ },
890
+ {
891
+ "pattern": "res.write(",
892
+ "label": "response write",
893
+ "cwe": "CWE-79"
894
+ },
895
+ {
896
+ "pattern": "dangerouslySetInnerHTML",
897
+ "label": "raw HTML",
898
+ "cwe": "CWE-79"
899
+ },
900
+ {
901
+ "pattern": "eval(",
902
+ "label": "eval",
903
+ "cwe": "CWE-94"
904
+ },
905
+ {
906
+ "pattern": "exec(",
907
+ "label": "command exec",
908
+ "cwe": "CWE-78"
909
+ },
910
+ {
911
+ "pattern": "execSync(",
912
+ "label": "command exec",
913
+ "cwe": "CWE-78"
914
+ },
915
+ {
916
+ "pattern": "db.query(",
917
+ "label": "SQL query",
918
+ "cwe": "CWE-89"
919
+ },
920
+ {
921
+ "pattern": ".query(",
922
+ "label": "SQL query",
923
+ "cwe": "CWE-89"
924
+ },
925
+ {
926
+ "pattern": "->redirect(",
927
+ "label": "redirect",
928
+ "cwe": "CWE-601"
929
+ },
930
+ {
931
+ "pattern": "NextResponse.redirect(",
932
+ "label": "redirect",
933
+ "cwe": "CWE-601"
934
+ }
935
+ ],
936
+ "sanitizers": [
937
+ {
938
+ "pattern": "escapeHtml(",
939
+ "label": "escapeHtml"
940
+ },
941
+ {
942
+ "pattern": "sanitizeHtml(",
943
+ "label": "sanitizeHtml"
944
+ },
945
+ {
946
+ "pattern": "encodeURIComponent(",
947
+ "label": "encodeURIComponent"
948
+ },
949
+ {
950
+ "pattern": "escape(",
951
+ "label": "escape"
952
+ },
953
+ {
954
+ "pattern": "Number(",
955
+ "label": "Number cast"
956
+ },
957
+ {
958
+ "pattern": "parseInt(",
959
+ "label": "parseInt"
960
+ }
961
+ ],
962
+ "auth": [
963
+ {
964
+ "pattern": "getServerSession(",
965
+ "label": "NextAuth session"
966
+ },
967
+ {
968
+ "pattern": "withAuth(",
969
+ "label": "auth HOC"
970
+ },
971
+ {
972
+ "pattern": "auth(",
973
+ "label": "auth helper"
974
+ },
975
+ {
976
+ "pattern": "requireAuth(",
977
+ "label": "require auth"
978
+ },
979
+ {
980
+ "pattern": "middleware.ts",
981
+ "label": "edge middleware"
982
+ },
983
+ {
984
+ "pattern": "getSession(",
985
+ "label": "session"
986
+ }
987
+ ],
988
+ "routing": [
989
+ {
990
+ "pattern": "pages/api",
991
+ "label": "API route"
992
+ },
993
+ {
994
+ "pattern": "app/api",
995
+ "label": "API route"
996
+ },
997
+ {
998
+ "pattern": "route.ts",
999
+ "label": "route handler"
1000
+ },
1001
+ {
1002
+ "pattern": "router.get(",
1003
+ "label": "router GET"
1004
+ },
1005
+ {
1006
+ "pattern": "router.post(",
1007
+ "label": "router POST"
1008
+ }
1009
+ ],
1010
+ "orm": [
1011
+ {
1012
+ "pattern": ".findMany(",
1013
+ "label": "Prisma findMany"
1014
+ },
1015
+ {
1016
+ "pattern": ".findUnique(",
1017
+ "label": "Prisma findUnique"
1018
+ },
1019
+ {
1020
+ "pattern": ".create(",
1021
+ "label": "Prisma create"
1022
+ },
1023
+ {
1024
+ "pattern": ".update(",
1025
+ "label": "Prisma update"
1026
+ },
1027
+ {
1028
+ "pattern": ".delete(",
1029
+ "label": "Prisma delete"
1030
+ },
1031
+ {
1032
+ "pattern": ".upsert(",
1033
+ "label": "Prisma upsert"
1034
+ },
1035
+ {
1036
+ "pattern": ".queryRaw(",
1037
+ "label": "Prisma raw query"
1038
+ }
1039
+ ],
1040
+ "middleware": [
1041
+ {
1042
+ "pattern": "middleware.ts",
1043
+ "label": "edge middleware"
1044
+ },
1045
+ {
1046
+ "pattern": "NextResponse.redirect(",
1047
+ "label": "redirect middleware"
1048
+ },
1049
+ {
1050
+ "pattern": "withAuth(",
1051
+ "label": "auth middleware"
1052
+ }
1053
+ ]
1054
+ },
1055
+ {
1056
+ "id": "django",
1057
+ "name": "Django",
1058
+ "language": "python",
1059
+ "description": "Python web framework: ORM, views, templates, middleware, CSRF.",
1060
+ "detect": [
1061
+ "from django",
1062
+ "import django",
1063
+ "Model.objects",
1064
+ "request.GET",
1065
+ "request.POST",
1066
+ "render(",
1067
+ "@login_required",
1068
+ "urlpatterns"
1069
+ ],
1070
+ "sources": [
1071
+ {
1072
+ "pattern": "request.GET",
1073
+ "label": "request.GET"
1074
+ },
1075
+ {
1076
+ "pattern": "request.POST",
1077
+ "label": "request.POST"
1078
+ },
1079
+ {
1080
+ "pattern": "request.FILES",
1081
+ "label": "request.FILES"
1082
+ },
1083
+ {
1084
+ "pattern": "request.COOKIES",
1085
+ "label": "request.COOKIES"
1086
+ },
1087
+ {
1088
+ "pattern": "request.META",
1089
+ "label": "request.META"
1090
+ },
1091
+ {
1092
+ "pattern": "request.GET.get(",
1093
+ "label": "request GET"
1094
+ },
1095
+ {
1096
+ "pattern": "request.POST.get(",
1097
+ "label": "request POST"
1098
+ }
1099
+ ],
1100
+ "sinks": [
1101
+ {
1102
+ "pattern": "Model.objects.raw(",
1103
+ "label": "raw SQL",
1104
+ "cwe": "CWE-89"
1105
+ },
1106
+ {
1107
+ "pattern": ".raw(",
1108
+ "label": "raw SQL",
1109
+ "cwe": "CWE-89"
1110
+ },
1111
+ {
1112
+ "pattern": "cursor.execute(",
1113
+ "label": "raw SQL",
1114
+ "cwe": "CWE-89"
1115
+ },
1116
+ {
1117
+ "pattern": "connection.cursor(",
1118
+ "label": "raw SQL",
1119
+ "cwe": "CWE-89"
1120
+ },
1121
+ {
1122
+ "pattern": "render(",
1123
+ "label": "template render",
1124
+ "cwe": "CWE-79"
1125
+ },
1126
+ {
1127
+ "pattern": "HttpResponse(",
1128
+ "label": "response",
1129
+ "cwe": "CWE-79"
1130
+ },
1131
+ {
1132
+ "pattern": "redirect(",
1133
+ "label": "redirect",
1134
+ "cwe": "CWE-601"
1135
+ },
1136
+ {
1137
+ "pattern": "eval(",
1138
+ "label": "eval",
1139
+ "cwe": "CWE-94"
1140
+ },
1141
+ {
1142
+ "pattern": "exec(",
1143
+ "label": "exec",
1144
+ "cwe": "CWE-94"
1145
+ },
1146
+ {
1147
+ "pattern": "os.system(",
1148
+ "label": "command exec",
1149
+ "cwe": "CWE-78"
1150
+ },
1151
+ {
1152
+ "pattern": "subprocess",
1153
+ "label": "subprocess",
1154
+ "cwe": "CWE-78"
1155
+ },
1156
+ {
1157
+ "pattern": "pickle.loads(",
1158
+ "label": "deserialization",
1159
+ "cwe": "CWE-502"
1160
+ },
1161
+ {
1162
+ "pattern": "yaml.load(",
1163
+ "label": "deserialization",
1164
+ "cwe": "CWE-502"
1165
+ },
1166
+ {
1167
+ "pattern": "open(",
1168
+ "label": "file operations",
1169
+ "cwe": "CWE-22"
1170
+ },
1171
+ {
1172
+ "pattern": "|safe",
1173
+ "label": "Django safe filter (XSS)",
1174
+ "cwe": "CWE-79"
1175
+ },
1176
+ {
1177
+ "pattern": "mark_safe(",
1178
+ "label": "mark_safe (XSS)",
1179
+ "cwe": "CWE-79"
1180
+ }
1181
+ ],
1182
+ "sanitizers": [
1183
+ {
1184
+ "pattern": "escape(",
1185
+ "label": "escape"
1186
+ },
1187
+ {
1188
+ "pattern": "html.escape(",
1189
+ "label": "html.escape"
1190
+ },
1191
+ {
1192
+ "pattern": "bleach(",
1193
+ "label": "bleach"
1194
+ },
1195
+ {
1196
+ "pattern": "strip_tags(",
1197
+ "label": "strip_tags"
1198
+ },
1199
+ {
1200
+ "pattern": "int(",
1201
+ "label": "int cast"
1202
+ },
1203
+ {
1204
+ "pattern": "float(",
1205
+ "label": "float cast"
1206
+ },
1207
+ {
1208
+ "pattern": "shlex.quote(",
1209
+ "label": "shlex.quote"
1210
+ },
1211
+ {
1212
+ "pattern": "conditional_escape(",
1213
+ "label": "conditional_escape"
1214
+ }
1215
+ ],
1216
+ "auth": [
1217
+ {
1218
+ "pattern": "@login_required",
1219
+ "label": "login required"
1220
+ },
1221
+ {
1222
+ "pattern": "@permission_required",
1223
+ "label": "permission required"
1224
+ },
1225
+ {
1226
+ "pattern": "user.is_authenticated",
1227
+ "label": "authenticated check"
1228
+ },
1229
+ {
1230
+ "pattern": "request.user",
1231
+ "label": "request user"
1232
+ },
1233
+ {
1234
+ "pattern": "@csrf_protect",
1235
+ "label": "CSRF protect"
1236
+ },
1237
+ {
1238
+ "pattern": "has_perm(",
1239
+ "label": "permission check"
1240
+ }
1241
+ ],
1242
+ "routing": [
1243
+ {
1244
+ "pattern": "urlpatterns",
1245
+ "label": "URL patterns"
1246
+ },
1247
+ {
1248
+ "pattern": "path(",
1249
+ "label": "path route"
1250
+ },
1251
+ {
1252
+ "pattern": "url(",
1253
+ "label": "url route"
1254
+ },
1255
+ {
1256
+ "pattern": "re_path(",
1257
+ "label": "regex route"
1258
+ }
1259
+ ],
1260
+ "orm": [
1261
+ {
1262
+ "pattern": "Model.objects",
1263
+ "label": "Django ORM"
1264
+ },
1265
+ {
1266
+ "pattern": ".filter(",
1267
+ "label": "ORM filter"
1268
+ },
1269
+ {
1270
+ "pattern": ".get(",
1271
+ "label": "ORM get"
1272
+ },
1273
+ {
1274
+ "pattern": ".exclude(",
1275
+ "label": "ORM exclude"
1276
+ },
1277
+ {
1278
+ "pattern": ".raw(",
1279
+ "label": "ORM raw"
1280
+ },
1281
+ {
1282
+ "pattern": ".values(",
1283
+ "label": "ORM values"
1284
+ },
1285
+ {
1286
+ "pattern": ".extra(",
1287
+ "label": "ORM extra (raw)"
1288
+ }
1289
+ ],
1290
+ "middleware": [
1291
+ {
1292
+ "pattern": "MIDDLEWARE",
1293
+ "label": "middleware settings"
1294
+ },
1295
+ {
1296
+ "pattern": "process_request(",
1297
+ "label": "process_request"
1298
+ },
1299
+ {
1300
+ "pattern": "process_view(",
1301
+ "label": "process_view"
1302
+ },
1303
+ {
1304
+ "pattern": "@csrf_exempt",
1305
+ "label": "CSRF exempt (dangerous)"
1306
+ }
1307
+ ]
1308
+ },
1309
+ {
1310
+ "id": "fastapi",
1311
+ "name": "FastAPI",
1312
+ "language": "python",
1313
+ "description": "Python async framework: dependency injection, pydantic, OpenAPI.",
1314
+ "detect": [
1315
+ "fastapi",
1316
+ "APIRouter",
1317
+ "Depends(",
1318
+ "@app.get(",
1319
+ "@app.post(",
1320
+ "Query(",
1321
+ "Body(",
1322
+ "Form(",
1323
+ "File("
1324
+ ],
1325
+ "sources": [
1326
+ {
1327
+ "pattern": "Query(",
1328
+ "label": "Query param"
1329
+ },
1330
+ {
1331
+ "pattern": "Body(",
1332
+ "label": "request body"
1333
+ },
1334
+ {
1335
+ "pattern": "Form(",
1336
+ "label": "form field"
1337
+ },
1338
+ {
1339
+ "pattern": "File(",
1340
+ "label": "uploaded file"
1341
+ },
1342
+ {
1343
+ "pattern": "Header(",
1344
+ "label": "header"
1345
+ },
1346
+ {
1347
+ "pattern": "Cookie(",
1348
+ "label": "cookie"
1349
+ },
1350
+ {
1351
+ "pattern": "Request(",
1352
+ "label": "request object"
1353
+ },
1354
+ {
1355
+ "pattern": "request.query_params",
1356
+ "label": "query params"
1357
+ },
1358
+ {
1359
+ "pattern": "request.json(",
1360
+ "label": "request JSON"
1361
+ }
1362
+ ],
1363
+ "sinks": [
1364
+ {
1365
+ "pattern": "eval(",
1366
+ "label": "eval",
1367
+ "cwe": "CWE-94"
1368
+ },
1369
+ {
1370
+ "pattern": "exec(",
1371
+ "label": "exec",
1372
+ "cwe": "CWE-94"
1373
+ },
1374
+ {
1375
+ "pattern": "os.system(",
1376
+ "label": "command exec",
1377
+ "cwe": "CWE-78"
1378
+ },
1379
+ {
1380
+ "pattern": "subprocess",
1381
+ "label": "subprocess",
1382
+ "cwe": "CWE-78"
1383
+ },
1384
+ {
1385
+ "pattern": "cursor.execute(",
1386
+ "label": "raw SQL",
1387
+ "cwe": "CWE-89"
1388
+ },
1389
+ {
1390
+ "pattern": ".execute(",
1391
+ "label": "raw SQL",
1392
+ "cwe": "CWE-89"
1393
+ },
1394
+ {
1395
+ "pattern": "pickle.loads(",
1396
+ "label": "deserialization",
1397
+ "cwe": "CWE-502"
1398
+ },
1399
+ {
1400
+ "pattern": "yaml.load(",
1401
+ "label": "deserialization",
1402
+ "cwe": "CWE-502"
1403
+ },
1404
+ {
1405
+ "pattern": "open(",
1406
+ "label": "file operations",
1407
+ "cwe": "CWE-22"
1408
+ },
1409
+ {
1410
+ "pattern": "redirect(",
1411
+ "label": "redirect",
1412
+ "cwe": "CWE-601"
1413
+ },
1414
+ {
1415
+ "pattern": "HTMLResponse(",
1416
+ "label": "raw HTML",
1417
+ "cwe": "CWE-79"
1418
+ },
1419
+ {
1420
+ "pattern": "render(",
1421
+ "label": "template render",
1422
+ "cwe": "CWE-79"
1423
+ }
1424
+ ],
1425
+ "sanitizers": [
1426
+ {
1427
+ "pattern": "escape(",
1428
+ "label": "escape"
1429
+ },
1430
+ {
1431
+ "pattern": "html.escape(",
1432
+ "label": "html.escape"
1433
+ },
1434
+ {
1435
+ "pattern": "bleach(",
1436
+ "label": "bleach"
1437
+ },
1438
+ {
1439
+ "pattern": "shlex.quote(",
1440
+ "label": "shlex.quote"
1441
+ },
1442
+ {
1443
+ "pattern": "int(",
1444
+ "label": "int cast"
1445
+ },
1446
+ {
1447
+ "pattern": "float(",
1448
+ "label": "float cast"
1449
+ }
1450
+ ],
1451
+ "auth": [
1452
+ {
1453
+ "pattern": "Depends(",
1454
+ "label": "dependency"
1455
+ },
1456
+ {
1457
+ "pattern": "OAuth2PasswordBearer(",
1458
+ "label": "OAuth2 bearer"
1459
+ },
1460
+ {
1461
+ "pattern": "HTTPBearer(",
1462
+ "label": "HTTP bearer"
1463
+ },
1464
+ {
1465
+ "pattern": "Security(",
1466
+ "label": "security dependency"
1467
+ },
1468
+ {
1469
+ "pattern": "current_user",
1470
+ "label": "current user"
1471
+ },
1472
+ {
1473
+ "pattern": "get_current_user(",
1474
+ "label": "current user"
1475
+ }
1476
+ ],
1477
+ "routing": [
1478
+ {
1479
+ "pattern": "@app.get(",
1480
+ "label": "GET route"
1481
+ },
1482
+ {
1483
+ "pattern": "@app.post(",
1484
+ "label": "POST route"
1485
+ },
1486
+ {
1487
+ "pattern": "@router.get(",
1488
+ "label": "router GET"
1489
+ },
1490
+ {
1491
+ "pattern": "@router.post(",
1492
+ "label": "router POST"
1493
+ },
1494
+ {
1495
+ "pattern": "APIRouter(",
1496
+ "label": "API router"
1497
+ }
1498
+ ],
1499
+ "orm": [
1500
+ {
1501
+ "pattern": ".execute(",
1502
+ "label": "SQL execute"
1503
+ },
1504
+ {
1505
+ "pattern": ".filter(",
1506
+ "label": "ORM filter"
1507
+ },
1508
+ {
1509
+ "pattern": ".all(",
1510
+ "label": "ORM all"
1511
+ },
1512
+ {
1513
+ "pattern": "SQLAlchemy",
1514
+ "label": "SQLAlchemy"
1515
+ },
1516
+ {
1517
+ "pattern": ".query(",
1518
+ "label": "ORM query"
1519
+ }
1520
+ ],
1521
+ "middleware": [
1522
+ {
1523
+ "pattern": "@app.middleware(",
1524
+ "label": "app middleware"
1525
+ },
1526
+ {
1527
+ "pattern": "Depends(",
1528
+ "label": "dependency injection"
1529
+ },
1530
+ {
1531
+ "pattern": "Middleware(",
1532
+ "label": "middleware"
1533
+ }
1534
+ ]
1535
+ },
1536
+ {
1537
+ "id": "spring",
1538
+ "name": "Spring",
1539
+ "language": "java",
1540
+ "description": "Java framework: controllers, JPA, security, actuator, REST mappings.",
1541
+ "detect": [
1542
+ "@RestController",
1543
+ "@RequestMapping",
1544
+ "@Autowired",
1545
+ "@RequestParam",
1546
+ "@RequestBody",
1547
+ "@PathVariable",
1548
+ "SpringBootApplication",
1549
+ "org.springframework"
1550
+ ],
1551
+ "sources": [
1552
+ {
1553
+ "pattern": "@RequestParam",
1554
+ "label": "request param"
1555
+ },
1556
+ {
1557
+ "pattern": "@PathVariable",
1558
+ "label": "path variable"
1559
+ },
1560
+ {
1561
+ "pattern": "@RequestBody",
1562
+ "label": "request body"
1563
+ },
1564
+ {
1565
+ "pattern": "request.getParameter(",
1566
+ "label": "getParameter"
1567
+ },
1568
+ {
1569
+ "pattern": "request.getHeader(",
1570
+ "label": "getHeader"
1571
+ },
1572
+ {
1573
+ "pattern": "@RequestHeader",
1574
+ "label": "request header"
1575
+ },
1576
+ {
1577
+ "pattern": "@CookieValue",
1578
+ "label": "cookie value"
1579
+ }
1580
+ ],
1581
+ "sinks": [
1582
+ {
1583
+ "pattern": "Runtime.getRuntime().exec(",
1584
+ "label": "command exec",
1585
+ "cwe": "CWE-78"
1586
+ },
1587
+ {
1588
+ "pattern": "ProcessBuilder(",
1589
+ "label": "process builder",
1590
+ "cwe": "CWE-78"
1591
+ },
1592
+ {
1593
+ "pattern": ".executeQuery(",
1594
+ "label": "SQL query",
1595
+ "cwe": "CWE-89"
1596
+ },
1597
+ {
1598
+ "pattern": ".execute(",
1599
+ "label": "SQL execute",
1600
+ "cwe": "CWE-89"
1601
+ },
1602
+ {
1603
+ "pattern": "createStatement(",
1604
+ "label": "raw statement",
1605
+ "cwe": "CWE-89"
1606
+ },
1607
+ {
1608
+ "pattern": "ObjectInputStream",
1609
+ "label": "deserialization",
1610
+ "cwe": "CWE-502"
1611
+ },
1612
+ {
1613
+ "pattern": "readObject(",
1614
+ "label": "deserialization",
1615
+ "cwe": "CWE-502"
1616
+ },
1617
+ {
1618
+ "pattern": ".write(",
1619
+ "label": "response write",
1620
+ "cwe": "CWE-79"
1621
+ },
1622
+ {
1623
+ "pattern": ".println(",
1624
+ "label": "response print",
1625
+ "cwe": "CWE-79"
1626
+ },
1627
+ {
1628
+ "pattern": "sendRedirect(",
1629
+ "label": "redirect",
1630
+ "cwe": "CWE-601"
1631
+ },
1632
+ {
1633
+ "pattern": ".forward(",
1634
+ "label": "forward",
1635
+ "cwe": "CWE-601"
1636
+ },
1637
+ {
1638
+ "pattern": "new File(",
1639
+ "label": "file operations",
1640
+ "cwe": "CWE-434"
1641
+ },
1642
+ {
1643
+ "pattern": "DocumentBuilder",
1644
+ "label": "XXE",
1645
+ "cwe": "CWE-611"
1646
+ },
1647
+ {
1648
+ "pattern": ".parse(",
1649
+ "label": "XXE parse",
1650
+ "cwe": "CWE-611"
1651
+ }
1652
+ ],
1653
+ "sanitizers": [
1654
+ {
1655
+ "pattern": "HtmlUtils.htmlEscape(",
1656
+ "label": "htmlEscape"
1657
+ },
1658
+ {
1659
+ "pattern": "StringEscapeUtils.escapeHtml(",
1660
+ "label": "escapeHtml"
1661
+ },
1662
+ {
1663
+ "pattern": "PreparedStatement",
1664
+ "label": "prepared statement"
1665
+ },
1666
+ {
1667
+ "pattern": ".setString(",
1668
+ "label": "parameter binding"
1669
+ },
1670
+ {
1671
+ "pattern": "Integer.parseInt(",
1672
+ "label": "int parse"
1673
+ },
1674
+ {
1675
+ "pattern": "Long.parseLong(",
1676
+ "label": "long parse"
1677
+ }
1678
+ ],
1679
+ "auth": [
1680
+ {
1681
+ "pattern": "@PreAuthorize(",
1682
+ "label": "pre-authorize"
1683
+ },
1684
+ {
1685
+ "pattern": "@Secured(",
1686
+ "label": "secured"
1687
+ },
1688
+ {
1689
+ "pattern": "SecurityContextHolder",
1690
+ "label": "security context"
1691
+ },
1692
+ {
1693
+ "pattern": "@EnableWebSecurity",
1694
+ "label": "web security"
1695
+ },
1696
+ {
1697
+ "pattern": "isAuthenticated(",
1698
+ "label": "auth check"
1699
+ },
1700
+ {
1701
+ "pattern": "hasRole(",
1702
+ "label": "role check"
1703
+ },
1704
+ {
1705
+ "pattern": "hasAuthority(",
1706
+ "label": "authority check"
1707
+ }
1708
+ ],
1709
+ "routing": [
1710
+ {
1711
+ "pattern": "@RequestMapping",
1712
+ "label": "request mapping"
1713
+ },
1714
+ {
1715
+ "pattern": "@GetMapping",
1716
+ "label": "GET mapping"
1717
+ },
1718
+ {
1719
+ "pattern": "@PostMapping",
1720
+ "label": "POST mapping"
1721
+ },
1722
+ {
1723
+ "pattern": "@PutMapping",
1724
+ "label": "PUT mapping"
1725
+ },
1726
+ {
1727
+ "pattern": "@DeleteMapping",
1728
+ "label": "DELETE mapping"
1729
+ },
1730
+ {
1731
+ "pattern": "@PatchMapping",
1732
+ "label": "PATCH mapping"
1733
+ }
1734
+ ],
1735
+ "orm": [
1736
+ {
1737
+ "pattern": "JdbcTemplate",
1738
+ "label": "JdbcTemplate"
1739
+ },
1740
+ {
1741
+ "pattern": "@Query(",
1742
+ "label": "JPA query"
1743
+ },
1744
+ {
1745
+ "pattern": "EntityManager",
1746
+ "label": "EntityManager"
1747
+ },
1748
+ {
1749
+ "pattern": ".createQuery(",
1750
+ "label": "JPA query"
1751
+ },
1752
+ {
1753
+ "pattern": ".createNativeQuery(",
1754
+ "label": "native query"
1755
+ },
1756
+ {
1757
+ "pattern": "JpaRepository",
1758
+ "label": "JPA repository"
1759
+ }
1760
+ ],
1761
+ "middleware": [
1762
+ {
1763
+ "pattern": "OncePerRequestFilter",
1764
+ "label": "filter"
1765
+ },
1766
+ {
1767
+ "pattern": "HandlerInterceptor",
1768
+ "label": "interceptor"
1769
+ },
1770
+ {
1771
+ "pattern": "@PreAuthorize(",
1772
+ "label": "method security"
1773
+ },
1774
+ {
1775
+ "pattern": "FilterChain",
1776
+ "label": "filter chain"
1777
+ }
1778
+ ]
1779
+ }
1780
+ ]
1781
+ }