API Güvenliği En İyi Uygulamalar Rehberi
API güvenliği, uygulamalarınızı ve verilerinizi korumak için kritik öneme sahiptir. Bu rehber, API’lerinizi yaygın tehditlere karşı güvende tutmak için temel güvenlik uygulamalarını kapsar.
Kimlik Doğrulama ve Yetkilendirme
1. Güçlü Kimlik Doğrulama Kullanın
# JWT Token Örneği
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
https://api.example.com/protected
2. Rol Tabanlı Erişim Kontrolü (RBAC) Uygulayın
// Middleware örneği
function requireRole(role) {
return (req, res, next) => {
if (req.user.role !== role) {
return res.status(403).json({ error: 'Erişim reddedildi' });
}
next();
};
}
Girdi Doğrulama
1. Tüm Girdileri Doğrulayın
// Girdi doğrulama örneği
const { body, validationResult } = require('express-validator');
app.post('/api/users', [
body('email').isEmail().normalizeEmail(),
body('password').isLength({ min: 8 }),
body('age').isInt({ min: 0, max: 120 })
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
// İsteği işle
});
2. Veriyi Temizleyin
# Python örneği
import bleach
def sanitize_input(data):
return bleach.clean(data, strip=True)
Hız Sınırlama
1. Hız Sınırlama Uygulayın
// Express hız sınırlama
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 dakika
max: 100, // her IP'yi 15 dakikada 100 istekle sınırla
message: 'Bu IP'den çok fazla istek'
});
app.use('/api/', limiter);
2. API Anahtarı Yönetimi
# API anahtarlarıyla hız sınırlama
curl -H "X-API-Key: your-api-key" \
-H "X-Rate-Limit: 1000" \
https://api.example.com/data
HTTPS ve Şifreleme
1. Her Zaman HTTPS Kullanın
# Nginx yapılandırması
server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# Güvenlik başlıkları
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
}
2. Hassas Verileri Şifreleyin
# Şifreleme örneği
const crypto = require('crypto');
function encryptData(data, key) {
const cipher = crypto.createCipher('aes-256-cbc', key);
let encrypted = cipher.update(data, 'utf8', 'hex');
encrypted += cipher.final('hex');
return encrypted;
}
Yaygın Güvenlik Açıkları
1. SQL Injection Önleme
// Parametreli sorgular kullanın
const query = 'SELECT * FROM users WHERE id = ?';
db.query(query, [userId], (err, results) => {
// SQL injection'dan güvenli
});
2. XSS Koruması
// Çıktıyı temizleyin
const escapeHtml = (text) => {
const map = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
return text.replace(/[&<>"']/g, (m) => map[m]);
};
3. CORS Yapılandırması
// Doğru CORS kurulumu
const cors = require('cors');
app.use(cors({
origin: ['https://trusted-domain.com'],
credentials: true,
optionsSuccessStatus: 200
}));
Güvenlik Başlıkları
1. Temel Başlıklar
// Güvenlik başlıkları middleware
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('X-XSS-Protection', '1; mode=block');
res.setHeader('Strict-Transport-Security', 'max-age=31536000');
next();
});
İzleme ve Loglama
1. Güvenlik Loglama
// Güvenlik olaylarını loglayın
const winston = require('winston');
const securityLogger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'security.log' })
]
});
// Başarısız kimlik doğrulama girişimlerini loglayın
securityLogger.warn('Başarısız giriş girişimi', {
ip: req.ip,
userAgent: req.get('User-Agent'),
timestamp: new Date()
});
En İyi Uygulamalar Özeti
- Her zaman HTTPS kullanın tüm API iletişimleri için
- Uygun kimlik doğrulama ve yetkilendirme uygulayın
- Tüm girdileri doğrulayın ve temizleyin
- Kötüye kullanımı önlemek için hız sınırlama kullanın
- Güvenlik açıklarını yamak için bağımlılıkları güncel tutun
- Güvenlik olaylarını izleyin ve loglayın
- İstemcileri korumak için güvenlik başlıkları kullanın
- Düzenli güvenlik denetimleri ve penetrasyon testleri
Sonuç
API güvenliği sürekli dikkat ve çoklu koruma katmanlarının uygulanmasını gerektirir. Bu uygulamaları takip ederek, güvenlik ihlali riskini önemli ölçüde azaltabilir ve kullanıcı verilerinizi koruyabilirsiniz.
Unutmayın: Güvenlik tek seferlik bir uygulama değil, düzenli güncellemeler ve izleme gerektiren sürekli bir süreçtir.