Jadual Kandungan
Hadkan trafik permintaan
Sahkan sumber permintaan
Gunakan perkhidmatan perlindungan DDos yang disediakan oleh penyedia perkhidmatan
Gunakan CSP
Menggunakan Helmet
Gunakan koa-usual-bundle
Rumah hujung hadapan web Soal Jawab bahagian hadapan penempatan selamat nodejs koa

penempatan selamat nodejs koa

May 27, 2023 pm 05:09 PM

Kata Pengantar

Node.js ialah persekitaran masa jalan JavaScript dipacu peristiwa yang sangat popular Ia dicirikan oleh kecekapan, kebolehskalaan dan merentas platform. Koa ialah rangka kerja web Node.js ringan yang menggunakan penjana ES6 untuk menjadikan penulisan kod tak segerak lebih ringkas. Dalam aplikasi sebenar, kita selalunya perlu menggunakan aplikasi Node.js Artikel ini akan memperkenalkan secara terperinci cara menggunakan aplikasi Koa dengan selamat.

HTTPS

Dalam persekitaran pengeluaran, kita harus menggunakan protokol HTTPS untuk memastikan keselamatan data. Jadi apabila menggunakan aplikasi Koa, kita mesti terlebih dahulu membuat aplikasi menyokong HTTPS.

