دور زدن Allowlist CORS با یک زیردامنهی ساختگی
وقتی بررسی allowlist فقط شاملبودن رشتهی دامنه را چک میکند، نه تطابق دقیق آن.
اگر allowlist CORS با str_contains($origin, "trusted-app.test") بررسی شود، یک Origin مثل https://trusted-app.test.evil-attacker.test (که مهاجم مالک آن است) هم این بررسی سطحی را رد میکند، چون رشتهی مورد انتظار در آن وجود دارد.
چرا این باگ رایج است
بسیاری از تیمها برای «سهولت» allowlist را با یک contains یا regex بدون escape مینویسند، بهجای تطابق دقیق دامنه یا پسوند با نقطه.
راهحل
تطابق دقیق کل دامنه، یا در صورت نیاز به زیردامنه، بررسی پسوند دقیق با نقطه (.trusted-app.test) بهجای یک contains ساده.