mannaxxx 1
mannaxxx
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Best Studio 1
Best Studio
TuZaKK 1
TuZaKK
Mt2Hizmet 1
Mt2Hizmet
Agora Metin2 1
Agora Metin2
Bvural41 1
Bvural41
kaptanmikro1 1
kaptanmikro1
R 1
Roksam
[DEV]AB 1
[DEV]AB
Hikaye Ekle

[NODE JS] Web güvenliği ve Helmet

  • Konuyu başlatan Konuyu başlatan Silverhand
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 1
  • Görüntüleme Görüntüleme 11

Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!

nodejs.png


[NODE JS] Web güvenliği ve Helmet​


Web güvenliği konusunda en kolay ve etkili adımlardan biri Helmet kullanmaktır. npm install helmet ile kurup app.use(helmet()) demeniz yeterli. Bu tek satır bile uygulamanızın güvenliğini önemli ölçüde artırır.

Helmet aslında birçok küçük middleware'in bir araya gelmesiyle oluşuyor. Her biri farklı bir HTTP güvenlik header'ını ayarlar. Content-Security-Policy, X-Content-Type-Options, X-Frame-Options, X-XSS-Protection gibi header'lar tarayıcıya uygulamanızı nasıl koruyacağını söyler. Bu header'lar olmadan tarayıcı varsayılan davranışlarını uygular ve bu davranışlar her zaman güvenli olmayabilir.

Ben bir projede Helmet kullanmadan canlıya çıkmıştım ve güvenlik taramasında çok sayıda uyarı aldık. Clickjacking, MIME sniffing, XSS gibi açıklar tespit edildi. Helmet ekledikten sonra bu uyarıların çoğu otomatik olarak giderildi. Müşteriye güvenlik raporu sunduğumuzda çok olumlu karşılandı.

Content-Security-Policy (CSP) en güçlü güvenlik header'larından biri. Sayfanızda hangi kaynaklardan script, style, resim yüklenebileceğini belirler. XSS saldırılarına karşı çok etkili bir savunma hattı oluşturur. Ama yanlış yapılandırırsanız kendi script'leriniz de çalışmayabilir, dikkatli ayarlayın.

X-Frame-Options clickjacking saldırılarını engeller. Sayfanızın iframe içinde yüklenmesini kontrol eder. DENY tamamen engeller, SAMEORIGIN sadece aynı domain'den izin verir. Eğer sayfanızın başka sitelerde iframe ile gömülmesine gerek yoksa DENY kullanın.

Strict-Transport-Security (HSTS) tarayıcıya sitenize her zaman HTTPS üzerinden erişmesini söyler. Bu header ayarlandıktan sonra tarayıcı HTTP isteklerini otomatik olarak HTTPS'e yönlendirir. max-age ile süreyi belirlersiniz. includeSubDomains ile alt domain'leri de kapsarsınız.

X-Content-Type-Options: nosniff header'ı tarayıcının MIME type sniffing yapmasını engeller. Tarayıcı bazen Content-Type header'ına bakmadan dosyanın gerçek tipini tahmin etmeye çalışır ve bu güvenlik açığına neden olabilir. nosniff ile tarayıcıyı sadece belirtilen Content-Type'a uymaaya zorlarsınız.

Referrer-Policy header'ı kullanıcının hangi sayfadan geldiği bilgisinin nasıl paylaşılacağını kontrol eder. no-referrer hiç paylaşmaz, same-origin sadece aynı site içinde paylaşır. Kullanıcı gizliliği açısından önemli bir ayar.

Helmet'i özelleştirmek de çok kolay. Varsayılan ayarları değiştirebilir, bazı middleware'leri devre dışı bırakabilir veya kendi ayarlarınızı ekleyebilirsiniz. CSP'yi kendi ihtiyaçlarınıza göre yapılandırmanız çoğu zaman gerekir çünkü varsayılan ayarlar çok kısıtlayıcı olabilir.

Güvenlik sadece Helmet'le sınırlı değil ama çok iyi bir başlangıç noktası. OWASP Top 10 listesini incelemenizi, düzenli güvenlik taramaları yapmanızı ve bağımlılıklarınızı güncel tutmanızı öneririm. npm audit komutu bilinen güvenlik açıklarını tespit etmenize yardımcı olur.

JavaScript:
const express = require('express');
const helmet = require('helmet');
const app = express();

