ÖFÖ ile Node.js Güvenlik Açıklarını Kapatın
ÖFÖ ile Node.js Güvenlik Açıklarını Kapatın
Node.js tabanlı uygulamalarınız her gün binlerce siber saldırı altında. Her bir güvenlik açığı, işletmeniz için potansiyel bir iflas nedeni. Veri ihlalleri, GDPR cezaları, müşteri güveninin kaybı ve milyonlarca liralık zarar... Bu sadece büyük şirketlerin değil, orta ölçekli işletmelerin de başına geliyor. Peki sizin uygulamanız ne kadar güvende?
Node.js'in hızlı ve ölçeklenebilir yapısı, yanlış konfigürasyon ve ihmal edilen güvenlik kontrolleri nedeniyle ciddi riskler barındırır. Geliştirme ekibiniz yoğun release takvimleri arasında güvenlik testlerini atlıyor mu? Ya da açık kaynak paketlerin güncellemelerini takip edemiyor musunuz? İşte tam bu noktada ÖFÖ ekibi olarak devreye giriyoruz. Uzmanlarımız, Node.js uygulamalarınızdaki kritik güvenlik açıklarını tespit ediyor, kapatıyor ve sürekli izleme hizmetiyle geleceğe hazırlıyor.
Node.js Uygulamalarınızı Tehdit Eden 5 Kritik Güvenlik Açığı
1. NoSQL Injection ve Veritabanı Saldırıları
MongoDB gibi NoSQL veritabanlarını kullanıyorsanız, geleneksel SQL injection'dan farklı ama aynı derecede tehlikeli saldırılara maruz kalırsınız. Kullanıcı girişlerini doğrulamadan veritabanı sorgularına dahil etmek, tüm kullanıcı verilerinizin çalınmasına yol açar.
Tehlikeli Kod:
// KULLANMAYIN! Güvensiz kullanıcı girişi
app.post('/login', async (req, res) => {
const user = await User.findOne({
username: req.body.username,
password: req.body.password
});
res.json(user);
});
Güvenli Çözüm:
const Joi = require('joi');
const loginSchema = Joi.object({
username: Joi.string().alphanum().min(3).max(30).required(),
password: Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{8,30}$')).required()
});
app.post('/login', async (req, res) => {
const { error, value } = loginSchema.validate(req.body);
if (error) return res.status(400).json({ error: error.details[0].message });
const user = await User.findOne({
username: value.username,
password: crypto.createHash('sha256').update(value.password).digest('hex')
});
res.json(user);
});
Bu temel önlemleri almak önemli, ancak karmaşık projelerde her noktayı kontrol etmek zordur. ÖFÖ ile çalışarak kapsamlı kod incelemesi ve otomatik tarama araçlarıyla tüm veritabanı erişim noktalarınızı güvence altına alabilirsiniz.
2. XSS (Cross-Site Scripting) Saldırıları
Kullanıcıların girdiği verileri filtrelemeden sayfada gösteriyorsanız, kötü niyetli JavaScript kodları çalıştırılabilir. Bu, çerezlerinizin çalınmasından kullanıcıların oturumlarının ele geçirilmesine kadar geniş bir zarar yelpazesi demektir.
Güvenli Kod Örneği:
const escapeHtml = require('escape-html');
app.get('/profile/:username', async (req, res) => {
const user = await User.findOne({ username: req.params.username });
// Kullanıcı verilerini escape edin
res.send(`
<h1>Profil: ${escapeHtml(user.username)}</h1>
<p>${escapeHtml(user.bio)}</p>
`);
});
Helmet.js gibi kütüphanelerle HTTP başlıklarını düzenlemek de şart:
const helmet = require('helmet');
app.use(helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
styleSrc: ["'self'", "'unsafe-inline'"],
scriptSrc: ["'self'"],
}
}
}));
3. Kimlik Doğrulama ve Yetkilendirme Zafiyetleri
Zayıf JWT yapılandırması, şifrelenmemiş token'lar veya eksik yetkilendirme kontrolleri, saldırganların yönetici yetkileri almasına izin verir. Özellikle mikroservis mimarilerinde bu risk katlanır.
Güvenli JWT Uygulaması:
const jwt = require('jsonwebtoken');
const crypto = require('crypto');
// Güçlü secret key oluşturma
const JWT_SECRET = crypto.randomBytes(64).toString('hex');
const generateToken = (userId, role) => {
return jwt.sign(
{ userId, role },
JWT_SECRET,
{
expiresIn: '2h',
issuer: 'your-app-name',
audience: 'your-audience'
}
);
};
// Middleware - Rol bazlı kontrol
const authorize = (roles) => {
return (req, res, next) => {
const token = req.headers.authorization?.split(' ')[1];
if (!token) return res.status(401).json({ error: 'Token gerekli' });
jwt.verify(token, JWT_SECRET, (err, decoded) => {
if (err) return res.status(403).json({ error: 'Geçersiz token' });
if (!roles.includes(decoded.role)) {
return res.status(403).json({ error: 'Yetkisiz erişim' });
}
req.user = decoded;
next();
});
};
};
// Kullanım
app.delete('/admin/users/:id', authorize(['admin', 'superadmin']), async (req, res) => {
// Silme işlemi
});
4. Rate Limiting ve DDoS Koruması Eksikliği
API endpoint'lerinizde hız sınırlaması yoksa, saldırganlar brute-force saldırılarıyla sisteminizi çökerte veya şifreleri kırmaya çalışabilir.
Rate Limiting Uygulaması:
const rateLimit = require('express-rate-limit');
const loginLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 dakika
max: 5, // 5 deneme
message: 'Çok fazla giriş denemesi. Lütfen 15 dakika sonra tekrar deneyin.',
standardHeaders: true,
legacyHeaders: false,
});
app.post('/login', loginLimiter, async (req, res) => {
// Login işlemi
});
5. Eski ve Zafiyetli Bağımlılıklar
npm audit çıktınızdaki kırmızı uyarıları görmezden geliyor musunuz? Her bir güncellemeyi ertelemek, bilinen zafiyetleri saldırganlara açık kapı bırakır.
Güncellemeleri Otomatize Edin:
# Güvenlik audit'ini çalıştırın
npm audit
# Otomatik fix (mümkünse)
npm audit fix
# Sadece kritik güvenlik güncellemeleri
npm audit fix --only=prod
Bu komutlar temeldir ama yeterli değildir. ÖFÖ.dev hizmetleri kapsamında sürekli izleme ve dependency yönetimi ile üretim ortamınızdaki tüm paketleri otomatik olarak güncel tutuyoruz.
ÖFÖ'nun Profesyonel Güvenlik Yaklaşımı
Yukarıdaki çözümler geliştirme ekibiniz için iyi bir başlangıçtır, ancak gerçek dünya saldırılarında tek başına yeterli olmaz. ÖFÖ'nun siber güvenlik uzmanları olarak multi-layered bir güvenlik stratejisi uyguluyoruz:
Manuel Kod İncelemesi
Otomatik araçlar %70-80'lik bir güvenlik seviyesi sağlar. Geri kalan %20, genellikle en kritik açıkları barındırır. Ekibimiz, uygulamanızın her satırını inceleyerek mantık hatalarını, yetki atlama risklerini ve iş akışı zafiyetlerini tespit eder.
Penetrasyon Testleri
Black box ve white box test yöntemleriyle gerçek saldırgan gibi düşünürüz. API'lerinizi, websocket bağlantılarınızı ve veri akışlarınızı test ederiz. Sonuçları detaylı bir raporla sunar, kritik, orta ve düşük riskli açıkları önceliklendiririz.
Sürekli İzleme ve Anomali Tespiti
Güvenlik bir proje değil, süreçtir. Log yönetimi, SIEM entegrasyonu ve anomali tespit sistemleri kurarak saldırıları gerçek zamanlı tespit ediyoruz. ÖFÖ ile çalışarak 7/24 koruma altında olursunuz.
Node.js Güvenlik Kontrol Listesi: Hemen Uygulayın
Şimdi ekibinizin uygulayabileceği pratik adımlar:
- Helmet.js kullanın ve CSP başlıklarını yapılandırın
- express-validator ile tüm girişleri doğrulayın
- bcrypt ile ş