@sylix/coworker 2.0.11 → 2.0.14

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.
Files changed (169) hide show
  1. package/dist/commands/slash/config.d.ts.map +1 -1
  2. package/dist/commands/slash/config.js +22 -4
  3. package/dist/commands/slash/config.js.map +1 -1
  4. package/dist/core/CoWorkerAgent.d.ts.map +1 -1
  5. package/dist/core/CoWorkerAgent.js +6 -3
  6. package/dist/core/CoWorkerAgent.js.map +1 -1
  7. package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
  8. package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
  9. package/dist/skills/defaults/ai-ml/rag.md +276 -0
  10. package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
  11. package/dist/skills/defaults/backend-development/api-design.md +285 -0
  12. package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
  13. package/dist/skills/defaults/backend-development/async-python.md +237 -0
  14. package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
  15. package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
  16. package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
  17. package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
  18. package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
  19. package/dist/skills/defaults/backend-development/database-design.md +305 -0
  20. package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
  21. package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
  22. package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
  23. package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
  24. package/dist/skills/defaults/backend-development/fastapi.md +309 -0
  25. package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
  26. package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
  27. package/dist/skills/defaults/backend-development/microservices.md +284 -0
  28. package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
  29. package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
  30. package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
  31. package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
  32. package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
  33. package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
  34. package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
  35. package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
  36. package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
  37. package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
  38. package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
  39. package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
  40. package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
  41. package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
  42. package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
  43. package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
  44. package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
  45. package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
  46. package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
  47. package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
  48. package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
  49. package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
  50. package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
  51. package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
  52. package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
  53. package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
  54. package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
  55. package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
  56. package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
  57. package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
  58. package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
  59. package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
  60. package/dist/skills/defaults/data-engineering/airflow.md +519 -0
  61. package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
  62. package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
  63. package/dist/skills/defaults/data-engineering/dbt.md +556 -0
  64. package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
  65. package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
  66. package/dist/skills/defaults/data-engineering/spark.md +411 -0
  67. package/dist/skills/defaults/database/postgresql.md +202 -0
  68. package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
  69. package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
  70. package/dist/skills/defaults/devops/changelog-automation.md +580 -0
  71. package/dist/skills/defaults/devops/cicd.md +314 -0
  72. package/dist/skills/defaults/devops/cloud.md +263 -0
  73. package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
  74. package/dist/skills/defaults/devops/cost-optimization.md +295 -0
  75. package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
  76. package/dist/skills/defaults/devops/docker.md +281 -0
  77. package/dist/skills/defaults/devops/git-workflows.md +205 -0
  78. package/dist/skills/defaults/devops/github-actions.md +311 -0
  79. package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
  80. package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
  81. package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
  82. package/dist/skills/defaults/devops/kubernetes.md +339 -0
  83. package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
  84. package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
  85. package/dist/skills/defaults/devops/observability.md +243 -0
  86. package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
  87. package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
  88. package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
  89. package/dist/skills/defaults/devops/secrets-management.md +341 -0
  90. package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
  91. package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
  92. package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
  93. package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
  94. package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
  95. package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
  96. package/dist/skills/defaults/frontend/interaction-design.md +327 -0
  97. package/dist/skills/defaults/frontend/javascript.md +311 -0
  98. package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
  99. package/dist/skills/defaults/frontend/react-native-design.md +440 -0
  100. package/dist/skills/defaults/frontend/react.md +345 -0
  101. package/dist/skills/defaults/frontend/responsive-design.md +472 -0
  102. package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
  103. package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
  104. package/dist/skills/defaults/frontend/typescript.md +334 -0
  105. package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
  106. package/dist/skills/defaults/frontend/web-component-design.md +279 -0
  107. package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
  108. package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
  109. package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
  110. package/dist/skills/defaults/kubernetes/gitops.md +280 -0
  111. package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
  112. package/dist/skills/defaults/kubernetes/helm.md +343 -0
  113. package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
  114. package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
  115. package/dist/skills/defaults/kubernetes/manifests.md +330 -0
  116. package/dist/skills/defaults/kubernetes/security.md +337 -0
  117. package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
  118. package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
  119. package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
  120. package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
  121. package/dist/skills/defaults/llm-application/langchain.md +259 -0
  122. package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
  123. package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
  124. package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
  125. package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
  126. package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
  127. package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
  128. package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
  129. package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
  130. package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
  131. package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
  132. package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
  133. package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
  134. package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
  135. package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
  136. package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
  137. package/dist/skills/defaults/security/auditor.md +168 -0
  138. package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
  139. package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
  140. package/dist/skills/defaults/security/mtls-configuration.md +349 -0
  141. package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
  142. package/dist/skills/defaults/security/sast-configuration.md +182 -0
  143. package/dist/skills/defaults/security/security.md +313 -0
  144. package/dist/skills/defaults/security/stride-analysis.md +273 -0
  145. package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
  146. package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
  147. package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
  148. package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
  149. package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
  150. package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
  151. package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
  152. package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
  153. package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
  154. package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
  155. package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
  156. package/dist/skills/defaults/testing/testing.md +332 -0
  157. package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
  158. package/dist/skills/defaults/workflows/track-management.md +592 -0
  159. package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
  160. package/dist/skills/index.d.ts +11 -0
  161. package/dist/skills/index.d.ts.map +1 -0
  162. package/dist/skills/index.js +129 -0
  163. package/dist/skills/index.js.map +1 -0
  164. package/dist/utils/character.js +4 -4
  165. package/dist/utils/character.js.map +1 -1
  166. package/dist/utils/inputbar.d.ts.map +1 -1
  167. package/dist/utils/inputbar.js +7 -0
  168. package/dist/utils/inputbar.js.map +1 -1
  169. package/package.json +1 -1
