Node Js ile Yazılımsal Web Sunucu Güvenliği

ByFelez

Uzman üye
9 Tem 2013
1,818
1,774

Selamın Aleyküm

-Ben ByFelez-


Konumuza geçelim ;

Bu Node.js programı, gelen isteklere karşı bir güvenlik katmanı eklemek amacıyla örnek olarak bu konu için foruma içerik olması için kodladım. IP ve User-Agent kontrolleri, kötü niyetli istekleri sınırlar. Tor ağı kontrolü ile Tor ağından gelen istekler engellenir. Güvenlik başlıkları, CORS kontrolü ve HTTPS zorunluluğu gibi önlemlerle temel bir koruma sağlanır. Gelişmiş günlükleme özellikleri ve çoklu iş parçacığı desteği de içerir.


Adım Adım Gidelim ;


Projemiz için gerekli modülleri ekleyelim

JavaScript:
const express = require('express');
const bodyParser = require('body-parser');
const compression = require('compression');
const helmet = require('helmet');
const cors = require('cors');
const axios = require('axios');
const fs = require('fs');
const https = require('https');
const cluster = require('cluster');
const os = require('os');

İP Sınırlarını ve engelleme süresi

JavaScript:
const IP_LIMIT = 5;
const BLOCK_TIME = 60000; // 1 dakika
const ipRequests = {};

Aynı anda 5 istek sınırına ulaşan İP adresleri 1 dakika engellenir. (milisaniye cinsinde belirttim kodda)

Express uygulamasını oluşturma


JavaScript:
const app = express();

Middleware'lerin kullanılması

JavaScript:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

İP ve User-Agent bilgilerini kaydetme

JavaScript:
app.use((req, res, next) => {
  const ip = req.ip || req.connection.remoteAddress;
  const userAgent = req.get('User-Agent');

İP bilgilerini kontrol etme

JavaScript:
 if (ipRequests[ip]) {
    ipRequests[ip].count += 1;
    ipRequests[ip].userAgents.add(userAgent);

Belirli bir İP'den gelen istek sayısı limiti kontrolü

JavaScript:
 if (ipRequests[ip].count > IP_LIMIT) {
      ipRequests[ip].blockedUntil = Date.now() + BLOCK_TIME;
      return res.redirect('/blocked-user.html');
    }
  } else {
    ipRequests[ip] = {
      count: 1,
      userAgents: new Set([userAgent]),
      blockedUntil: 0,
    };
  }

  next();
});

İP engelleme

JavaScript:
app.use((req, res, next) => {
  const ip = req.ip || req.connection.remoteAddress;

Eğer İP engellenmişse yönlendirme

JavaScript:
  if (ipRequests[ip].blockedUntil > Date.now()) {
    return res.redirect('/blocked-user.html');
  }

  next();
});

Tor ağından gelen istekleri engelleme

JavaScript:
app.use(async (req, res, next) => {
  const ip = req.ip || req.connection.remoteAddress;

  try {

Tor Ağı Kontrolü

JavaScript:
 const torCheckResponse = await axios.get(`https://check.torproject.org/torbulkexitlist?ip=${ip}`);

Eğer gelen IP Tor ağına aitse engelle

JavaScript:
  if (torCheckResponse.data && torCheckResponse.data.includes(ip)) {
      return res.redirect('/tor-blocked.html');
    }
  } catch (error) {
    console.error('Tor check failed:', error);
  }

  next();
});

Güvenlik başlıkları için Helmet

JavaScript:
app.use(helmet());

CORS Kontrolü eklemek için Cors kullanımı

JavaScript:
app.use(cors());

Gzip sıkıştırma eklemek için Compression kullanımı

JavaScript:
app.use(compression());

Ana sayfa endpoint

JavaScript:
app.get('/', (req, res) => {
  res.send('Ana Sayfa');
});

Engellenen kullanıcı sayfası endpoint

