Next.js Auth Matcher'ımı Üç Kez Batırdım

Next.js 16'da proxy.ts'in nasıl çalıştığını anlamadan önce üç projeyi bozdum.

Hata sessizdi. Log yok. Uyarı yok. Hata yok. Sadece bozuk yönlendirmeler ve güvenlik açıkları.

Eğer Next.js 16'ya yükseltme yapıyorsanız, sadece bir codemod çalıştırıp kenara çekilmeyin. Şu üç şeyi kontrol etmeniz gerekiyor.

Geçiş Tuzağı

Next.js, middleware.ts dosyasının adını proxy.ts olarak değiştirdi. Bu sadece bir isim değişikliği değil.

Eğer paketinizi bir codemod kullanmadan manuel olarak güncellerseniz, eski middleware.ts dosyanız hala mevcut olabilir. Sorunsuz bir şekilde derlenecektir. TypeScript kontrollerinden geçecektir. Ancak hiçbir şey yapmayacaktır. Rotalarınız yakalanmayacak (intercept edilmeyecek). Yönlendirmeleriniz çalışmayacaktır.

Şu üç şeyi manuel olarak kontrol edin:

Matcher Boşluğu

Auth kurulumlarının en sık hata verdiği yer matcher kısmıdır.

Eğer matcher'ınız çok geniş kapsamlıysa, proxy her CSS ve görsel dosyası için çalışır. Bu da sonsuz yönlendirme döngülerine (infinite redirect loops) neden olur.

Eğer matcher'ınız çok dar kapsamlıysa, bir güvenlik açığı oluşturursunuz.

Eğer bir rota matcher'ınızda yer almıyorsa, proxy asla çalışmaz. Bir kullanıcı o rotaya kendi header'larını gönderebilir. Eğer Server Component'iniz bu header'lara güveniyorsa, bir saldırgan herkesin kimliğine bürünebilir.

Çözüm: Header'lara Güvenmeyin

Bunu acı bir tecrübeyle öğrendim: Sadece proxy tarafından iletilen header'lara güvenmeyin.

İki katmanlı bir yaklaşım kullanın:

Bu ikinci kontrol boşluğu kapatır. Matcher bir rotayı kaçırsa bile, Server Component geçersiz kullanıcıyı yakalayacaktır. Birkaç milisaniyelik gecikme ekler ancak büyük bir güvenlik hatasını önler.

Özet Check-list:

Kaynak: https://dev.to/shubhradev/i-got-the-proxyts-matcher-wrong-for-three-projects-before-i-understood-why-4e5c