// npm install helmet

// Temel kullanim - tum varsayilan korumalar aktif
// app.use(helmet());

// Detayli yapilandirma
app.use(helmet({{
  // Content Security Policy
  contentSecurityPolicy: {{
    directives: {{
      defaultSrc: ["'self'"],
      scriptSrc: ["'self'", "'unsafe-inline'", "cdn.jsdelivr.net"],
      styleSrc: ["'self'", "'unsafe-inline'", "fonts.googleapis.com"],
      imgSrc: ["'self'", "data:", "*.cloudinary.com", "*.imgur.com"],
      fontSrc: ["'self'", "fonts.gstatic.com"],
      connectSrc: ["'self'", "api.example.com"],
      frameSrc: ["'none'"],
      objectSrc: ["'none'"],
      upgradeInsecureRequests: [],
    }},
  }},
  // Cross-Origin politikalari
  crossOriginEmbedderPolicy: false,
  crossOriginResourcePolicy: {{ policy: "cross-origin" }},
  // HSTS
  strictTransportSecurity: {{
    maxAge: 31536000,       // 1 yil
    includeSubDomains: true,
    preload: true,
  }},
  // Referrer politikasi
  referrerPolicy: {{ policy: "strict-origin-when-cross-origin" }},
  // X-Frame-Options
  frameguard: {{ action: "deny" }},
  // MIME sniffing engelleme
  noSniff: true,
  // XSS filtresi (modern tarayicilarda deprecated ama zarar vermez)
  xssFilter: true,
  // DNS prefetch kontrolu
  dnsPrefetchControl: {{ allow: false }},
  // IE no-open
  ieNoOpen: true,
  // Powered-By header'ini kaldir
  hidePoweredBy: true,
}}));

app.use(express.json());

// Ornek route'lar
app.get('/', (req, res) => {{
  res.send(`
    <h1>Helmet ile Korunmus Sayfa</h1>
    <p>Tarayicinin Developer Tools > Network sekmesinden response header'larini inceleyin.</p>
    <p>Asagidaki header'lari goreceksiniz:</p>
    <ul>
      <li>Content-Security-Policy</li>
      <li>Strict-Transport-Security</li>
      <li>X-Content-Type-Options</li>
      <li>X-Frame-Options</li>
      <li>Referrer-Policy</li>
    </ul>
  `);
}});

app.get('/api/guvenlik-durum', (req, res) => {{
  const headerlar = {{}};
  const onemliHeaderlar = [
    'content-security-policy',
    'strict-transport-security',
    'x-content-type-options',
    'x-frame-options',
    'referrer-policy',
    'x-xss-protection',
    'x-dns-prefetch-control',
  ];

  // Response'a eklenen header'lari goster
  res.json({{
    mesaj: 'Guvenlik header\'lari aktif',
    korumaKatmanlari: [
      'CSP - Script injection onlemi',
      'HSTS - HTTPS zorunlulugu',
      'noSniff - MIME type sniffing engeli',
      'frameguard - Clickjacking onlemi',
      'referrerPolicy - Referrer bilgi kontrolu',
    ],
    tavsiyeler: [
      'HTTPS kullanin',
      'Bagimliliklari guncel tutun (npm audit)',
      'Ortam degiskenlerinde hassas veri saklayin',
      'Rate limiting ekleyin',
      'Input validasyonu yapin',
    ],
  }});
}});

// Ek guvenlik middleware'leri
app.use((req, res, next) => {{
  // X-Powered-By header'ini kaldir (helmet zaten yapiyor ama ekstra onlem)
  res.removeHeader('X-Powered-By');

  // Ozel guvenlik header'lari
  res.setHeader('Permissions-Policy', 'camera=(), microphone=(), geolocation=()');
  res.setHeader('X-Request-Id', require('crypto').randomUUID());

  next();
}});

app.listen(3000, () => {{
  console.log('Helmet sunucusu port 3000\'de');
}});

Helmet tek başına uygulamanızı tamamen güvenli yapmaz ama güvenlik seviyenizi önemli ölçüde yükseltir. Her Express projesinde ilk eklediğim paketlerden biri Helmet'tir. Kurulumu kolay, yapılandırması esnek ve etkisi büyük. Güvenlikte en düşük maliyetle en yüksek getiriyi sağlayan araçlardan biri.
 
Son düzenleme:

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst