You've already forked wc-licensed-product-client
Update session history with security layer learnings
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
23
CLAUDE.md
23
CLAUDE.md
@@ -129,3 +129,26 @@ When editing CLAUDE.md or other markdown files, follow these rules to avoid lint
|
|||||||
- `LicenseClient` designed for obfuscation: all sensitive logic contained in single class
|
- `LicenseClient` designed for obfuscation: all sensitive logic contained in single class
|
||||||
- Symfony HttpClient works well with PSR interfaces via `symfony/http-client-contracts`
|
- Symfony HttpClient works well with PSR interfaces via `symfony/http-client-contracts`
|
||||||
- Keep a Changelog format allows duplicate headings per version (MD024 warning can be ignored)
|
- Keep a Changelog format allows duplicate headings per version (MD024 warning can be ignored)
|
||||||
|
|
||||||
|
### 2026-01-22 - Version 0.0.2 (Security Layer)
|
||||||
|
|
||||||
|
**Completed:**
|
||||||
|
|
||||||
|
- Added PHPUnit ^11.0 test framework with 66 tests total
|
||||||
|
- Implemented `SecureLicenseClient` with response signature verification
|
||||||
|
- Created `ResponseSignature` class for HMAC-SHA256 signing/verification
|
||||||
|
- Created `StringEncoder` for XOR-based string obfuscation
|
||||||
|
- Created `IntegrityChecker` for source file hash verification
|
||||||
|
- Added `SignatureException` and `IntegrityException` for security errors
|
||||||
|
- Documented server-side implementation in `docs/server-implementation.md`
|
||||||
|
- Merged all changes to main branch
|
||||||
|
|
||||||
|
**Learnings:**
|
||||||
|
|
||||||
|
- Response signature verification (HMAC) is more secure than code obfuscation alone
|
||||||
|
- Per-license key derivation prevents cross-license signature reuse
|
||||||
|
- Timestamp validation (5-minute tolerance) prevents replay attacks
|
||||||
|
- Server must sign responses with matching algorithm for client verification
|
||||||
|
- IntegrityChecker normalizes line endings for cross-platform hash consistency
|
||||||
|
- StringEncoder uses XOR with expanded key for simple obfuscation (not encryption)
|
||||||
|
- PHPUnit 11 uses PHP 8 attributes (`#[Test]`, `#[CoversClass]`) instead of annotations
|
||||||
|
|||||||
Reference in New Issue
Block a user