Pertama, kami memerlukan sijil untuk nama domain Anda boleh menggunakan Let’s Encrypt untuk melaksanakan sijil HTTPS percuma. Untuk langkah khusus, sila rujuk artikel ini: [Gunakan Let's Encrypt untuk mendayakan HTTPS untuk aplikasi Node.js secara percuma](https://github.com/chemdemo/chemdemo.github.io/issues/11). Selepas permohonan sijil selesai, kita perlu menambah kod berikut pada skrip permulaan aplikasi:

const https = require('https');
const fs = require('fs');
const Koa = require('koa');
const app = new Koa();

const options = {
  key: fs.readFileSync('/etc/ssl/example.com.key'),
  cert: fs.readFileSync('/etc/ssl/example.com.crt'),
};

https.createServer(options, app.callback()).listen(3000, () => {
  console.log('HTTPS Server listening on port 3000');
});
Salin selepas log masuk

di mana, /etc/ssl/example.com.key ialah laluan fail kunci peribadi sijil dan /etc/ssl/example.com.key ialah kunci awam laluan fail sijil. https.createServer Kaedah mencipta pelayan HTTPS berdasarkan konfigurasi sijil.

Cegah serangan DDos

Serangan DDos (Distributed Denial of Service) ialah cara biasa serangan rangkaian Penyerang akan menggunakan pelbagai kaedah untuk menundukkan pelayan kepada sejumlah besar permintaan, menyebabkan pelayan menjadi tidak tersedia.

Untuk mengelakkan serangan DDos, kami boleh menggunakan kaedah berikut:

Hadkan trafik permintaan

Menggunakan middleware koa-ratelimit, anda boleh mengehadkan kekerapan permintaan IP yang sama .

const Koa = require('koa');
const rateLimit = require('koa-ratelimit');
const app = new Koa();

app.use(
  rateLimit({
    driver: 'memory',
    db: new Map(),
    duration: 60000, // 1分钟限制一次
    errorMessage: '请求次数过于频繁,请稍后再试。',
    id: (ctx) => ctx.ip,
    headers: {
      remaining: 'Rate-Limit-Remaining',
      reset: 'Rate-Limit-Reset',
      total: 'Rate-Limit-Total',
    },
    max: 100, // 一分钟最多请求 100 次
    disableHeader: false,
  })
);
Salin selepas log masuk

Sahkan sumber permintaan

Menggunakan perisian tengah koa-helmet boleh menambah beberapa pengepala keselamatan untuk mengukuhkan keselamatan, termasuk CSP (Dasar Keselamatan Kandungan), kawalan Prafetch DNS, penapisan XSS, dsb. Pada masa yang sama, kami boleh menggunakan perpustakaan pihak ketiga seperti geoip-lite untuk mendapatkan rantau IP sumber permintaan dan menyekat akses berdasarkan rantau tersebut.

const Koa = require('koa');
const helmet = require('koa-helmet');
const geoip = require('geoip-lite');
const app = new Koa();

app.use(helmet({ contentSecurityPolicy: false }));
app.use((ctx, next) => {
  const ip = ctx.request.headers['x-forwarded-for'] || ctx.request.ip;
  const geo = geoip.lookup(ip);
  const allowedCountries = ['CN', 'US', 'JP'];
  if (!geo || allowedCountries.indexOf(geo.country) === -1) {
    ctx.throw(403, 'Access Denied');
  }
  return next();
});
Salin selepas log masuk

Gunakan perkhidmatan perlindungan DDos yang disediakan oleh penyedia perkhidmatan

Gunakan perkhidmatan perlindungan DDos pihak ketiga, seperti platform pecutan keselamatan yang disediakan oleh Alibaba Cloud, untuk mempertahankan secara berkesan daripada serangan DDos berskala besar.

Kekalkan keselamatan sistem

Amalan penyelenggaraan keselamatan tidak seharusnya hanya berhenti pada mencegah serangan DDos, tetapi harus meliputi reka bentuk keselamatan keseluruhan seni bina sistem.

Dalam aplikasi Node.js, terdapat beberapa jenis kerentanan biasa, seperti suntikan kod, skrip silang tapak (XSS), pemalsuan permintaan silang tapak (CSRF), dsb.

Untuk memastikan keselamatan sistem dengan berkesan, kami boleh mengambil langkah berikut:

Gunakan CSP

CSP ialah singkatan Dasar Keselamatan Kandungan Menggunakan CSP boleh menghalang kod dengan berkesan Serangan suntikan, serta beberapa serangan XSS.

Dalam aplikasi Koa, anda boleh menggunakan koa-helmet untuk menetapkan dasar CSP.

const Koa = require('koa');
const helmet = require('koa-helmet');
const app = new Koa();

app.use(
  helmet.contentSecurityPolicy({
    directives: {
      defaultSrc: ["'self'"],
      scriptSrc: ["'self'", "'unsafe-inline'", 'cdn.example.com'],
      styleSrc: ["'self'", "'unsafe-inline'"],
      imgSrc: ["'self'", 'cdn.example.com'],
      connectSrc: [
        "'self'",
        'api.example.com',
        'api.example.net',
        'analytics.google.com',
      ],
      fontSrc: ["'self'", 'cdn.example.com'],
    },
  })
);
Salin selepas log masuk

Dalam contoh ini, kami melarang semua skrip dan gaya kecuali diri kami melalui CSP, sambil melonggarkan nama domain CDN yang berwibawa dan dipercayai serta nama domain Google Analitis. Kami juga boleh menentukan URL melalui atribut reportUri Apabila pelanggaran CSP berlaku, laporan akan dihantar ke URL ini untuk pemprosesan seterusnya.

Menggunakan Helmet

Selain CSP, koa-helmet juga menyediakan banyak pilihan pengepala keselamatan lain, yang boleh meningkatkan keselamatan aplikasi Koa dengan sangat baik.

const Koa = require('koa');
const helmet = require('koa-helmet');
const app = new Koa();

app.use(helmet());
Salin selepas log masuk

Selepas menggunakan perisian tengah topi keledar, kami tidak perlu menetapkan item konfigurasi setiap pengepala keselamatan, tetapi menggunakan item konfigurasi lalai yang dilaraskan. Item konfigurasi lalai ini termasuk kawalan CORS, penapisan XSS, dasar HSTS, kawalan cache HTTP, dll., yang boleh meningkatkan keselamatan aplikasi dengan banyak.

Gunakan koa-usual-bundle

koa-usual-bundle ialah koleksi konfigurasi umum untuk pembangunan keselamatan Node.js, yang mengandungi banyak penyelesaian pencegahan kerentanan biasa.

npm install --save koa-usual-bundle
Salin selepas log masuk

Selepas pemasangan, sebelum memulakan aplikasi Koa, anda perlu memulakannya dengan konfigurasi koa-usual-bundle:

const Koa = require('koa');
const usual = require('koa-usual-bundle');
const app = new Koa();
usual(app);
Salin selepas log masuk

Dalam contoh ini, kami akan menggunakan contoh app biasa dan Koa Digabungkan bersama untuk menambah keselamatan pada aplikasi Koa.

Ringkasan

Dalam persekitaran pengeluaran, keselamatan ialah isu penting untuk aplikasi Node.js. Artikel ini memperkenalkan cara untuk menggunakan aplikasi Koa dengan selamat, termasuk menggunakan HTTPS untuk melindungi data, mencegah serangan DDos, mengambil langkah untuk mengekalkan keselamatan sistem, dsb. Walaupun langkah-langkah ini tidak mudah, dengan mengambil langkah-langkah ini, anda boleh memaksimumkan keselamatan aplikasi anda.

Atas ialah kandungan terperinci penempatan selamat nodejs koa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Terangkan konsep pemuatan malas. Terangkan konsep pemuatan malas. Mar 13, 2025 pm 07:47 PM

Terangkan konsep pemuatan malas.

Apa itu useeffect? Bagaimana anda menggunakannya untuk melakukan kesan sampingan? Apa itu useeffect? Bagaimana anda menggunakannya untuk melakukan kesan sampingan? Mar 19, 2025 pm 03:58 PM

Apa itu useeffect? Bagaimana anda menggunakannya untuk melakukan kesan sampingan?

Bagaimanakah kari bekerja di JavaScript, dan apakah faedahnya? Bagaimanakah kari bekerja di JavaScript, dan apakah faedahnya? Mar 18, 2025 pm 01:45 PM

Bagaimanakah kari bekerja di JavaScript, dan apakah faedahnya?

Bagaimanakah algoritma Rekonsiliasi React berfungsi? Bagaimanakah algoritma Rekonsiliasi React berfungsi? Mar 18, 2025 pm 01:58 PM

Bagaimanakah algoritma Rekonsiliasi React berfungsi?

Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula? Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula? Mar 18, 2025 pm 01:44 PM

Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula?

Bagaimana anda mengelakkan tingkah laku lalai di pengendali acara? Bagaimana anda mengelakkan tingkah laku lalai di pengendali acara? Mar 19, 2025 pm 04:10 PM

Bagaimana anda mengelakkan tingkah laku lalai di pengendali acara?

Apakah kelebihan dan kekurangan komponen terkawal dan tidak terkawal? Apakah kelebihan dan kekurangan komponen terkawal dan tidak terkawal? Mar 19, 2025 pm 04:16 PM

Apakah kelebihan dan kekurangan komponen terkawal dan tidak terkawal?

Apakah useContext? Bagaimana anda menggunakannya untuk berkongsi keadaan antara komponen? Apakah useContext? Bagaimana anda menggunakannya untuk berkongsi keadaan antara komponen? Mar 19, 2025 pm 03:59 PM

Apakah useContext? Bagaimana anda menggunakannya untuk berkongsi keadaan antara komponen?

See all articles