Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

CORS hatalarını production'da loglamak ve izlemek için backend'de implemente ettiğim basit middleware

thedevx

Üye
Katılım
14 Mart 2026
Mesajlar
27
Merhaba arkadaşlar, bugün başımı çok ağrıtan bir sorundan ve onun nasıl üstesinden geldiğimden bahsedeceğim. Production ortamında, CORS (Cross-Origin Resource Sharing) hataları bazen o kadar sinsice ortaya çıkıyor ki, kullanıcılar "bu işlem gerçekleşmedi" diye şikayet ediyor ama siz loglarda hiçbir şey göremiyorsunuz. Frontend'de konsol hatası görülüyor evet, ama backend tarafında bu istekler genellikle sessiz sedasız reddediliyor ve iz bırakmıyor. Bu hatayı ilk gördüğümde kafayı yemiştim, çünkü sorunu tespit etmek neredeyse imkansızdı.

🔥 Sorun Neydi?

Sorun şuydu: Kullanıcılar belli bir işlemi yapamıyordu, frontend geliştirici arkadaş "CORS hatası alıyorum" diyordu, ama benim Node.js (Express) backend loglarımda o endpoint'e dair hiçbir istek kaydı yoktu. İstek, tarayıcı tarafından yapılan "preflight" (OPTIONS) aşamasında veya doğrudan backend'in CORS politikası tarafından engelleniyor ve klasik loglama middleware'lerim bu engellenen istekleri yakalayamıyordu. Sorunu anlamak ve hangi origin'den, hangi header ile geldiğini görmek için bir çözüm bulmam gerekiyordu.

🛠️ Çözüm: CORS Loglama Middleware'i

İşte benim kullandığım en temiz çözüm. Amacım, CORS politikası devreye girip isteği reddetmeden önce, bu isteğin detaylarını (origin, method, headers) loglamaktı. Bunun için mevcut `cors` paketinin konfigürasyonuna ve kendi basit middleware'ime güvendim.

İlk adım, loglama işlevini yazmak. Ben basitçe konsola ve aynı zamanda production log servisime (Winston ile) bilgi gönderen bir fonksiyon oluşturdum.

JavaScript:
// utils/corsLogger.js
const logger = require('./winstonLogger'); // Kendi log modülünüz

const logCorsAttempt = (req) => {
  const logData = {
    timestamp: new Date().toISOString(),
    ip: req.ip,
    origin: req.headers.origin || 'Yok (Same-origin veya tanımsız)',
    method: req.method,
    url: req.originalUrl,
    headers: req.headers,
  };

  // Konsola yazdır (development için)
  console.warn('[CORS İSTEK DENEMESİ]', JSON.stringify(logData, null, 2));

  // Production log dosyasına/servisine yaz
  logger.warn('CORS istek denemesi tespit edildi', logData);
};

module.exports = { logCorsAttempt };

🔧 Middleware'i Express'e Entegre Etmek

Şimdi sıra, bu loglama fonksiyonunu, CORS kontrolünden hemen önce çalıştıracak bir middleware yazmaya geldi. Önemli nokta, bu middleware'in `cors()` middleware'inden önce tanımlanması.

JavaScript:
// app.js veya server.js
const express = require('express');
const cors = require('cors');
const { logCorsAttempt } = require('./utils/corsLogger');

const app = express();

// 1. ÖNCE: CORS Loglama Middleware'i
app.use((req, res, next) => {
  // Sadece tarayıcı kaynaklı ve potansiyel CORS isteklerini logla
  if (req.headers.origin) {
    logCorsAttempt(req);
  }
  next(); // Bir sonraki middleware'e (cors) geç
});

// 2. SONRA: Normal CORS Politikamız
const corsOptions = {
  origin: ['https://guvenlialanadim.com', 'https://ikincialanadim.com'],
  optionsSuccessStatus: 200,
};
app.use(cors(corsOptions));

// ... Diğer route'larınız
app.get('/api/sensitive-data', (req, res) => {
  res.json({ data: 'Önemli veri' });
});

app.listen(3000, () => console.log('Sunucu çalışıyor...'));

Bu yapı sayesinde, `
Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
` adresinden gelen bir istek, `cors()` middleware'i tarafından reddedilse bile, benim loglarımda şu şekilde bir kayıt görünecek:
"[CORS İSTEK DENEMESİ] - Origin:
Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
, Method: GET, URL: /api/sensitive-data"


🎯 Ne Kazandırdı?

Bu basit middleware ile artık:
Hangi origin'lerin yasaklı erişim denemesi yaptığını görebiliyorum.
Saldırı veya tarama amaçlı istekleri tespit edebiliyorum.
Frontend'deki yanlış yapılandırma kaynaklı sorunları (yanlış domain, port) hızlıca teşhis edebiliyorum.
Log kayıtlarım, güvenlik ve audit açısından çok daha zenginleşti.

Sonuç olarak, bu küçük dokunuş production'daki görünmezliği ortadan kaldırdı. Siz de backend framework'ünüz (Laravel, Django vs.) için benzer bir request interception mekanizması yazabilirsiniz. Önemli olan, istek reddedilmeden önce onu yakalayıp kaydetmek.

Peki ya siz? Benzer bir CORS izleme yöntemi kullanan var mı? Ya da Laravel gibi bir framework'te Request Middleware ile bunu nasıl implemente edersiniz? Fikirlerinizi merak ediyorum!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri