はじめに
Node.js は、非常に人気のあるイベント駆動型 JavaScript 実行環境であり、効率性、スケーラビリティ、クロスプラットフォームが特徴です。 Koa は、ES6 ジェネレーターを使用して非同期コードの記述をより簡潔にする軽量の Node.js Web フレームワークです。実際のアプリケーションではNode.jsアプリケーションをデプロイする必要がある場合が多いですが、この記事ではKoaアプリケーションを安全にデプロイする方法を詳しく紹介します。
HTTPS
実稼働環境では、データのセキュリティを確保するために HTTPS プロトコルを使用する必要があります。したがって、Koa アプリケーションをデプロイする場合は、まずアプリケーションで HTTPS をサポートする必要があります。
まず、ドメイン名の証明書が必要です。Let's Encrypt を使用して無料の HTTPS 証明書を実装できます。具体的な手順については、この記事を参照してください: [Let's Encrypt を使用して Node.js アプリケーションの HTTPS を無料で有効にする](https://github.com/chemdemo/chemdemo.github.io/issues/11)。証明書のアプリケーションが完了したら、次のコードをアプリケーション起動スクリプトに追加する必要があります:
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'); });
ここで、/etc/ssl/example.com.key
は秘密キー ファイルのパスです。証明書の /etc/ssl/example.com.key
は、証明書の公開鍵ファイルのパスです。 https.createServer
メソッドは、証明書構成に基づいて HTTPS サーバーを作成できます。
DDos 攻撃の防止
DDos (分散型サービス拒否) 攻撃はネットワーク攻撃の一般的な手段であり、攻撃者はさまざまな方法を使用してサーバーに大量のリクエストを送信し、サーバーが利用できなくなるために使用します。
DDos 攻撃を防ぐために、次の方法を使用できます。
ミドルウェア koa-ratelimit を使用して、同じ IP のリクエスト頻度を制限します。 。
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, }) );
koa-helmet ミドルウェアを使用すると、CSP (コンテンツ セキュリティ ポリシー)、DNS プリフェッチ コントロール、XSS フィルタリングなどのセキュリティを強化するセキュリティ ヘッダーを追加できます。同時に、geoip-lite などのサードパーティ ライブラリを使用して、リクエスト元の IP リージョンを取得し、リージョンに基づいてアクセスを制限できます。
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(); });
Alibaba Cloud が提供するセキュリティ アクセラレーション プラットフォームなどのサードパーティの DDos 保護サービスを使用すると、大規模な DDos 攻撃を効果的に防御できます。
システム セキュリティの維持
セキュリティ メンテナンスの実施は、DDos 攻撃の防止にとどまらず、システム アーキテクチャ全体のセキュリティ設計をカバーする必要があります。
Node.js アプリケーションには、コード インジェクション、クロスサイト スクリプティング攻撃 (XSS)、クロスサイト リクエスト フォージェリ (CSRF) などの一般的なタイプの脆弱性がいくつかあります。
システムのセキュリティを効果的に確保するには、次のような対策を講じることができます:
CSP はコンテンツ セキュリティ ポリシーの略で、CSP を使用することでコードの侵入を効果的に防止できます。インジェクション攻撃と一部の XSS 攻撃。
Koa アプリケーションでは、koa-helmet を使用して 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'], }, }) );
この例では、CSP を通じて自分自身を除くすべてのスクリプトとスタイルを禁止し、同時に権威と信頼できる CDN ドメイン名と Google Analytics ドメイン名を緩和します。 reportUri
属性を使用して URL を指定することもできます。CSP 違反が発生すると、後続の処理のためにレポートがこの URL に送信されます。
CSP に加えて、koa-helmet は、Koa アプリケーションのセキュリティを大幅に向上できる他の多くのセキュリティ ヘッダー オプションも提供します。
const Koa = require('koa'); const helmet = require('koa-helmet'); const app = new Koa(); app.use(helmet());
ヘルメットミドルウェアを使用した後は、各セキュリティヘッダーの設定項目を設定する必要はなく、調整されたデフォルトの設定項目を使用します。このデフォルト構成項目には、CORS 制御、XSS フィルタリング、HSTS ポリシー、HTTP キャッシュ制御などが含まれており、アプリケーションのセキュリティを大幅に向上させることができます。
koa-usual-bundle は、Node.js セキュリティ開発のための一般的な構成コレクションであり、多くの一般的な脆弱性防止ソリューションが含まれています。
npm install --save koa-usual-bundle
インストール後、Koa アプリケーションを開始する前に、koa-usual-bundle の構成で初期化する必要があります:
const Koa = require('koa'); const usual = require('koa-usual-bundle'); const app = new Koa(); usual(app);
この例では、app を使用します。通常のインスタンスと Koa
インスタンスは、Koa アプリケーションにセキュリティを追加するために結合されます。
概要
運用環境では、セキュリティは Node.js アプリケーションにとって重要な問題です。この記事では、HTTPS を使用したデータの保護、DDos 攻撃の防止、システム セキュリティを維持するための対策など、Koa アプリケーションを安全に展開する方法を紹介します。これらの対策は確実ではありませんが、これらの対策を講じることにより、アプリケーションのセキュリティを最大限に高めることができます。
以上がnodejs koaの安全なデプロイメントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。