JavaScript:
app.get('/blocked-user.html', (req, res) => {
  res.send('Engellenen Kullanıcı Sayfası');
});

Tor ağından gelen istekleri engellenen sayfasına yönlendirme

JavaScript:
app.get('/tor-blocked.html', (req, res) => {
  res.send('Tor Ağından Gelen İstekler Engellendi');
});

SSL/TLS sertifikası ve anahtarı

JavaScript:
const privateKey = fs.readFileSync('/path/to/private-key.pem', 'utf8');
const certificate = fs.readFileSync('/path/to/certificate.pem', 'utf8');
const credentials = { key: privateKey, cert: certificate };

Sunucu başlatma

JavaScript:
if (cluster.isMaster) {

İş parçacıklarını oluşturma

JavaScript:
 for (let i = 0; i < os.cpus().length; i++) {
    cluster.fork();
  }
} else {

İş Parçacığı Çalıştırma

JavaScript:
const port = 443; // HTTPS için 443 portu
  const httpsServer = https.createServer(credentials, app);

  httpsServer.listen(port, () => {
    console.log(`Sunucu ${port} portunda çalışıyor (HTTPS)`);
  });
}

Gelelim Özelliklere ;
  1. IP ve User-Agent Kontrolü
  2. Tor Ağı Kontrolü
  3. Güvenlik Başlıkları
  4. CORS Kontrolü
  5. HSTS (Strict Transport Security)
  6. HPKP (HTTP Public Key Pinning)
  7. Gzip Sıkıştırma
  8. Loglama
  9. Cluster ve İş Parçacıkları

Saygılarımla >>
 

yuathay

Katılımcı Üye
7 Mar 2023
377
180
Gitti
Aleyküm selam elinize sağlık hocam
javascript ile node.js arasında cok fark varmı
yoksa javascript bilen birisi kısa sürede node.js'e alışabilirmi
 

ByFelez

Uzman üye
9 Tem 2013
1,818
1,774
Aleyküm selam elinize sağlık hocam
javascript ile node.js arasında cok fark varmı
yoksa javascript bilen birisi kısa sürede node.js'e alışabilirmi
Teşekkür ederim.
Node Js javascript yapısı kullanır. Javascript bilen kişiler node js, angular, react gibi teknolojilerle çalışabilirler.
 

drjacob

Uzman üye
21 Ocak 2012
1,788
413
localhost
Selamın Aleyküm

-Ben ByFelez-


Konumuza geçelim ;

Bu Node.js programı, gelen isteklere karşı bir güvenlik katmanı eklemek amacıyla örnek olarak bu konu için foruma içerik olması için kodladım. IP ve User-Agent kontrolleri, kötü niyetli istekleri sınırlar. Tor ağı kontrolü ile Tor ağından gelen istekler engellenir. Güvenlik başlıkları, CORS kontrolü ve HTTPS zorunluluğu gibi önlemlerle temel bir koruma sağlanır. Gelişmiş günlükleme özellikleri ve çoklu iş parçacığı desteği de içerir.


Adım Adım Gidelim ;


Projemiz için gerekli modülleri ekleyelim

JavaScript:
const express = require('express');
const bodyParser = require('body-parser');
const compression = require('compression');
const helmet = require('helmet');
const cors = require('cors');
const axios = require('axios');
const fs = require('fs');
const https = require('https');
const cluster = require('cluster');
const os = require('os');

İP Sınırlarını ve engelleme süresi

JavaScript:
const IP_LIMIT = 5;
const BLOCK_TIME = 60000; // 1 dakika
const ipRequests = {};

Aynı anda 5 istek sınırına ulaşan İP adresleri 1 dakika engellenir. (milisaniye cinsinde belirttim kodda)

Express uygulamasını oluşturma


JavaScript:
const app = express();

Middleware'lerin kullanılması

JavaScript:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

İP ve User-Agent bilgilerini kaydetme

