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'); });
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:
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, }) );
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(); });
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:
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'], }, }) );
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.
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());
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.
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
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);
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!