Modern web uygulamalarında, API endpointleri sistemin dış dünyaya açılan kapılarıdır. Bu kapıları yeterince güvenli hale getirmezseniz, sızıntılar, yetkisiz erişimler ve ciddi veri ihlalleri kaçınılmaz olur. API'lerde güvenliği sağlamak için en etkili yöntemlerden biri de middleware kullanmaktır.
Bu makalede "Middleware nedir?" sorusundan başlayarak, örnek kodlar ve senaryolar üzerinden API endpoint güvenliğini nasıl middleware yardımıyla sağlayabileceğimizi anlatacağız.
Middleware Nedir?
Middleware, bir API isteği sunucuya ulaşmadan önce veya yanıt oluşmadan önce çalışan ara yazılım katmanlarıdır. İşlevleri şunlar olabilir:
-
Gelen isteğin kimliğini doğrulamak
-
Kullanıcının yetkisini kontrol etmek
-
Veri doğrulama (input validation)
-
İstek kaydı (logging)
-
Hız sınırlama (rate limiting)
Middleware sayesinde kod tekrarı azalarak API yapısı daha güvenli, okunabilir ve bakımı kolay hale gelir.
Middleware Kullanılmazsa Ne Olur?
-
Yetkisiz erişim riski artar.
-
Kimlik doğrulama eksiklikleri oluşur.
-
Çok fazla veri sızdırma ihtimali olur.
-
Rate limit olmazsa DDoS gibi saldırılara açık hale gelirsiniz.
Basit bir örnek: /api/user/delete/:id
gibi bir endpointiniz varsa ve gönderilen ID'yi kontrol etmezseniz, herhangi bir kullanıcı başka kullanıcıların hesaplarını silebilir.
API Endpointlerinde Kullanılması Gereken Temel Middleware Türleri
1. Kimlik Doğrulama Middleware (Authentication Middleware)
Kullanıcının sisteme giriş yapıp yapmadığını kontrol eder.
Örnek (Node.js / Express.js):
function authMiddleware(req, res, next) {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).json({ message: 'Token bulunamadı!' });
}
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = decoded;
next();
} catch (error) {
return res.status(403).json({ message: 'Geçersiz token!' });
}
}
Kullanımı:
app.get('/api/profile', authMiddleware, (req, res) => {
res.json({ user: req.user });
});
2. Yetkilendirme Middleware (Authorization Middleware)
Kimliği doğrulanan kullanıcının belirli işlemleri yapmaya yetkili olup olmadığını kontrol eder.
Örnek:
function adminMiddleware(req, res, next) {
if (req.user.role !== 'admin') {
return res.status(403).json({ message: 'Yütkisiz erişim!' });
}
next();
}
Kullanımı:
app.delete('/api/user/:id', authMiddleware, adminMiddleware, (req, res) => {
// kullanıcı silme işlemleri
});
3. Girdi Doğrulama Middleware (Input Validation Middleware)
Sunucuya gelen verilerin formatını ve içeriğini kontrol eder. SQL Injection, XSS gibi tehlikelere karşı koruma sağlar.
Örnek (Joi Kütüphanesi ile):
const Joi = require('joi');
function validateUserInput(req, res, next) {
const schema = Joi.object({
email: Joi.string().email().required(),
password: Joi.string().min(6).required()
});
const { error } = schema.validate(req.body);
if (error) {
return res.status(400).json({ message: error.details[0].message });
}
next();
}
Kullanımı:
app.post('/api/register', validateUserInput, (req, res) => {
// kayıt işlemleri
});
4. Rate Limiting Middleware (Hız Sınırlama)
Bir IP adresinin belirli bir zaman diliminde atabileceği istek sayısını sınırlar. DDoS veya brute-force saldırılarını önler.
Örnek (Express-rate-limit ile):
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: 100
});
app.use(limiter);
5. CORS Middleware
İsteklerin sadece belirli domainlerden gelmesini sağlar.
Örnek:
const cors = require('cors');
app.use(cors({
origin: 'https://siteniz.com'
}));
Örnek Gerçek Hayat Senaryosu: Middleware Kullanılmadan İhlal
Bir blog sitesinde /api/admin/posts/delete/:postId
adlı endpoint, middleware kullanılmadan yayımlandı. Saldırgan bir kullanıcı, kendine ait olmayan postId
'leri kullanarak başka kullanıcıların yazılarını silebildi.
Eğer authMiddleware
+ adminMiddleware
kullanılsa idi:
-
Kimlik doğrulaması yapılırdı.
-
Sadece admin yetkisi olan kullanıcılar işlem yapabilirdi.
-
Yetkisiz işlem teşebbüsü engellenirdi.
Sonuç: Middleware Güvenliğin İlk Savunmasıdır
API endpointlerinizi her zaman kimlik doğrulama, yetkilendirme, doğrulama ve sınırlama katmanları ile koruyun. Unutmayın, en iyi savunma, daha ılk temas anında gelen isteği sorgulamakla başlar.
Bu makaledeki örneklerle kendi sisteminize kolayca middleware mimarisi entegre ederek API'lerinizi çok daha dayanıklı ve profesyonel hale getirebilirsiniz.