claude-mpm 4.15.6__py3-none-any.whl → 4.21.0__py3-none-any.whl

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.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

Files changed (194) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_ENGINEER.md +286 -0
  3. claude_mpm/agents/BASE_PM.md +272 -23
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +49 -0
  5. claude_mpm/agents/agent_loader.py +4 -4
  6. claude_mpm/agents/templates/engineer.json +5 -1
  7. claude_mpm/agents/templates/php-engineer.json +10 -4
  8. claude_mpm/agents/templates/python_engineer.json +8 -3
  9. claude_mpm/agents/templates/rust_engineer.json +12 -7
  10. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  11. claude_mpm/cli/commands/__init__.py +2 -0
  12. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  13. claude_mpm/cli/commands/mpm_init/core.py +525 -0
  14. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  15. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  16. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  17. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  18. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  19. claude_mpm/cli/commands/mpm_init_handler.py +67 -1
  20. claude_mpm/cli/commands/skills.py +488 -0
  21. claude_mpm/cli/executor.py +2 -0
  22. claude_mpm/cli/parsers/base_parser.py +7 -0
  23. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  24. claude_mpm/cli/parsers/skills_parser.py +137 -0
  25. claude_mpm/cli/startup.py +57 -0
  26. claude_mpm/commands/mpm-auto-configure.md +52 -0
  27. claude_mpm/commands/mpm-help.md +3 -0
  28. claude_mpm/commands/mpm-init.md +112 -6
  29. claude_mpm/commands/mpm-version.md +113 -0
  30. claude_mpm/commands/mpm.md +1 -0
  31. claude_mpm/config/agent_config.py +2 -2
  32. claude_mpm/constants.py +12 -0
  33. claude_mpm/core/config.py +42 -0
  34. claude_mpm/core/factories.py +1 -1
  35. claude_mpm/core/interfaces.py +56 -1
  36. claude_mpm/core/optimized_agent_loader.py +3 -3
  37. claude_mpm/hooks/__init__.py +8 -0
  38. claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
  39. claude_mpm/hooks/session_resume_hook.py +121 -0
  40. claude_mpm/models/resume_log.py +340 -0
  41. claude_mpm/services/agents/auto_config_manager.py +1 -1
  42. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  43. claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
  44. claude_mpm/services/agents/deployment/agent_validator.py +17 -1
  45. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  46. claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
  47. claude_mpm/services/agents/local_template_manager.py +1 -1
  48. claude_mpm/services/agents/recommender.py +47 -0
  49. claude_mpm/services/cli/resume_service.py +617 -0
  50. claude_mpm/services/cli/session_manager.py +87 -0
  51. claude_mpm/services/cli/session_pause_manager.py +504 -0
  52. claude_mpm/services/cli/session_resume_helper.py +372 -0
  53. claude_mpm/services/core/interfaces.py +56 -1
  54. claude_mpm/services/core/models/agent_config.py +3 -0
  55. claude_mpm/services/core/models/process.py +4 -0
  56. claude_mpm/services/core/path_resolver.py +1 -1
  57. claude_mpm/services/diagnostics/models.py +21 -0
  58. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  59. claude_mpm/services/local_ops/__init__.py +2 -0
  60. claude_mpm/services/mcp_config_manager.py +7 -131
  61. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  62. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  63. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
  64. claude_mpm/services/session_manager.py +205 -1
  65. claude_mpm/services/unified/deployment_strategies/local.py +1 -1
  66. claude_mpm/services/version_service.py +104 -1
  67. claude_mpm/skills/__init__.py +21 -0
  68. claude_mpm/skills/agent_skills_injector.py +324 -0
  69. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  70. claude_mpm/skills/bundled/api-documentation.md +393 -0
  71. claude_mpm/skills/bundled/async-testing.md +571 -0
  72. claude_mpm/skills/bundled/code-review.md +143 -0
  73. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  74. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  75. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  76. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  77. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  78. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  79. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  80. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  81. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  82. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  83. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  84. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  85. claude_mpm/skills/bundled/database-migration.md +199 -0
  86. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  87. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  88. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  89. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  90. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  91. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  92. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  93. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  94. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  95. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  96. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  97. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  98. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  99. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  100. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  101. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  102. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  103. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  104. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  105. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  106. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  107. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  108. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  109. claude_mpm/skills/bundled/git-workflow.md +414 -0
  110. claude_mpm/skills/bundled/imagemagick.md +204 -0
  111. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  112. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  113. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  114. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  115. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  116. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  117. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  118. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  119. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  120. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  121. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  122. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  123. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  124. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  125. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  126. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  127. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  128. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  129. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  130. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  131. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  132. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  133. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  134. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  135. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  136. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  137. claude_mpm/skills/bundled/pdf.md +141 -0
  138. claude_mpm/skills/bundled/performance-profiling.md +567 -0
  139. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  140. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  141. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  142. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  143. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  144. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  145. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  146. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  147. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  148. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  149. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  150. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  151. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  152. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  153. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  154. claude_mpm/skills/bundled/security-scanning.md +327 -0
  155. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  156. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  157. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  158. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  159. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  160. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  161. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  162. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  163. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  164. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  165. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  166. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  167. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  168. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  169. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  170. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  171. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  172. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  173. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  174. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  175. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  176. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  177. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  178. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  179. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  180. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  181. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  182. claude_mpm/skills/bundled/xlsx.md +157 -0
  183. claude_mpm/skills/registry.py +97 -9
  184. claude_mpm/skills/skills_registry.py +348 -0
  185. claude_mpm/skills/skills_service.py +739 -0
  186. claude_mpm/utils/agent_dependency_loader.py +2 -2
  187. {claude_mpm-4.15.6.dist-info → claude_mpm-4.21.0.dist-info}/METADATA +211 -33
  188. {claude_mpm-4.15.6.dist-info → claude_mpm-4.21.0.dist-info}/RECORD +192 -60
  189. claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md +0 -602
  190. claude_mpm/cli/commands/mpm_init.py +0 -2008
  191. {claude_mpm-4.15.6.dist-info → claude_mpm-4.21.0.dist-info}/WHEEL +0 -0
  192. {claude_mpm-4.15.6.dist-info → claude_mpm-4.21.0.dist-info}/entry_points.txt +0 -0
  193. {claude_mpm-4.15.6.dist-info → claude_mpm-4.21.0.dist-info}/licenses/LICENSE +0 -0
  194. {claude_mpm-4.15.6.dist-info → claude_mpm-4.21.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,327 @@
1
+ ---
2
+ skill_id: security-scanning
3
+ skill_version: 0.1.0
4
+ description: Identify and fix common security vulnerabilities in code, eliminating redundant security guidance per agent.
5
+ updated_at: 2025-10-30T17:00:00Z
6
+ tags: [security, vulnerability, scanning, code-analysis]
7
+ ---
8
+
9
+ # Security Scanning
10
+
11
+ Identify and fix common security vulnerabilities in code. Eliminates ~150-200 lines of redundant security guidance per agent.
12
+
13
+ ## Core Security Principles
14
+
15
+ 1. **Never trust user input** - Validate and sanitize everything
16
+ 2. **Least privilege** - Grant minimum necessary permissions
17
+ 3. **Defense in depth** - Multiple layers of security
18
+ 4. **Fail securely** - Errors shouldn't expose sensitive data
19
+ 5. **Keep secrets secret** - Never commit credentials
20
+
21
+ ## Common Vulnerabilities (OWASP Top 10)
22
+
23
+ ### 1. Injection Attacks
24
+
25
+ **SQL Injection:**
26
+ ```python
27
+ # ❌ Vulnerable
28
+ query = f"SELECT * FROM users WHERE email = '{user_email}'"
29
+ # Attacker input: ' OR '1'='1
30
+
31
+ # ✅ Safe: Use parameterized queries
32
+ query = "SELECT * FROM users WHERE email = %s"
33
+ cursor.execute(query, (user_email,))
34
+ ```
35
+
36
+ **Command Injection:**
37
+ ```python
38
+ # ❌ Vulnerable
39
+ os.system(f"ping {user_input}")
40
+
41
+ # ✅ Safe: Use subprocess with list
42
+ subprocess.run(["ping", "-c", "1", user_input])
43
+ ```
44
+
45
+ ### 2. Authentication/Authorization
46
+
47
+ **Weak Password Storage:**
48
+ ```python
49
+ # ❌ Vulnerable
50
+ password = user_input # Plain text!
51
+
52
+ # ✅ Safe: Use strong hashing
53
+ from werkzeug.security import generate_password_hash
54
+ password_hash = generate_password_hash(user_input)
55
+ ```
56
+
57
+ **Missing Authorization Checks:**
58
+ ```python
59
+ # ❌ Vulnerable
60
+ def delete_user(user_id):
61
+ User.delete(user_id) # Anyone can delete!
62
+
63
+ # ✅ Safe: Check permissions
64
+ def delete_user(user_id, current_user):
65
+ if not current_user.is_admin:
66
+ raise PermissionError()
67
+ User.delete(user_id)
68
+ ```
69
+
70
+ ### 3. Sensitive Data Exposure
71
+
72
+ ```python
73
+ # ❌ Vulnerable: Logging sensitive data
74
+ logger.info(f"User logged in: {email}, password: {password}")
75
+
76
+ # ✅ Safe: Never log secrets
77
+ logger.info(f"User logged in: {email}")
78
+
79
+ # ❌ Vulnerable: Committing secrets
80
+ API_KEY = "sk-1234567890abcdef" # In code! # pragma: allowlist secret
81
+
82
+ # ✅ Safe: Use environment variables
83
+ API_KEY = os.getenv("API_KEY")
84
+ ```
85
+
86
+ ### 4. XML External Entities (XXE)
87
+
88
+ ```python
89
+ # ❌ Vulnerable
90
+ import xml.etree.ElementTree as ET
91
+ tree = ET.parse(user_supplied_xml) # Can read local files!
92
+
93
+ # ✅ Safe: Disable external entities
94
+ import defusedxml.ElementTree as ET
95
+ tree = ET.parse(user_supplied_xml)
96
+ ```
97
+
98
+ ### 5. Broken Access Control
99
+
100
+ ```javascript
101
+ // ❌ Vulnerable: Client-side only check
102
+ if (user.isAdmin) {
103
+ showAdminPanel();
104
+ }
105
+
106
+ // ✅ Safe: Server-side verification
107
+ fetch('/admin/data', {
108
+ headers: { 'Authorization': `Bearer ${token}` }
109
+ }).then(response => {
110
+ // Server validates token and permissions
111
+ });
112
+ ```
113
+
114
+ ### 6. Security Misconfiguration
115
+
116
+ ```python
117
+ # ❌ Vulnerable: Debug mode in production
118
+ DEBUG = True # Exposes stack traces!
119
+
120
+ # ✅ Safe: Disable debug in production
121
+ DEBUG = os.getenv("ENV") != "production"
122
+
123
+ # ❌ Vulnerable: Default credentials
124
+ DB_PASSWORD = "admin123" # pragma: allowlist secret
125
+
126
+ # ✅ Safe: Strong, unique credentials
127
+ DB_PASSWORD = os.getenv("DB_PASSWORD")
128
+ ```
129
+
130
+ ### 7. Cross-Site Scripting (XSS)
131
+
132
+ ```javascript
133
+ // ❌ Vulnerable: Unescaped user content
134
+ element.innerHTML = userInput; // XSS attack!
135
+
136
+ // ✅ Safe: Escape or use textContent
137
+ element.textContent = userInput;
138
+
139
+ // Or use framework's safe rendering
140
+ <div>{{ userInput }}</div> {/* React/Vue auto-escape */}
141
+ ```
142
+
143
+ ### 8. Insecure Deserialization
144
+
145
+ ```python
146
+ # ❌ Vulnerable: Deserializing untrusted data
147
+ import pickle
148
+ data = pickle.loads(user_data) # Can execute arbitrary code!
149
+
150
+ # ✅ Safe: Use JSON or validated formats
151
+ import json
152
+ data = json.loads(user_data)
153
+ validate_schema(data)
154
+ ```
155
+
156
+ ### 9. Using Components with Known Vulnerabilities
157
+
158
+ ```bash
159
+ # Check for vulnerable dependencies
160
+ npm audit
161
+ pip check
162
+ cargo audit
163
+
164
+ # Update regularly
165
+ npm update
166
+ pip install --upgrade
167
+ ```
168
+
169
+ ### 10. Insufficient Logging & Monitoring
170
+
171
+ ```python
172
+ # ✅ Log security events
173
+ logger.warning(f"Failed login attempt for user: {email} from IP: {ip}")
174
+ logger.error(f"Unauthorized access attempt to {resource} by {user}")
175
+
176
+ # Monitor for patterns
177
+ if failed_login_count > 5:
178
+ alert_security_team()
179
+ ```
180
+
181
+ ## Security Scanning Tools
182
+
183
+ ### Python
184
+ ```bash
185
+ # Bandit: Find common security issues
186
+ bandit -r src/
187
+
188
+ # Safety: Check for vulnerable dependencies
189
+ safety check
190
+
191
+ # Semgrep: Pattern-based scanning
192
+ semgrep --config=auto .
193
+ ```
194
+
195
+ ### JavaScript
196
+ ```bash
197
+ # npm audit: Check dependencies
198
+ npm audit
199
+ npm audit fix
200
+
201
+ # ESLint security plugin
202
+ npm install --save-dev eslint-plugin-security
203
+ ```
204
+
205
+ ### Go
206
+ ```bash
207
+ # gosec: Security scanner
208
+ gosec ./...
209
+
210
+ # govulncheck: Known vulnerabilities
211
+ govulncheck ./...
212
+ ```
213
+
214
+ ### Rust
215
+ ```bash
216
+ # cargo-audit: Check dependencies
217
+ cargo audit
218
+
219
+ # cargo-deny: Policy enforcement
220
+ cargo deny check
221
+ ```
222
+
223
+ ## Input Validation
224
+
225
+ ```python
226
+ # Always validate user input
227
+ from pydantic import BaseModel, EmailStr, conint
228
+
229
+ class UserInput(BaseModel):
230
+ email: EmailStr # Validates email format
231
+ age: conint(ge=0, le=150) # Constrained integer
232
+ username: str = Field(regex=r'^[a-zA-Z0-9_]+$') # Alphanumeric only
233
+
234
+ # Use the validator
235
+ try:
236
+ validated = UserInput(**user_data)
237
+ except ValidationError as e:
238
+ return {"error": "Invalid input"}
239
+ ```
240
+
241
+ ## Secure API Design
242
+
243
+ ```python
244
+ # Rate limiting
245
+ from flask_limiter import Limiter
246
+
247
+ limiter = Limiter(app, key_func=get_remote_address)
248
+
249
+ @app.route("/api/login")
250
+ @limiter.limit("5 per minute") # Prevent brute force
251
+ def login():
252
+ pass
253
+
254
+ # CORS configuration
255
+ from flask_cors import CORS
256
+
257
+ CORS(app, origins=["https://trusted-domain.com"]) # Don't use *
258
+
259
+ # HTTPS only
260
+ if not request.is_secure and app.env == "production":
261
+ return redirect(request.url.replace("http://", "https://"))
262
+ ```
263
+
264
+ ## Cryptography Best Practices
265
+
266
+ ```python
267
+ # ❌ Don't roll your own crypto
268
+ def my_encryption(data, key):
269
+ return xor(data, key) # Insecure!
270
+
271
+ # ✅ Use established libraries
272
+ from cryptography.fernet import Fernet
273
+
274
+ key = Fernet.generate_key()
275
+ cipher = Fernet(key)
276
+ encrypted = cipher.encrypt(data.encode())
277
+ decrypted = cipher.decrypt(encrypted).decode()
278
+
279
+ # ✅ Use strong random numbers
280
+ import secrets
281
+ token = secrets.token_urlsafe(32) # Not random.randint()!
282
+ ```
283
+
284
+ ## Security Checklist
285
+
286
+ ```
287
+ Authentication & Authorization:
288
+ □ Passwords are hashed (bcrypt, argon2)
289
+ □ MFA is supported
290
+ □ Session tokens are secure and expire
291
+ □ Authorization checks on all sensitive operations
292
+ □ Role-based access control implemented
293
+
294
+ Input Validation:
295
+ □ All user input is validated
296
+ □ SQL uses parameterized queries
297
+ □ XSS protection (output escaping)
298
+ □ CSRF tokens on state-changing operations
299
+ □ File uploads are validated and isolated
300
+
301
+ Data Protection:
302
+ □ Sensitive data is encrypted at rest
303
+ □ TLS/HTTPS for data in transit
304
+ □ Secrets are in environment variables
305
+ □ No secrets in version control
306
+ □ PII handling complies with regulations
307
+
308
+ Dependencies:
309
+ □ All dependencies are up to date
310
+ □ Security scanning in CI/CD
311
+ □ No known vulnerabilities
312
+ □ Minimal dependency footprint
313
+
314
+ Logging & Monitoring:
315
+ □ Security events are logged
316
+ □ Sensitive data not in logs
317
+ □ Anomaly detection in place
318
+ □ Incident response plan exists
319
+ ```
320
+
321
+ ## Remember
322
+
323
+ - **Security is ongoing** - Not a one-time fix
324
+ - **Assume breach** - Plan for when (not if) attacks happen
325
+ - **Update regularly** - Vulnerabilities are discovered constantly
326
+ - **Scan automatically** - Integrate security checks in CI/CD
327
+ - **Least surprise** - Secure defaults, explicit insecure options