@@ -0,0 +1,480 @@
1
+ ---
2
+ name: pci-compliance
3
+ description: Implement PCI DSS compliance requirements for secure handling of payment card data and payment systems. Use when securing payment processing, achieving PCI compliance, or implementing payment card security measures.
4
+ ---
5
+
6
+ # PCI Compliance
7
+
8
+ Master PCI DSS (Payment Card Industry Data Security Standard) compliance for secure payment processing and handling of cardholder data.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - Building payment processing systems
13
+ - Handling credit card information
14
+ - Implementing secure payment flows
15
+ - Conducting PCI compliance audits
16
+ - Reducing PCI compliance scope
17
+ - Implementing tokenization and encryption
18
+ - Preparing for PCI DSS assessments
19
+
20
+ ## PCI DSS Requirements (12 Core Requirements)
21
+
22
+ ### Build and Maintain Secure Network
23
+
24
+ 1. Install and maintain firewall configuration
25
+ 2. Don't use vendor-supplied defaults for passwords
26
+
27
+ ### Protect Cardholder Data
28
+
29
+ 3. Protect stored cardholder data
30
+ 4. Encrypt transmission of cardholder data across public networks
31
+
32
+ ### Maintain Vulnerability Management
33
+
34
+ 5. Protect systems against malware
35
+ 6. Develop and maintain secure systems and applications
36
+
37
+ ### Implement Strong Access Control
38
+
39
+ 7. Restrict access to cardholder data by business need-to-know
40
+ 8. Identify and authenticate access to system components
41
+ 9. Restrict physical access to cardholder data
42
+
43
+ ### Monitor and Test Networks
44
+
45
+ 10. Track and monitor all access to network resources and cardholder data
46
+ 11. Regularly test security systems and processes
47
+
48
+ ### Maintain Information Security Policy
49
+
50
+ 12. Maintain a policy that addresses information security
51
+
52
+ ## Compliance Levels
53
+
54
+ **Level 1**: > 6 million transactions/year (annual ROC required)
55
+ **Level 2**: 1-6 million transactions/year (annual SAQ)
56
+ **Level 3**: 20,000-1 million e-commerce transactions/year
57
+ **Level 4**: < 20,000 e-commerce or < 1 million total transactions
58
+
59
+ ## Data Minimization (Never Store)
60
+
61
+ ```python
62
+ # NEVER STORE THESE
63
+ PROHIBITED_DATA = {
64
+ 'full_track_data': 'Magnetic stripe data',
65
+ 'cvv': 'Card verification code/value',
66
+ 'pin': 'PIN or PIN block'
67
+ }
68
+
69
+ # CAN STORE (if encrypted)
70
+ ALLOWED_DATA = {
71
+ 'pan': 'Primary Account Number (card number)',
72
+ 'cardholder_name': 'Name on card',
73
+ 'expiration_date': 'Card expiration',
74
+ 'service_code': 'Service code'
75
+ }
76
+
77
+ class PaymentData:
78
+ """Safe payment data handling."""
79
+
80
+ def __init__(self):
81
+ self.prohibited_fields = ['cvv', 'cvv2', 'cvc', 'pin']
82
+
83
+ def sanitize_log(self, data):
84
+ """Remove sensitive data from logs."""
85
+ sanitized = data.copy()
86
+
87
+ # Mask PAN
88
+ if 'card_number' in sanitized:
89
+ card = sanitized['card_number']
90
+ sanitized['card_number'] = f"{card[:6]}{'*' * (len(card) - 10)}{card[-4:]}"
91
+
92
+ # Remove prohibited data
93
+ for field in self.prohibited_fields:
94
+ sanitized.pop(field, None)
95
+
96
+ return sanitized
97
+
98
+ def validate_no_prohibited_storage(self, data):
99
+ """Ensure no prohibited data is being stored."""
100
+ for field in self.prohibited_fields:
101
+ if field in data:
102
+ raise SecurityError(f"Attempting to store prohibited field: {field}")
103
+ ```
104
+
105
+ ## Tokenization
106
+
107
+ ### Using Payment Processor Tokens
108
+
109
+ ```python
110
+ import stripe
111
+
112
+ class TokenizedPayment:
113
+ """Handle payments using tokens (no card data on server)."""
114
+
115
+ @staticmethod
116
+ def create_payment_method_token(card_details):
117
+ """Create token from card details (client-side only)."""
118
+ # THIS SHOULD ONLY BE DONE CLIENT-SIDE WITH STRIPE.JS
119
+ # NEVER send card details to your server
120
+
121
+ """
122
+ // Frontend JavaScript
123
+ const stripe = Stripe('pk_...');
124
+
125
+ const {token, error} = await stripe.createToken({
126
+ card: {
127
+ number: '4242424242424242',
128
+ exp_month: 12,
129
+ exp_year: 2024,
130
+ cvc: '123'
131
+ }
132
+ });
133
+
134
+ // Send token.id to server (NOT card details)
135
+ """
136
+ pass
137
+
138
+ @staticmethod
139
+ def charge_with_token(token_id, amount):
140
+ """Charge using token (server-side)."""
141
+ # Your server only sees the token, never the card number
142
+ stripe.api_key = "sk_..."
143
+
144
+ charge = stripe.Charge.create(
145
+ amount=amount,
146
+ currency="usd",
147
+ source=token_id, # Token instead of card details
148
+ description="Payment"
149
+ )
150
+
151
+ return charge
152
+
153
+ @staticmethod
154
+ def store_payment_method(customer_id, payment_method_token):
155
+ """Store payment method as token for future use."""
156
+ stripe.Customer.modify(
157
+ customer_id,
158
+ source=payment_method_token
159
+ )
160
+
161
+ # Store only customer_id and payment_method_id in your database
162
+ # NEVER store actual card details
163
+ return {
164
+ 'customer_id': customer_id,
165
+ 'has_payment_method': True
166
+ # DO NOT store: card number, CVV, etc.
167
+ }
168
+ ```
169
+
170
+ ### Custom Tokenization (Advanced)
171
+
172
+ ```python
173
+ import secrets
174
+ from cryptography.fernet import Fernet
175
+
176
+ class TokenVault:
177
+ """Secure token vault for card data (if you must store it)."""
178
+
179
+ def __init__(self, encryption_key):
180
+ self.cipher = Fernet(encryption_key)
181
+ self.vault = {} # In production: use encrypted database
182
+
183
+ def tokenize(self, card_data):
184
+ """Convert card data to token."""
185
+ # Generate secure random token
186
+ token = secrets.token_urlsafe(32)
187
+
188
+ # Encrypt card data
189
+ encrypted = self.cipher.encrypt(json.dumps(card_data).encode())
190
+
191
+ # Store token -> encrypted data mapping
192
+ self.vault[token] = encrypted
193
+
194
+ return token
195
+
196
+ def detokenize(self, token):
197
+ """Retrieve card data from token."""
198
+ encrypted = self.vault.get(token)
199
+ if not encrypted:
200
+ raise ValueError("Token not found")
201
+
202
+ # Decrypt
203
+ decrypted = self.cipher.decrypt(encrypted)
204
+ return json.loads(decrypted.decode())
205
+
206
+ def delete_token(self, token):
207
+ """Remove token from vault."""
208
+ self.vault.pop(token, None)
209
+ ```
210
+
211
+ ## Encryption
212
+
213
+ ### Data at Rest
214
+
215
+ ```python
216
+ from cryptography.hazmat.primitives.ciphers.aead import AESGCM
217
+ import os
218
+
219
+ class EncryptedStorage:
220
+ """Encrypt data at rest using AES-256-GCM."""
221
+
222
+ def __init__(self, encryption_key):
223
+ """Initialize with 256-bit key."""
224
+ self.key = encryption_key # Must be 32 bytes
225
+
226
+ def encrypt(self, plaintext):
227
+ """Encrypt data."""
228
+ # Generate random nonce
229
+ nonce = os.urandom(12)
230
+
231
+ # Encrypt
232
+ aesgcm = AESGCM(self.key)
233
+ ciphertext = aesgcm.encrypt(nonce, plaintext.encode(), None)
234
+
235
+ # Return nonce + ciphertext
236
+ return nonce + ciphertext
237
+
238
+ def decrypt(self, encrypted_data):
239
+ """Decrypt data."""
240
+ # Extract nonce and ciphertext
241
+ nonce = encrypted_data[:12]
242
+ ciphertext = encrypted_data[12:]
243
+
244
+ # Decrypt
245
+ aesgcm = AESGCM(self.key)
246
+ plaintext = aesgcm.decrypt(nonce, ciphertext, None)
247
+
248
+ return plaintext.decode()
249
+
250
+ # Usage
251
+ storage = EncryptedStorage(os.urandom(32))
252
+ encrypted_pan = storage.encrypt("4242424242424242")
253
+ # Store encrypted_pan in database
254
+ ```
255
+
256
+ ### Data in Transit
257
+
258
+ ```python
259
+ # Always use TLS 1.2 or higher
260
+ # Flask/Django example
261
+ app.config['SESSION_COOKIE_SECURE'] = True # HTTPS only
262
+ app.config['SESSION_COOKIE_HTTPONLY'] = True
263
+ app.config['SESSION_COOKIE_SAMESITE'] = 'Strict'
264
+
265
+ # Enforce HTTPS
266
+ from flask_talisman import Talisman
267
+ Talisman(app, force_https=True)
268
+ ```
269
+
270
+ ## Access Control
271
+
272
+ ```python
273
+ from functools import wraps
274
+ from flask import session
275
+
276
+ def require_pci_access(f):
277
+ """Decorator to restrict access to cardholder data."""
278
+ @wraps(f)
279
+ def decorated_function(*args, **kwargs):
280
+ user = session.get('user')
281
+
282
+ # Check if user has PCI access role
283
+ if not user or 'pci_access' not in user.get('roles', []):
284
+ return {'error': 'Unauthorized access to cardholder data'}, 403
285
+
286
+ # Log access attempt
287
+ audit_log(
288
+ user=user['id'],
289
+ action='access_cardholder_data',
290
+ resource=f.__name__
291
+ )
292
+
293
+ return f(*args, **kwargs)
294
+
295
+ return decorated_function
296
+
297
+ @app.route('/api/payment-methods')
298
+ @require_pci_access
299
+ def get_payment_methods():
300
+ """Retrieve payment methods (restricted access)."""
301
+ # Only accessible to users with pci_access role
302
+ pass
303
+ ```
304
+
305
+ ## Audit Logging
306
+
307
+ ```python
308
+ import logging
309
+ from datetime import datetime
310
+
311
+ class PCIAuditLogger:
312
+ """PCI-compliant audit logging."""
313
+
314
+ def __init__(self):
315
+ self.logger = logging.getLogger('pci_audit')
316
+ # Configure to write to secure, append-only log
317
+
318
+ def log_access(self, user_id, resource, action, result):
319
+ """Log access to cardholder data."""
320
+ entry = {
321
+ 'timestamp': datetime.utcnow().isoformat(),
322
+ 'user_id': user_id,
323
+ 'resource': resource,
324
+ 'action': action,
325
+ 'result': result,
326
+ 'ip_address': request.remote_addr
327
+ }
328
+
329
+ self.logger.info(json.dumps(entry))
330
+
331
+ def log_authentication(self, user_id, success, method):
332
+ """Log authentication attempt."""
333
+ entry = {
334
+ 'timestamp': datetime.utcnow().isoformat(),
335
+ 'user_id': user_id,
336
+ 'event': 'authentication',
337
+ 'success': success,
338
+ 'method': method,
339
+ 'ip_address': request.remote_addr
340
+ }
341
+
342
+ self.logger.info(json.dumps(entry))
343
+
344
+ # Usage
345
+ audit = PCIAuditLogger()
346
+ audit.log_access(user_id=123, resource='payment_methods', action='read', result='success')
347
+ ```
348
+
349
+ ## Security Best Practices
350
+
351
+ ### Input Validation
352
+
353
+ ```python
354
+ import re
355
+
356
+ def validate_card_number(card_number):
357
+ """Validate card number format (Luhn algorithm)."""
358
+ # Remove spaces and dashes
359
+ card_number = re.sub(r'[\s-]', '', card_number)
360
+
361
+ # Check if all digits
362
+ if not card_number.isdigit():
363
+ return False
364
+
365
+ # Luhn algorithm
366
+ def luhn_checksum(card_num):
367
+ def digits_of(n):
368
+ return [int(d) for d in str(n)]
369
+
370
+ digits = digits_of(card_num)
371
+ odd_digits = digits[-1::-2]
372
+ even_digits = digits[-2::-2]
373
+ checksum = sum(odd_digits)
374
+ for d in even_digits:
375
+ checksum += sum(digits_of(d * 2))
376
+ return checksum % 10
377
+
378
+ return luhn_checksum(card_number) == 0
379
+
380
+ def sanitize_input(user_input):
381
+ """Sanitize user input to prevent injection."""
382
+ # Remove special characters
383
+ # Validate against expected format
384
+ # Escape for database queries
385
+ pass
386
+ ```
387
+
388
+ ## PCI DSS SAQ (Self-Assessment Questionnaire)
389
+
390
+ ### SAQ A (Least Requirements)
391
+
392
+ - E-commerce using hosted payment page
393
+ - No card data on your systems
394
+ - ~20 questions
395
+
396
+ ### SAQ A-EP
397
+
398
+ - E-commerce with embedded payment form
399
+ - Uses JavaScript to handle card data
400
+ - ~180 questions
401
+
402
+ ### SAQ D (Most Requirements)
403
+
404
+ - Store, process, or transmit card data
405
+ - Full PCI DSS requirements
406
+ - ~300 questions
407
+
408
+ ## Compliance Checklist
409
+
410
+ ```python
411
+ PCI_COMPLIANCE_CHECKLIST = {
412
+ 'network_security': [
413
+ 'Firewall configured and maintained',
414
+ 'No vendor default passwords',
415
+ 'Network segmentation implemented'
416
+ ],
417
+ 'data_protection': [
418
+ 'No storage of CVV, track data, or PIN',
419
+ 'PAN encrypted when stored',
420
+ 'PAN masked when displayed',
421
+ 'Encryption keys properly managed'
422
+ ],
423
+ 'vulnerability_management': [
424
+ 'Anti-virus installed and updated',
425
+ 'Secure development practices',
426
+ 'Regular security patches',
427
+ 'Vulnerability scanning performed'
428
+ ],
429
+ 'access_control': [
430
+ 'Access restricted by role',
431
+ 'Unique IDs for all users',
432
+ 'Multi-factor authentication',
433
+ 'Physical security measures'
434
+ ],
435
+ 'monitoring': [
436
+ 'Audit logs enabled',
437
+ 'Log review process',
438
+ 'File integrity monitoring',
439
+ 'Regular security testing'
440
+ ],
441
+ 'policy': [
442
+ 'Security policy documented',
443
+ 'Risk assessment performed',
444
+ 'Security awareness training',
445
+ 'Incident response plan'
446
+ ]
447
+ }
448
+ ```
449
+
450
+ ## Resources
451
+
452
+ - **references/data-minimization.md**: Never store prohibited data
453
+ - **references/tokenization.md**: Tokenization strategies
454
+ - **references/encryption.md**: Encryption requirements
455
+ - **references/access-control.md**: Role-based access
456
+ - **references/audit-logging.md**: Comprehensive logging
457
+ - **assets/pci-compliance-checklist.md**: Complete checklist
458
+ - **assets/encrypted-storage.py**: Encryption utilities
459
+ - **scripts/audit-payment-system.sh**: Compliance audit script
460
+
461
+ ## Common Violations
462
+
463
+ 1. **Storing CVV**: Never store card verification codes
464
+ 2. **Unencrypted PAN**: Card numbers must be encrypted at rest
465
+ 3. **Weak Encryption**: Use AES-256 or equivalent
466
+ 4. **No Access Controls**: Restrict who can access cardholder data
467
+ 5. **Missing Audit Logs**: Must log all access to payment data
468
+ 6. **Insecure Transmission**: Always use TLS 1.2+
469
+ 7. **Default Passwords**: Change all default credentials
470
+ 8. **No Security Testing**: Regular penetration testing required
471
+
472
+ ## Reducing PCI Scope
473
+
474
+ 1. **Use Hosted Payments**: Stripe Checkout, PayPal, etc.
475
+ 2. **Tokenization**: Replace card data with tokens
476
+ 3. **Network Segmentation**: Isolate cardholder data environment
477
+ 4. **Outsource**: Use PCI-compliant payment processors
478
+ 5. **No Storage**: Never store full card details
479
+
480
+ By minimizing systems that touch card data, you reduce compliance burden significantly.