@mytechtoday/augment-extensions 0.7.0 → 1.2.0
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.
- package/AGENTS.md +265 -232
- package/README.md +956 -771
- package/augment-extensions/coding-standards/bash/README.md +196 -196
- package/augment-extensions/coding-standards/bash/module.json +163 -163
- package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -336
- package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -289
- package/augment-extensions/coding-standards/css/README.md +40 -40
- package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -550
- package/augment-extensions/coding-standards/css/module.json +44 -44
- package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -448
- package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -492
- package/augment-extensions/coding-standards/html/README.md +40 -40
- package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -267
- package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -505
- package/augment-extensions/coding-standards/html/module.json +44 -44
- package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -349
- package/augment-extensions/coding-standards/html-css-js/README.md +194 -194
- package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -487
- package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -550
- package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -667
- package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -267
- package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -612
- package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -505
- package/augment-extensions/coding-standards/html-css-js/module.json +48 -48
- package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -515
- package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -448
- package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -492
- package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -439
- package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -349
- package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -486
- package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -463
- package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -543
- package/augment-extensions/coding-standards/js/README.md +46 -46
- package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -487
- package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -667
- package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -612
- package/augment-extensions/coding-standards/js/module.json +49 -49
- package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -515
- package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -439
- package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -486
- package/augment-extensions/coding-standards/js/rules/performance.md +463 -463
- package/augment-extensions/coding-standards/js/rules/tooling.md +543 -543
- package/augment-extensions/coding-standards/php/README.md +248 -248
- package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -204
- package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -206
- package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -234
- package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -211
- package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -215
- package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -189
- package/augment-extensions/coding-standards/php/module.json +166 -166
- package/augment-extensions/coding-standards/php/rules/api-development.md +480 -480
- package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -332
- package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -472
- package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -561
- package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -402
- package/augment-extensions/coding-standards/php/rules/documentation.md +425 -425
- package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -627
- package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -336
- package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -677
- package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -279
- package/augment-extensions/coding-standards/php/rules/performance.md +392 -392
- package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -186
- package/augment-extensions/coding-standards/php/rules/security.md +358 -358
- package/augment-extensions/coding-standards/php/rules/testing.md +403 -403
- package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -331
- package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -426
- package/augment-extensions/coding-standards/powershell/README.md +154 -154
- package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -272
- package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -173
- package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -243
- package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -297
- package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -224
- package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -340
- package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -255
- package/augment-extensions/coding-standards/powershell/module.json +165 -165
- package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -439
- package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -240
- package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -384
- package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -383
- package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -482
- package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -296
- package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -314
- package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -466
- package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -244
- package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -266
- package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -209
- package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -314
- package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -268
- package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -197
- package/augment-extensions/coding-standards/python/README.md +48 -48
- package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -373
- package/augment-extensions/coding-standards/python/module.json +30 -30
- package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -884
- package/augment-extensions/coding-standards/python/rules/best-practices.md +232 -232
- package/augment-extensions/coding-standards/python/rules/code-organization.md +220 -220
- package/augment-extensions/coding-standards/python/rules/documentation.md +831 -831
- package/augment-extensions/coding-standards/python/rules/error-handling.md +1008 -1008
- package/augment-extensions/coding-standards/python/rules/naming-conventions.md +172 -172
- package/augment-extensions/coding-standards/python/rules/testing.md +409 -409
- package/augment-extensions/coding-standards/python/rules/tooling.md +446 -446
- package/augment-extensions/coding-standards/python/rules/type-hints.md +253 -253
- package/augment-extensions/coding-standards/react/README.md +45 -45
- package/augment-extensions/coding-standards/react/module.json +27 -27
- package/augment-extensions/coding-standards/react/rules/component-patterns.md +214 -214
- package/augment-extensions/coding-standards/react/rules/hooks-best-practices.md +235 -235
- package/augment-extensions/coding-standards/react/rules/performance.md +300 -300
- package/augment-extensions/coding-standards/react/rules/state-management.md +265 -265
- package/augment-extensions/coding-standards/react/rules/typescript-react.md +271 -271
- package/augment-extensions/coding-standards/typescript/README.md +45 -45
- package/augment-extensions/coding-standards/typescript/module.json +27 -27
- package/augment-extensions/coding-standards/typescript/rules/naming-conventions.md +225 -225
- package/augment-extensions/collections/html-css-js/README.md +82 -82
- package/augment-extensions/collections/html-css-js/collection.json +41 -41
- package/augment-extensions/domain-rules/api-design/README.md +41 -41
- package/augment-extensions/domain-rules/api-design/module.json +27 -27
- package/augment-extensions/domain-rules/api-design/rules/authentication.md +263 -263
- package/augment-extensions/domain-rules/api-design/rules/documentation.md +395 -395
- package/augment-extensions/domain-rules/api-design/rules/error-handling.md +290 -290
- package/augment-extensions/domain-rules/api-design/rules/graphql-api.md +313 -313
- package/augment-extensions/domain-rules/api-design/rules/rest-api.md +214 -214
- package/augment-extensions/domain-rules/api-design/rules/versioning.md +268 -268
- package/augment-extensions/domain-rules/database/README.md +161 -161
- package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -793
- package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -1132
- package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -868
- package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -805
- package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -621
- package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -965
- package/augment-extensions/domain-rules/database/module.json +28 -28
- package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -624
- package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -588
- package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -856
- package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -778
- package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -963
- package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -1076
- package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -697
- package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -671
- package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -607
- package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -907
- package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -783
- package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -980
- package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -485
- package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -521
- package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -858
- package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -934
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -27
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -26
- package/augment-extensions/domain-rules/mcp/README.md +150 -150
- package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -522
- package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -520
- package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -570
- package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -427
- package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -435
- package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -502
- package/augment-extensions/domain-rules/mcp/module.json +49 -49
- package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -595
- package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -345
- package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -687
- package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -636
- package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -484
- package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -360
- package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -393
- package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -194
- package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -625
- package/augment-extensions/domain-rules/security/README.md +41 -41
- package/augment-extensions/domain-rules/security/module.json +28 -28
- package/augment-extensions/domain-rules/security/rules/authentication-security.md +361 -361
- package/augment-extensions/domain-rules/security/rules/encryption.md +208 -208
- package/augment-extensions/domain-rules/security/rules/input-validation.md +294 -294
- package/augment-extensions/domain-rules/security/rules/owasp-top-10.md +339 -339
- package/augment-extensions/domain-rules/security/rules/secure-coding.md +293 -293
- package/augment-extensions/domain-rules/security/rules/web-security.md +268 -268
- package/augment-extensions/domain-rules/seo-sales-marketing/ANNOUNCEMENT.md +143 -0
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/README.md +140 -136
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/SCHEMA-VALIDATION-REPORT.md +216 -216
- package/augment-extensions/domain-rules/seo-sales-marketing/TEST-VALIDATION.md +129 -0
- package/augment-extensions/domain-rules/seo-sales-marketing/USAGE-GUIDES.md +254 -0
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/brand-kit-example.yaml +292 -292
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/campaign-brief-example.yaml +389 -389
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/content-calendar-example.yaml +643 -643
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/email-newsletter-example.md +376 -376
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/landing-page-example.md +934 -934
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/ppc-ad-copy-example.md +301 -301
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/seo-blog-post-example.md +347 -347
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/social-media-campaign-example.md +606 -606
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/module.json +50 -50
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/affiliate-influencer-marketing.md +593 -593
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/asset-management.md +418 -418
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/brand-consistency.md +210 -210
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/content-marketing.md +337 -337
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/conversion-optimization.md +455 -455
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/direct-sales.md +499 -499
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/email-marketing.md +439 -439
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/legal-compliance.md +227 -227
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/ppc-advertising.md +569 -569
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/seo-optimization.md +470 -470
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/social-media-marketing.md +414 -414
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/universal-marketing.md +177 -177
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/asset-inventory.schema.json +247 -247
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/brand-kit.schema.json +326 -326
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/campaign-brief.schema.json +342 -342
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/color-palette.schema.json +223 -223
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/content-template.schema.json +383 -383
- package/augment-extensions/domain-rules/wordpress/README.md +163 -163
- package/augment-extensions/domain-rules/wordpress/module.json +32 -32
- package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -617
- package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -270
- package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -423
- package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -493
- package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -568
- package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -510
- package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -251
- package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -501
- package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -564
- package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -388
- package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -441
- package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -139
- package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -1599
- package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -1727
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -428
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -422
- package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -1623
- package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -1343
- package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -734
- package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -1350
- package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -503
- package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -971
- package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -53
- package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -770
- package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -874
- package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -629
- package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -559
- package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -709
- package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -736
- package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -1057
- package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -463
- package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -478
- package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -818
- package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -416
- package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -667
- package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -878
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -693
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -352
- package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -818
- package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -624
- package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -866
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -1165
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -414
- package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -751
- package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -949
- package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -458
- package/augment-extensions/examples/design-patterns/README.md +37 -37
- package/augment-extensions/examples/design-patterns/examples/behavioral-patterns.md +370 -370
- package/augment-extensions/examples/design-patterns/examples/creational-patterns.md +250 -250
- package/augment-extensions/examples/design-patterns/examples/structural-patterns.md +264 -264
- package/augment-extensions/examples/design-patterns/module.json +27 -27
- package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -101
- package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -428
- package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -40
- package/augment-extensions/examples/rest-api-plugin/README.md +98 -98
- package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -1299
- package/augment-extensions/examples/rest-api-plugin/module.json +40 -40
- package/augment-extensions/examples/woocommerce-extension/README.md +98 -98
- package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -763
- package/augment-extensions/examples/woocommerce-extension/module.json +40 -40
- package/augment-extensions/workflows/beads/README.md +135 -135
- package/augment-extensions/workflows/beads/examples/complete-workflow-example.md +278 -278
- package/augment-extensions/workflows/beads/module.json +55 -55
- package/augment-extensions/workflows/beads/rules/best-practices.md +398 -398
- package/augment-extensions/workflows/beads/rules/file-format.md +327 -327
- package/augment-extensions/workflows/beads/rules/manual-setup.md +315 -315
- package/augment-extensions/workflows/beads/rules/workflow.md +326 -326
- package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -145
- package/augment-extensions/workflows/beads-integration/README.md +143 -143
- package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -32
- package/augment-extensions/workflows/beads-integration/config/schema.json +140 -140
- package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -293
- package/augment-extensions/workflows/beads-integration/module.json +75 -75
- package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -219
- package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -256
- package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -607
- package/augment-extensions/workflows/database/README.md +195 -195
- package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -295
- package/augment-extensions/workflows/database/examples/migration-example.md +498 -498
- package/augment-extensions/workflows/database/examples/optimization-example.md +496 -496
- package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -444
- package/augment-extensions/workflows/database/module.json +42 -42
- package/augment-extensions/workflows/database/rules/data-migration.md +249 -249
- package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -339
- package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -352
- package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -435
- package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -535
- package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -305
- package/augment-extensions/workflows/database/rules/workflow.md +458 -458
- package/augment-extensions/workflows/wordpress-plugin/README.md +232 -232
- package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -839
- package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -854
- package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -540
- package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -1083
- package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -669
- package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -597
- package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -925
- package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -752
- package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -773
- package/augment-extensions/workflows/wordpress-plugin/module.json +49 -49
- package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -942
- package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -702
- package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -728
- package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -775
- package/augment-extensions/writing-standards/screenplay/README.md +339 -300
- package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -121
- package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -153
- package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -243
- package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -213
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -164
- package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -95
- package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -116
- package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -151
- package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -67
- package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -142
- package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -184
- package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -204
- package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -181
- package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -70
- package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -399
- package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -407
- package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -401
- package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -409
- package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -268
- package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -294
- package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -294
- package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -289
- package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -294
- package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -293
- package/augment-extensions/writing-standards/screenplay/module.json +124 -124
- package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -339
- package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -329
- package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -169
- package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -437
- package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -263
- package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -261
- package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -315
- package/augment-extensions/writing-standards/screenplay/rules/file-organization.md +213 -0
- package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -413
- package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -372
- package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -374
- package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -443
- package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -207
- package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -444
- package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -331
- package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -334
- package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -299
- package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -263
- package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -412
- package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -370
- package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -374
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -339
- package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -277
- package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -393
- package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -332
- package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -247
- package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -200
- package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -233
- package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -245
- package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -221
- package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -159
- package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -1449
- package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -64
- package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -520
- package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -497
- package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -492
- package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -509
- package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -490
- package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -501
- package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -498
- package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -508
- package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -500
- package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -158
- package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -643
- package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -311
- package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -562
- package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -538
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -432
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -637
- package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -66
- package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -458
- package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -490
- package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -458
- package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -459
- package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -491
- package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -491
- package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -490
- package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -464
- package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -461
- package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -489
- package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -494
- package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -483
- package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -489
- package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -496
- package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -463
- package/augment-extensions/writing-standards/screenplay/utils/__tests__/file-organization.test.ts +169 -0
- package/augment-extensions/writing-standards/screenplay/utils/file-organization.ts +165 -0
- package/cli/MODULES.md +302 -302
- package/cli/dist/cli.js +109 -22
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/gui.d.ts.map +1 -1
- package/cli/dist/commands/gui.js +54 -6
- package/cli/dist/commands/gui.js.map +1 -1
- package/cli/dist/commands/init.d.ts.map +1 -1
- package/cli/dist/commands/init.js +76 -23
- package/cli/dist/commands/init.js.map +1 -1
- package/cli/dist/commands/self-remove.d.ts.map +1 -1
- package/cli/dist/commands/self-remove.js +48 -74
- package/cli/dist/commands/self-remove.js.map +1 -1
- package/cli/dist/commands/show.d.ts +11 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +120 -0
- package/cli/dist/commands/show.js.map +1 -1
- package/cli/dist/commands/showCompleted.d.ts +21 -0
- package/cli/dist/commands/showCompleted.d.ts.map +1 -0
- package/cli/dist/commands/showCompleted.js +225 -0
- package/cli/dist/commands/showCompleted.js.map +1 -0
- package/cli/dist/commands/skill.js +88 -88
- package/cli/dist/commands/update.d.ts +2 -0
- package/cli/dist/commands/update.d.ts.map +1 -1
- package/cli/dist/commands/update.js +67 -1
- package/cli/dist/commands/update.js.map +1 -1
- package/cli/dist/utils/beadsCompletedChecker.d.ts +72 -0
- package/cli/dist/utils/beadsCompletedChecker.d.ts.map +1 -0
- package/cli/dist/utils/beadsCompletedChecker.js +198 -0
- package/cli/dist/utils/beadsCompletedChecker.js.map +1 -0
- package/cli/dist/utils/catalog-sync.js +13 -13
- package/cli/dist/utils/extractCommandHelp.d.ts +51 -0
- package/cli/dist/utils/extractCommandHelp.d.ts.map +1 -0
- package/cli/dist/utils/extractCommandHelp.js +250 -0
- package/cli/dist/utils/extractCommandHelp.js.map +1 -0
- package/cli/dist/utils/install-rules.js +55 -55
- package/cli/dist/utils/mcp-integration.js +44 -44
- package/cli/dist/utils/rule-install-hooks.js +8 -8
- package/modules.md +667 -630
- package/package.json +85 -85
|
@@ -1,339 +1,339 @@
|
|
|
1
|
-
# OWASP Top 10 Vulnerabilities
|
|
2
|
-
|
|
3
|
-
Mitigations for the OWASP Top 10 web application security risks.
|
|
4
|
-
|
|
5
|
-
## A01:2021 - Broken Access Control
|
|
6
|
-
|
|
7
|
-
Unauthorized access to resources or functions.
|
|
8
|
-
|
|
9
|
-
```typescript
|
|
10
|
-
// Bad - No authorization check
|
|
11
|
-
app.get('/api/users/:id', async (req, res) => {
|
|
12
|
-
const user = await db.users.findOne(req.params.id);
|
|
13
|
-
res.json(user);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// Good - Check authorization
|
|
17
|
-
app.get('/api/users/:id', authenticate, async (req, res) => {
|
|
18
|
-
const user = await db.users.findOne(req.params.id);
|
|
19
|
-
|
|
20
|
-
// Users can only access their own data (unless admin)
|
|
21
|
-
if (user.id !== req.user.id && req.user.role !== 'admin') {
|
|
22
|
-
return res.status(403).json({ error: 'Forbidden' });
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
res.json(user);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
// Good - Use middleware for authorization
|
|
29
|
-
const authorize = (permission: string) => {
|
|
30
|
-
return (req, res, next) => {
|
|
31
|
-
if (!req.user.permissions.includes(permission)) {
|
|
32
|
-
return res.status(403).json({ error: 'Insufficient permissions' });
|
|
33
|
-
}
|
|
34
|
-
next();
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
app.delete('/api/users/:id', authenticate, authorize('delete:users'), async (req, res) => {
|
|
39
|
-
await db.users.delete(req.params.id);
|
|
40
|
-
res.status(204).send();
|
|
41
|
-
});
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## A02:2021 - Cryptographic Failures
|
|
45
|
-
|
|
46
|
-
Sensitive data exposure due to weak cryptography.
|
|
47
|
-
|
|
48
|
-
```typescript
|
|
49
|
-
// Bad - Storing passwords in plain text
|
|
50
|
-
await db.users.create({
|
|
51
|
-
email: 'user@example.com',
|
|
52
|
-
password: 'secret123' // ❌ Never store plain text passwords
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
// Good - Hash passwords with bcrypt
|
|
56
|
-
import bcrypt from 'bcrypt';
|
|
57
|
-
|
|
58
|
-
const hashedPassword = await bcrypt.hash(password, 10);
|
|
59
|
-
await db.users.create({
|
|
60
|
-
email: 'user@example.com',
|
|
61
|
-
password: hashedPassword
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
// Good - Verify password
|
|
65
|
-
const isValid = await bcrypt.compare(inputPassword, user.password);
|
|
66
|
-
|
|
67
|
-
// Bad - Weak encryption
|
|
68
|
-
const encrypted = Buffer.from(data).toString('base64'); // ❌ Not encryption
|
|
69
|
-
|
|
70
|
-
// Good - Use proper encryption
|
|
71
|
-
import crypto from 'crypto';
|
|
72
|
-
|
|
73
|
-
const algorithm = 'aes-256-gcm';
|
|
74
|
-
const key = crypto.randomBytes(32);
|
|
75
|
-
const iv = crypto.randomBytes(16);
|
|
76
|
-
|
|
77
|
-
const cipher = crypto.createCipheriv(algorithm, key, iv);
|
|
78
|
-
let encrypted = cipher.update(data, 'utf8', 'hex');
|
|
79
|
-
encrypted += cipher.final('hex');
|
|
80
|
-
const authTag = cipher.getAuthTag();
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## A03:2021 - Injection
|
|
84
|
-
|
|
85
|
-
SQL, NoSQL, OS command injection attacks.
|
|
86
|
-
|
|
87
|
-
```typescript
|
|
88
|
-
// Bad - SQL injection vulnerability
|
|
89
|
-
app.get('/users', async (req, res) => {
|
|
90
|
-
const query = `SELECT * FROM users WHERE name = '${req.query.name}'`;
|
|
91
|
-
const users = await db.query(query); // ❌ Vulnerable to SQL injection
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
// Good - Use parameterized queries
|
|
95
|
-
app.get('/users', async (req, res) => {
|
|
96
|
-
const users = await db.query(
|
|
97
|
-
'SELECT * FROM users WHERE name = $1',
|
|
98
|
-
[req.query.name]
|
|
99
|
-
);
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
// Good - Use ORM
|
|
103
|
-
const users = await db.users.findMany({
|
|
104
|
-
where: { name: req.query.name }
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
// Bad - Command injection
|
|
108
|
-
const { exec } = require('child_process');
|
|
109
|
-
exec(`ping ${req.query.host}`); // ❌ Vulnerable to command injection
|
|
110
|
-
|
|
111
|
-
// Good - Validate and sanitize input
|
|
112
|
-
const host = req.query.host;
|
|
113
|
-
if (!/^[a-zA-Z0-9.-]+$/.test(host)) {
|
|
114
|
-
return res.status(400).json({ error: 'Invalid host' });
|
|
115
|
-
}
|
|
116
|
-
exec(`ping ${host}`);
|
|
117
|
-
|
|
118
|
-
// Better - Use safe alternatives
|
|
119
|
-
import { ping } from 'ping';
|
|
120
|
-
const result = await ping.promise.probe(req.query.host);
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
## A04:2021 - Insecure Design
|
|
124
|
-
|
|
125
|
-
Flaws in design and architecture.
|
|
126
|
-
|
|
127
|
-
```typescript
|
|
128
|
-
// Bad - No rate limiting
|
|
129
|
-
app.post('/api/login', async (req, res) => {
|
|
130
|
-
const user = await authenticate(req.body.email, req.body.password);
|
|
131
|
-
// ❌ Allows brute force attacks
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
// Good - Implement rate limiting
|
|
135
|
-
import rateLimit from 'express-rate-limit';
|
|
136
|
-
|
|
137
|
-
const loginLimiter = rateLimit({
|
|
138
|
-
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
139
|
-
max: 5, // 5 attempts
|
|
140
|
-
message: 'Too many login attempts, please try again later'
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
app.post('/api/login', loginLimiter, async (req, res) => {
|
|
144
|
-
const user = await authenticate(req.body.email, req.body.password);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
// Good - Implement account lockout
|
|
148
|
-
const MAX_ATTEMPTS = 5;
|
|
149
|
-
const LOCKOUT_TIME = 15 * 60 * 1000; // 15 minutes
|
|
150
|
-
|
|
151
|
-
if (user.loginAttempts >= MAX_ATTEMPTS) {
|
|
152
|
-
const timeSinceLastAttempt = Date.now() - user.lastLoginAttempt;
|
|
153
|
-
if (timeSinceLastAttempt < LOCKOUT_TIME) {
|
|
154
|
-
return res.status(429).json({ error: 'Account locked' });
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
## A05:2021 - Security Misconfiguration
|
|
160
|
-
|
|
161
|
-
Insecure default configurations.
|
|
162
|
-
|
|
163
|
-
```typescript
|
|
164
|
-
// Bad - Exposing error details in production
|
|
165
|
-
app.use((err, req, res, next) => {
|
|
166
|
-
res.status(500).json({
|
|
167
|
-
error: err.message,
|
|
168
|
-
stack: err.stack // ❌ Exposes internal details
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
// Good - Hide details in production
|
|
173
|
-
app.use((err, req, res, next) => {
|
|
174
|
-
console.error(err); // Log server-side
|
|
175
|
-
|
|
176
|
-
if (process.env.NODE_ENV === 'production') {
|
|
177
|
-
res.status(500).json({ error: 'Internal server error' });
|
|
178
|
-
} else {
|
|
179
|
-
res.status(500).json({ error: err.message, stack: err.stack });
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
// Bad - Default credentials
|
|
184
|
-
const dbConfig = {
|
|
185
|
-
user: 'admin',
|
|
186
|
-
password: 'admin' // ❌ Default credentials
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
// Good - Use environment variables
|
|
190
|
-
const dbConfig = {
|
|
191
|
-
user: process.env.DB_USER,
|
|
192
|
-
password: process.env.DB_PASSWORD
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
// Good - Security headers
|
|
196
|
-
import helmet from 'helmet';
|
|
197
|
-
app.use(helmet());
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
## A06:2021 - Vulnerable and Outdated Components
|
|
201
|
-
|
|
202
|
-
Using components with known vulnerabilities.
|
|
203
|
-
|
|
204
|
-
```bash
|
|
205
|
-
# Good - Regularly update dependencies
|
|
206
|
-
npm audit
|
|
207
|
-
npm audit fix
|
|
208
|
-
|
|
209
|
-
# Good - Use automated tools
|
|
210
|
-
npm install -g npm-check-updates
|
|
211
|
-
ncu -u
|
|
212
|
-
npm install
|
|
213
|
-
|
|
214
|
-
# Good - Monitor for vulnerabilities
|
|
215
|
-
# Use Dependabot, Snyk, or similar tools
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
## A07:2021 - Identification and Authentication Failures
|
|
219
|
-
|
|
220
|
-
Weak authentication mechanisms.
|
|
221
|
-
|
|
222
|
-
```typescript
|
|
223
|
-
// Bad - Weak password requirements
|
|
224
|
-
if (password.length < 6) { // ❌ Too weak
|
|
225
|
-
return res.status(400).json({ error: 'Password too short' });
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// Good - Strong password requirements
|
|
229
|
-
const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{12,}$/;
|
|
230
|
-
if (!passwordRegex.test(password)) {
|
|
231
|
-
return res.status(400).json({
|
|
232
|
-
error: 'Password must be at least 12 characters with uppercase, lowercase, number, and special character'
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// Good - Implement MFA
|
|
237
|
-
const mfaToken = speakeasy.totp({
|
|
238
|
-
secret: user.mfaSecret,
|
|
239
|
-
encoding: 'base32'
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
if (req.body.mfaCode !== mfaToken) {
|
|
243
|
-
return res.status(401).json({ error: 'Invalid MFA code' });
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
## A08:2021 - Software and Data Integrity Failures
|
|
248
|
-
|
|
249
|
-
Insecure CI/CD, updates, or deserialization.
|
|
250
|
-
|
|
251
|
-
```typescript
|
|
252
|
-
// Bad - Unsafe deserialization
|
|
253
|
-
const userData = eval(req.body.data); // ❌ Never use eval
|
|
254
|
-
|
|
255
|
-
// Good - Safe JSON parsing
|
|
256
|
-
try {
|
|
257
|
-
const userData = JSON.parse(req.body.data);
|
|
258
|
-
} catch (error) {
|
|
259
|
-
return res.status(400).json({ error: 'Invalid JSON' });
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
// Good - Verify package integrity
|
|
263
|
-
# package-lock.json ensures integrity
|
|
264
|
-
npm ci # Use in CI/CD instead of npm install
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
## A09:2021 - Security Logging and Monitoring Failures
|
|
268
|
-
|
|
269
|
-
Insufficient logging and monitoring.
|
|
270
|
-
|
|
271
|
-
```typescript
|
|
272
|
-
// Good - Log security events
|
|
273
|
-
import winston from 'winston';
|
|
274
|
-
|
|
275
|
-
const logger = winston.createLogger({
|
|
276
|
-
level: 'info',
|
|
277
|
-
format: winston.format.json(),
|
|
278
|
-
transports: [
|
|
279
|
-
new winston.transports.File({ filename: 'security.log' })
|
|
280
|
-
]
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
// Log authentication attempts
|
|
284
|
-
logger.info('Login attempt', {
|
|
285
|
-
email: req.body.email,
|
|
286
|
-
ip: req.ip,
|
|
287
|
-
userAgent: req.headers['user-agent'],
|
|
288
|
-
success: true
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
// Log authorization failures
|
|
292
|
-
logger.warn('Authorization failed', {
|
|
293
|
-
userId: req.user.id,
|
|
294
|
-
resource: req.path,
|
|
295
|
-
action: req.method,
|
|
296
|
-
ip: req.ip
|
|
297
|
-
});
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
## A10:2021 - Server-Side Request Forgery (SSRF)
|
|
301
|
-
|
|
302
|
-
Fetching remote resources without validation.
|
|
303
|
-
|
|
304
|
-
```typescript
|
|
305
|
-
// Bad - SSRF vulnerability
|
|
306
|
-
app.get('/fetch', async (req, res) => {
|
|
307
|
-
const response = await fetch(req.query.url); // ❌ Allows SSRF
|
|
308
|
-
res.send(await response.text());
|
|
309
|
-
});
|
|
310
|
-
|
|
311
|
-
// Good - Validate URL
|
|
312
|
-
const allowedDomains = ['api.example.com', 'cdn.example.com'];
|
|
313
|
-
|
|
314
|
-
const url = new URL(req.query.url);
|
|
315
|
-
if (!allowedDomains.includes(url.hostname)) {
|
|
316
|
-
return res.status(400).json({ error: 'Invalid domain' });
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// Good - Block private IPs
|
|
320
|
-
import isPrivateIp from 'private-ip';
|
|
321
|
-
|
|
322
|
-
if (isPrivateIp(url.hostname)) {
|
|
323
|
-
return res.status(400).json({ error: 'Private IPs not allowed' });
|
|
324
|
-
}
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
## Best Practices
|
|
328
|
-
|
|
329
|
-
1. **Implement proper access control** - Check authorization
|
|
330
|
-
2. **Use strong encryption** - Protect sensitive data
|
|
331
|
-
3. **Prevent injection** - Use parameterized queries
|
|
332
|
-
4. **Design securely** - Security by design
|
|
333
|
-
5. **Configure securely** - No default credentials
|
|
334
|
-
6. **Update dependencies** - Patch vulnerabilities
|
|
335
|
-
7. **Strong authentication** - MFA, strong passwords
|
|
336
|
-
8. **Verify integrity** - Check package integrity
|
|
337
|
-
9. **Log security events** - Monitor for attacks
|
|
338
|
-
10. **Prevent SSRF** - Validate URLs and IPs
|
|
339
|
-
|
|
1
|
+
# OWASP Top 10 Vulnerabilities
|
|
2
|
+
|
|
3
|
+
Mitigations for the OWASP Top 10 web application security risks.
|
|
4
|
+
|
|
5
|
+
## A01:2021 - Broken Access Control
|
|
6
|
+
|
|
7
|
+
Unauthorized access to resources or functions.
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
// Bad - No authorization check
|
|
11
|
+
app.get('/api/users/:id', async (req, res) => {
|
|
12
|
+
const user = await db.users.findOne(req.params.id);
|
|
13
|
+
res.json(user);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// Good - Check authorization
|
|
17
|
+
app.get('/api/users/:id', authenticate, async (req, res) => {
|
|
18
|
+
const user = await db.users.findOne(req.params.id);
|
|
19
|
+
|
|
20
|
+
// Users can only access their own data (unless admin)
|
|
21
|
+
if (user.id !== req.user.id && req.user.role !== 'admin') {
|
|
22
|
+
return res.status(403).json({ error: 'Forbidden' });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
res.json(user);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Good - Use middleware for authorization
|
|
29
|
+
const authorize = (permission: string) => {
|
|
30
|
+
return (req, res, next) => {
|
|
31
|
+
if (!req.user.permissions.includes(permission)) {
|
|
32
|
+
return res.status(403).json({ error: 'Insufficient permissions' });
|
|
33
|
+
}
|
|
34
|
+
next();
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
app.delete('/api/users/:id', authenticate, authorize('delete:users'), async (req, res) => {
|
|
39
|
+
await db.users.delete(req.params.id);
|
|
40
|
+
res.status(204).send();
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## A02:2021 - Cryptographic Failures
|
|
45
|
+
|
|
46
|
+
Sensitive data exposure due to weak cryptography.
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
// Bad - Storing passwords in plain text
|
|
50
|
+
await db.users.create({
|
|
51
|
+
email: 'user@example.com',
|
|
52
|
+
password: 'secret123' // ❌ Never store plain text passwords
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// Good - Hash passwords with bcrypt
|
|
56
|
+
import bcrypt from 'bcrypt';
|
|
57
|
+
|
|
58
|
+
const hashedPassword = await bcrypt.hash(password, 10);
|
|
59
|
+
await db.users.create({
|
|
60
|
+
email: 'user@example.com',
|
|
61
|
+
password: hashedPassword
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Good - Verify password
|
|
65
|
+
const isValid = await bcrypt.compare(inputPassword, user.password);
|
|
66
|
+
|
|
67
|
+
// Bad - Weak encryption
|
|
68
|
+
const encrypted = Buffer.from(data).toString('base64'); // ❌ Not encryption
|
|
69
|
+
|
|
70
|
+
// Good - Use proper encryption
|
|
71
|
+
import crypto from 'crypto';
|
|
72
|
+
|
|
73
|
+
const algorithm = 'aes-256-gcm';
|
|
74
|
+
const key = crypto.randomBytes(32);
|
|
75
|
+
const iv = crypto.randomBytes(16);
|
|
76
|
+
|
|
77
|
+
const cipher = crypto.createCipheriv(algorithm, key, iv);
|
|
78
|
+
let encrypted = cipher.update(data, 'utf8', 'hex');
|
|
79
|
+
encrypted += cipher.final('hex');
|
|
80
|
+
const authTag = cipher.getAuthTag();
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## A03:2021 - Injection
|
|
84
|
+
|
|
85
|
+
SQL, NoSQL, OS command injection attacks.
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
// Bad - SQL injection vulnerability
|
|
89
|
+
app.get('/users', async (req, res) => {
|
|
90
|
+
const query = `SELECT * FROM users WHERE name = '${req.query.name}'`;
|
|
91
|
+
const users = await db.query(query); // ❌ Vulnerable to SQL injection
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Good - Use parameterized queries
|
|
95
|
+
app.get('/users', async (req, res) => {
|
|
96
|
+
const users = await db.query(
|
|
97
|
+
'SELECT * FROM users WHERE name = $1',
|
|
98
|
+
[req.query.name]
|
|
99
|
+
);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// Good - Use ORM
|
|
103
|
+
const users = await db.users.findMany({
|
|
104
|
+
where: { name: req.query.name }
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Bad - Command injection
|
|
108
|
+
const { exec } = require('child_process');
|
|
109
|
+
exec(`ping ${req.query.host}`); // ❌ Vulnerable to command injection
|
|
110
|
+
|
|
111
|
+
// Good - Validate and sanitize input
|
|
112
|
+
const host = req.query.host;
|
|
113
|
+
if (!/^[a-zA-Z0-9.-]+$/.test(host)) {
|
|
114
|
+
return res.status(400).json({ error: 'Invalid host' });
|
|
115
|
+
}
|
|
116
|
+
exec(`ping ${host}`);
|
|
117
|
+
|
|
118
|
+
// Better - Use safe alternatives
|
|
119
|
+
import { ping } from 'ping';
|
|
120
|
+
const result = await ping.promise.probe(req.query.host);
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## A04:2021 - Insecure Design
|
|
124
|
+
|
|
125
|
+
Flaws in design and architecture.
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
// Bad - No rate limiting
|
|
129
|
+
app.post('/api/login', async (req, res) => {
|
|
130
|
+
const user = await authenticate(req.body.email, req.body.password);
|
|
131
|
+
// ❌ Allows brute force attacks
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
// Good - Implement rate limiting
|
|
135
|
+
import rateLimit from 'express-rate-limit';
|
|
136
|
+
|
|
137
|
+
const loginLimiter = rateLimit({
|
|
138
|
+
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
139
|
+
max: 5, // 5 attempts
|
|
140
|
+
message: 'Too many login attempts, please try again later'
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
app.post('/api/login', loginLimiter, async (req, res) => {
|
|
144
|
+
const user = await authenticate(req.body.email, req.body.password);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Good - Implement account lockout
|
|
148
|
+
const MAX_ATTEMPTS = 5;
|
|
149
|
+
const LOCKOUT_TIME = 15 * 60 * 1000; // 15 minutes
|
|
150
|
+
|
|
151
|
+
if (user.loginAttempts >= MAX_ATTEMPTS) {
|
|
152
|
+
const timeSinceLastAttempt = Date.now() - user.lastLoginAttempt;
|
|
153
|
+
if (timeSinceLastAttempt < LOCKOUT_TIME) {
|
|
154
|
+
return res.status(429).json({ error: 'Account locked' });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## A05:2021 - Security Misconfiguration
|
|
160
|
+
|
|
161
|
+
Insecure default configurations.
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
// Bad - Exposing error details in production
|
|
165
|
+
app.use((err, req, res, next) => {
|
|
166
|
+
res.status(500).json({
|
|
167
|
+
error: err.message,
|
|
168
|
+
stack: err.stack // ❌ Exposes internal details
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Good - Hide details in production
|
|
173
|
+
app.use((err, req, res, next) => {
|
|
174
|
+
console.error(err); // Log server-side
|
|
175
|
+
|
|
176
|
+
if (process.env.NODE_ENV === 'production') {
|
|
177
|
+
res.status(500).json({ error: 'Internal server error' });
|
|
178
|
+
} else {
|
|
179
|
+
res.status(500).json({ error: err.message, stack: err.stack });
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
// Bad - Default credentials
|
|
184
|
+
const dbConfig = {
|
|
185
|
+
user: 'admin',
|
|
186
|
+
password: 'admin' // ❌ Default credentials
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
// Good - Use environment variables
|
|
190
|
+
const dbConfig = {
|
|
191
|
+
user: process.env.DB_USER,
|
|
192
|
+
password: process.env.DB_PASSWORD
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
// Good - Security headers
|
|
196
|
+
import helmet from 'helmet';
|
|
197
|
+
app.use(helmet());
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## A06:2021 - Vulnerable and Outdated Components
|
|
201
|
+
|
|
202
|
+
Using components with known vulnerabilities.
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# Good - Regularly update dependencies
|
|
206
|
+
npm audit
|
|
207
|
+
npm audit fix
|
|
208
|
+
|
|
209
|
+
# Good - Use automated tools
|
|
210
|
+
npm install -g npm-check-updates
|
|
211
|
+
ncu -u
|
|
212
|
+
npm install
|
|
213
|
+
|
|
214
|
+
# Good - Monitor for vulnerabilities
|
|
215
|
+
# Use Dependabot, Snyk, or similar tools
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## A07:2021 - Identification and Authentication Failures
|
|
219
|
+
|
|
220
|
+
Weak authentication mechanisms.
|
|
221
|
+
|
|
222
|
+
```typescript
|
|
223
|
+
// Bad - Weak password requirements
|
|
224
|
+
if (password.length < 6) { // ❌ Too weak
|
|
225
|
+
return res.status(400).json({ error: 'Password too short' });
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// Good - Strong password requirements
|
|
229
|
+
const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{12,}$/;
|
|
230
|
+
if (!passwordRegex.test(password)) {
|
|
231
|
+
return res.status(400).json({
|
|
232
|
+
error: 'Password must be at least 12 characters with uppercase, lowercase, number, and special character'
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Good - Implement MFA
|
|
237
|
+
const mfaToken = speakeasy.totp({
|
|
238
|
+
secret: user.mfaSecret,
|
|
239
|
+
encoding: 'base32'
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
if (req.body.mfaCode !== mfaToken) {
|
|
243
|
+
return res.status(401).json({ error: 'Invalid MFA code' });
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## A08:2021 - Software and Data Integrity Failures
|
|
248
|
+
|
|
249
|
+
Insecure CI/CD, updates, or deserialization.
|
|
250
|
+
|
|
251
|
+
```typescript
|
|
252
|
+
// Bad - Unsafe deserialization
|
|
253
|
+
const userData = eval(req.body.data); // ❌ Never use eval
|
|
254
|
+
|
|
255
|
+
// Good - Safe JSON parsing
|
|
256
|
+
try {
|
|
257
|
+
const userData = JSON.parse(req.body.data);
|
|
258
|
+
} catch (error) {
|
|
259
|
+
return res.status(400).json({ error: 'Invalid JSON' });
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Good - Verify package integrity
|
|
263
|
+
# package-lock.json ensures integrity
|
|
264
|
+
npm ci # Use in CI/CD instead of npm install
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## A09:2021 - Security Logging and Monitoring Failures
|
|
268
|
+
|
|
269
|
+
Insufficient logging and monitoring.
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
// Good - Log security events
|
|
273
|
+
import winston from 'winston';
|
|
274
|
+
|
|
275
|
+
const logger = winston.createLogger({
|
|
276
|
+
level: 'info',
|
|
277
|
+
format: winston.format.json(),
|
|
278
|
+
transports: [
|
|
279
|
+
new winston.transports.File({ filename: 'security.log' })
|
|
280
|
+
]
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
// Log authentication attempts
|
|
284
|
+
logger.info('Login attempt', {
|
|
285
|
+
email: req.body.email,
|
|
286
|
+
ip: req.ip,
|
|
287
|
+
userAgent: req.headers['user-agent'],
|
|
288
|
+
success: true
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
// Log authorization failures
|
|
292
|
+
logger.warn('Authorization failed', {
|
|
293
|
+
userId: req.user.id,
|
|
294
|
+
resource: req.path,
|
|
295
|
+
action: req.method,
|
|
296
|
+
ip: req.ip
|
|
297
|
+
});
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## A10:2021 - Server-Side Request Forgery (SSRF)
|
|
301
|
+
|
|
302
|
+
Fetching remote resources without validation.
|
|
303
|
+
|
|
304
|
+
```typescript
|
|
305
|
+
// Bad - SSRF vulnerability
|
|
306
|
+
app.get('/fetch', async (req, res) => {
|
|
307
|
+
const response = await fetch(req.query.url); // ❌ Allows SSRF
|
|
308
|
+
res.send(await response.text());
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
// Good - Validate URL
|
|
312
|
+
const allowedDomains = ['api.example.com', 'cdn.example.com'];
|
|
313
|
+
|
|
314
|
+
const url = new URL(req.query.url);
|
|
315
|
+
if (!allowedDomains.includes(url.hostname)) {
|
|
316
|
+
return res.status(400).json({ error: 'Invalid domain' });
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// Good - Block private IPs
|
|
320
|
+
import isPrivateIp from 'private-ip';
|
|
321
|
+
|
|
322
|
+
if (isPrivateIp(url.hostname)) {
|
|
323
|
+
return res.status(400).json({ error: 'Private IPs not allowed' });
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
## Best Practices
|
|
328
|
+
|
|
329
|
+
1. **Implement proper access control** - Check authorization
|
|
330
|
+
2. **Use strong encryption** - Protect sensitive data
|
|
331
|
+
3. **Prevent injection** - Use parameterized queries
|
|
332
|
+
4. **Design securely** - Security by design
|
|
333
|
+
5. **Configure securely** - No default credentials
|
|
334
|
+
6. **Update dependencies** - Patch vulnerabilities
|
|
335
|
+
7. **Strong authentication** - MFA, strong passwords
|
|
336
|
+
8. **Verify integrity** - Check package integrity
|
|
337
|
+
9. **Log security events** - Monitor for attacks
|
|
338
|
+
10. **Prevent SSRF** - Validate URLs and IPs
|
|
339
|
+
|