JavaScript:
app.use((req, res, next) => {
  const ip = req.ip || req.connection.remoteAddress;
  const userAgent = req.get('User-Agent');

İP bilgilerini kontrol etme

JavaScript:
 if (ipRequests[ip]) {
    ipRequests[ip].count += 1;
    ipRequests[ip].userAgents.add(userAgent);

Belirli bir İP'den gelen istek sayısı limiti kontrolü

JavaScript:
 if (ipRequests[ip].count > IP_LIMIT) {
      ipRequests[ip].blockedUntil = Date.now() + BLOCK_TIME;
      return res.redirect('/blocked-user.html');
    }
  } else {
    ipRequests[ip] = {
      count: 1,
      userAgents: new Set([userAgent]),
      blockedUntil: 0,
    };
  }

  next();
});

İP engelleme

JavaScript:
app.use((req, res, next) => {
  const ip = req.ip || req.connection.remoteAddress;

Eğer İP engellenmişse yönlendirme

JavaScript:
  if (ipRequests[ip].blockedUntil > Date.now()) {
    return res.redirect('/blocked-user.html');
  }

  next();
});

Tor ağından gelen istekleri engelleme

JavaScript:
app.use(async (req, res, next) => {
  const ip = req.ip || req.connection.remoteAddress;

  try {

Tor Ağı Kontrolü

JavaScript:
 const torCheckResponse = await axios.get(`https://check.torproject.org/torbulkexitlist?ip=${ip}`);

Eğer gelen IP Tor ağına aitse engelle

JavaScript:
  if (torCheckResponse.data && torCheckResponse.data.includes(ip)) {
      return res.redirect('/tor-blocked.html');
    }
  } catch (error) {
    console.error('Tor check failed:', error);
  }

  next();
});

Güvenlik başlıkları için Helmet

JavaScript:
app.use(helmet());

CORS Kontrolü eklemek için Cors kullanımı

JavaScript:
app.use(cors());

Gzip sıkıştırma eklemek için Compression kullanımı

JavaScript:
app.use(compression());

Ana sayfa endpoint

JavaScript:
app.get('/', (req, res) => {
  res.send('Ana Sayfa');
});

Engellenen kullanıcı sayfası endpoint

JavaScript:
app.get('/blocked-user.html', (req, res) => {
  res.send('Engellenen Kullanıcı Sayfası');
});

Tor ağından gelen istekleri engellenen sayfasına yönlendirme

JavaScript:
app.get('/tor-blocked.html', (req, res) => {
  res.send('Tor Ağından Gelen İstekler Engellendi');
});

SSL/TLS sertifikası ve anahtarı

JavaScript:
const privateKey = fs.readFileSync('/path/to/private-key.pem', 'utf8');
const certificate = fs.readFileSync('/path/to/certificate.pem', 'utf8');
const credentials = { key: privateKey, cert: certificate };

Sunucu başlatma

JavaScript:
if (cluster.isMaster) {

İş parçacıklarını oluşturma

JavaScript:
 for (let i = 0; i < os.cpus().length; i++) {
    cluster.fork();
  }
} else {

İş Parçacığı Çalıştırma

JavaScript:
const port = 443; // HTTPS için 443 portu
  const httpsServer = https.createServer(credentials, app);

  httpsServer.listen(port, () => {
    console.log(`Sunucu ${port} portunda çalışıyor (HTTPS)`);
  });
}

Gelelim Özelliklere ;
  1. IP ve User-Agent Kontrolü
  2. Tor Ağı Kontrolü
  3. Güvenlik Başlıkları
  4. CORS Kontrolü
  5. HSTS (Strict Transport Security)
  6. HPKP (HTTP Public Key Pinning)
  7. Gzip Sıkıştırma
  8. Loglama
  9. Cluster ve İş Parçacıkları

Saygılarımla >>
hocam elimde node.js scripti var github'dan indirdim bunu sunucuya nasıl kuracağım ?
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.