dsentker/url-signature
Laravel/PHP package to create and verify signed URLs. Add a signature to query strings to protect routes and parameters from tampering, with simple helpers for generating signatures and validating incoming requests, including optional expiry support.
?amount=100&sig=X vs ?sig=X&amount=100), addressing a critical vulnerability in stateless URL signing.?user_id=123&amount=100&sig=...).state or redirect_uri parameters from manipulation in callback URLs.?action=delete&id=456&sig=...) where parameter order may vary across clients.Adopt if:
Look elsewhere if:
firebase/php-jwt or league/oauth2-server).itsdangerous or Node’s jsonwebtoken may fit better.?sort=asc&page=1 vs ?page=1&sort=asc must behave differently).For Executives:
"This update fixes a critical security vulnerability in our URL signing system. Previously, attackers could exploit parameter reordering to bypass signatures—for example, swapping ?amount=100&sig=X to ?sig=X&amount=100 to invalidate our fraud checks. The new version automatically normalizes parameter order, ensuring signatures remain tamper-proof regardless of how the URL is constructed. This is a direct mitigation for payment fraud, affiliate abuse, and OAuth security risks. The trade-off? A one-time effort to re-sign existing URLs (e.g., affiliate links), but the upside is closed compliance gaps and zero false positives in security validation. Implementation is straightforward: a Composer update and a migration script. Risk? Minimal—this is a bug fix, not a feature change."
For Engineering: *"We’re updating to v1.1.0 of the URL signature package to fix a query string ordering vulnerability. Here’s the impact:
QueryString helper now canonicalizes parameter order (e.g., ?a=1&b=2 → always sorted alphabetically) before signing/verifying. This prevents attackers from bypassing signatures by reordering parameters.sign() method (which normalizes order).// Old (vulnerable):
$url = UrlSignature::sign('https://example.com/pay', ['amount' => 100]);
// New (secure):
$url = UrlSignature::sign('https://example.com/pay', ['amount' => 100]); // Internally sorts params
For Security Teams: *"This update resolves a query string ordering vulnerability in URL signatures. Key changes:
?a=1&b=2 → always ?a=1&b=2) before HMAC generation/validation.?sig=X&amount=1 vs ?amount=1&sig=X).How can I help you explore Laravel packages today?