ホームページ > ウェブフロントエンド > フロントエンドQ&A > nodejs koaの安全なデプロイメント

nodejs koaの安全なデプロイメント

WBOY
リリース: 2023-05-27 17:09:09
オリジナル
692 人が閲覧しました

はじめに

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();
});
ログイン後にコピー

サービス プロバイダーが提供する DDos 保護サービスを使用する

Alibaba Cloud が提供するセキュリティ アクセラレーション プラットフォームなどのサードパーティの DDos 保護サービスを使用すると、大規模な DDos 攻撃を効果的に防御できます。

システム セキュリティの維持

セキュリティ メンテナンスの実施は、DDos 攻撃の防止にとどまらず、システム アーキテクチャ全体のセキュリティ設計をカバーする必要があります。

Node.js アプリケーションには、コード インジェクション、クロスサイト スクリプティング攻撃 (XSS)、クロスサイト リクエスト フォージェリ (CSRF) などの一般的なタイプの脆弱性がいくつかあります。

システムのセキュリティを効果的に確保するには、次のような対策を講じることができます:

CSP を使用する

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 に送信されます。

Helmet の使用

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 の使用

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート