Skip to content

Commit df22c4f

Browse files
committed
Rate limit couponCode updates
1 parent a33ce15 commit df22c4f

2 files changed

Lines changed: 12 additions & 4 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Unreleased
44

55
- Fixed a bug where GraphQL queries using `relatedTo*` arguments within `hasProduct` or `hasVariant` inputs caused a server error. ([#4297](https://github.com/craftcms/commerce/issues/4297))
6+
- Cart requests that include a`couponCode` param are now rate-limited. (GHSA-h5gm-x9wr-vhcm)
67

78
## 5.6.4 - 2026-05-06
89

src/controllers/CartController.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@
4141
*/
4242
class CartController extends BaseFrontEndController
4343
{
44+
/**
45+
* Params that trigger IP-based rate limiting on cart actions.
46+
*/
47+
const RATE_LIMITED_PARAMS = ['number', 'couponCode'];
48+
4449
/**
4550
* @var Order The cart element
4651
*/
@@ -88,14 +93,16 @@ public function behaviors(): array
8893
'only' => ['get-cart', 'update-cart', 'load-cart', 'complete'],
8994
'enableRateLimitHeaders' => false,
9095
'user' => function() {
91-
// Only apply rate limiting when a cart number is explicitly passed
92-
$isActive = Craft::$app->getRequest()->getBodyParam('number') || Craft::$app->getRequest()->getQueryParam('number');
96+
// Only apply rate limiting when a cart number or coupon code is explicitly passed
97+
$request = Craft::$app->getRequest();
98+
$isActive = collect(self::RATE_LIMITED_PARAMS)
99+
->contains(fn($param) => $request->getBodyParam($param) || $request->getQueryParam($param));
93100

94101
return $isActive ? new IpRateLimitIdentity([
95102
'limit' => 1,
96103
'window' => 1,
97-
'keyPrefix' => 'cart-number-rate-limit',
98-
'ip' => Craft::$app->getRequest()->getUserIP() ?? 'unknown',
104+
'keyPrefix' => 'cart-rate-limit',
105+
'ip' => $request->getUserIP() ?? 'unknown',
99106
]) : null;
100107
},
101108

0 commit comments

Comments
 (0)