Security Misconfiguration (Güvenlik Yapılandırma Hatası)

Genel Bakış

Bu güvenlik açığı, uygulamanın güvenlik ayarlarının yanlış yapılandırılmasından kaynaklanır. Yani, güvenlik önlemlerinin doğru şekilde ayarlanmaması veya varsayılan ayarların değiştirilmemesi durumunda ortaya çıkar.

Yaygın Örnekler

1. Default Credentials (Varsayılan Kimlik Bilgileri)

Örnek: Varsayılan kullanıcı adı ve şifrelerin değiştirilmemesi.

// Kötü örnek
const config = {
    db: {
        username: 'admin',
        password: 'admin123'
    }
};

// İyi örnek
const config = {
    db: {
        username: process.env.DB_USERNAME,
        password: process.env.DB_PASSWORD
    }
};

2. Error Messages (Hata Mesajları)

Örnek: Detaylı hata mesajlarının kullanıcılara gösterilmesi.

// Kötü örnek
app.use((err, req, res, next) => {
    res.status(500).json({
        error: err.message,
        stack: err.stack,
        sql: err.sql
    });
});

// İyi örnek
app.use((err, req, res, next) => {
    console.error(err);
    res.status(500).json({
        error: 'Bir hata oluştu'
    });
});

Korunma Yöntemleri

  • Güvenlik yapılandırma kontrol listesi kullanın
  • Otomatik yapılandırma araçları kullanın
  • Düzenli güvenlik taramaları yapın
  • Güvenlik güncellemelerini takip edin
  • Güvenlik dokümantasyonu hazırlayın

Örnek Kod

Secure Configuration Example (Güvenli Yapılandırma Örneği)

class SecureConfig {
    constructor() {
        this.validateEnvironment();
        this.loadConfig();
    }

    validateEnvironment() {
        const required = ['DB_USERNAME', 'DB_PASSWORD', 'JWT_SECRET'];
        for (const env of required) {
            if (!process.env[env]) {
                throw new Error(`${env} ortam değişkeni bulunamadı`);
            }
        }
    }

    loadConfig() {
        this.config = {
            database: {
                username: process.env.DB_USERNAME,
                password: process.env.DB_PASSWORD,
                host: process.env.DB_HOST || 'localhost'
            },
            security: {
                jwtSecret: process.env.JWT_SECRET,
                corsOrigin: process.env.CORS_ORIGIN || '*'
            },
            logging: {
                level: process.env.LOG_LEVEL || 'info',
                format: process.env.LOG_FORMAT || 'json'
            }
        };
    }

    getConfig() {
        return this.config;
    }
}