ホームページ > ウェブフロントエンド > jsチュートリアル > Node.js アプリケーションを保護するためのガイド

Node.js アプリケーションを保護するためのガイド

Barbara Streisand
リリース: 2024-11-02 14:12:30
オリジナル
966 人が閲覧しました

A Guide for Securing Your Node.js Application

現在、アプリケーションのセキュリティは非常に重要です。 Node.js アプリケーションのセキュリティを確保するには、データ侵害、不正アクセス、その他の脆弱性から保護するためのさまざまな実践が必要です。この記事では、HTTPS、CORS、データ暗号化などをカバーし、Node.js アプリケーションを保護するための主要なセキュリティ対策について説明します。また、これらのテクニックを効果的に実装する方法を示す実践例も詳しく説明します。

  1. Web アプリケーションでセキュリティが重要である理由
  2. Node.js アプリケーションでの HTTPS の使用
  3. CORS (クロスオリジンリソース共有) について
  4. Node.js でのデータ暗号化
  5. 環境変数を使用して機密データを保護する
  6. JWT による認証と認可
  7. DDoS 攻撃を防ぐためのレート制限の実装
  8. 実際のユースケース: Node.js でのセキュリティのベスト プラクティスの適用

Web アプリケーションでセキュリティが重要な理由

Web アプリケーションを保護するにはセキュリティが不可欠です。

  • ユーザーデータ: ログイン資格情報や個人データなどの機密情報を保護します。
  • システムの整合性: 不正アクセス、データ侵害、インジェクション攻撃を防止します。
  • コンプライアンス: GDPR、HIPAA、PCI-DSS などの業界標準を満たしています。

Node.js アプリケーションでの HTTPS の使用

HTTPS (HyperText Transfer Protocol Secure) は、サーバーとクライアント間で送信されるデータの暗号化を保証します。 Node.js アプリケーションで HTTPS を設定する方法は次のとおりです。

ステップ 1: SSL 証明書を生成する

OpenSSL などのツールを使用して SSL 証明書を生成できます。

openssl req -nodes -new -x509 -keyout server.key -out server.cert
ログイン後にコピー
ログイン後にコピー

ステップ 2: Node.js で HTTPS を有効にする

Node.js で https モジュールを使用します:

const https = require('https');
const fs = require('fs');
const express = require('express');

const app = express();
const options = {
    key: fs.readFileSync('server.key'),
    cert: fs.readFileSync('server.cert')
};

https.createServer(options, app).listen(3000, () => {
    console.log("HTTPS Server running on port 3000");
});
ログイン後にコピー
ログイン後にコピー

CORS (クロスオリジンリソース共有) について

CORS は、Web ページがその Web ページを提供したドメイン以外のドメインにリクエストを行うことを制限します。これは、クロスサイト リクエスト フォージェリ (CSRF) 攻撃を防ぐのに役立ちます。

Express での CORS の実装

cors パッケージを使用して CORS ポリシーを設定できます。

const cors = require('cors');
app.use(cors({ origin: 'https://trusted-domain.com' }));
ログイン後にコピー
ログイン後にコピー

Node.js でのデータ暗号化

機密データを保存または送信する前に暗号化すると、セキュリティがさらに強化されます。 Crypto は、暗号化メソッドを提供する組み込み Node.js モジュールです。

データの暗号化と復号化

openssl req -nodes -new -x509 -keyout server.key -out server.cert
ログイン後にコピー
ログイン後にコピー

環境変数を使用して機密データを保護する

API キーやデータベース認証情報などの機密情報をコードに保存することは危険です。代わりに、dotenv.

のような環境変数とライブラリを使用してください。

例:

  1. dotenv をインストールします。
const https = require('https');
const fs = require('fs');
const express = require('express');

const app = express();
const options = {
    key: fs.readFileSync('server.key'),
    cert: fs.readFileSync('server.cert')
};

https.createServer(options, app).listen(3000, () => {
    console.log("HTTPS Server running on port 3000");
});
ログイン後にコピー
ログイン後にコピー
  1. 機密データを .env に追加します:
const cors = require('cors');
app.use(cors({ origin: 'https://trusted-domain.com' }));
ログイン後にコピー
ログイン後にコピー
  1. コード内の変数にアクセスします:
const crypto = require('crypto');
const algorithm = 'aes-256-cbc';
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);

function encrypt(text) {
    let cipher = crypto.createCipheriv(algorithm, Buffer.from(key), iv);
    let encrypted = cipher.update(text);
    encrypted = Buffer.concat([encrypted, cipher.final()]);
    return { iv: iv.toString('hex'), encryptedData: encrypted.toString('hex') };
}

function decrypt(text) {
    let iv = Buffer.from(text.iv, 'hex');
    let encryptedText = Buffer.from(text.encryptedData, 'hex');
    let decipher = crypto.createDecipheriv(algorithm, Buffer.from(key), iv);
    let decrypted = decipher.update(encryptedText);
    decrypted = Buffer.concat([decrypted, decipher.final()]);
    return decrypted.toString();
}

// Example usage
const encrypted = encrypt("Sensitive data");
console.log("Encrypted:", encrypted);
console.log("Decrypted:", decrypt(encrypted));
ログイン後にコピー

JWT による認証と認可

JWT (JSON Web Token) は、当事者間で情報を送信するためのコンパクトで安全な方法です。 API でのステートレス認証によく使用されます。

JWT認証の設定

  1. jsonwebtoken をインストールします。
   npm install dotenv
ログイン後にコピー
  1. JWT の作成と検証:
   DB_USER=username
   DB_PASS=password
ログイン後にコピー

DDoS 攻撃を防ぐためのレート制限の実装

レート制限は、ユーザーが時間枠内に実行できるリクエストの数を制限し、DDoS 攻撃を軽減します。

エクスプレス レート リミッターの使用

   require('dotenv').config();
   const dbUser = process.env.DB_USER;
   const dbPass = process.env.DB_PASS;
ログイン後にコピー

実際のユースケース: Node.js でのセキュリティのベスト プラクティスの適用

セキュリティが最優先されるオンライン バンキング アプリケーションを考えてみましょう。これまで説明してきたプラクティスを実装する方法は次のとおりです:

  1. HTTPS: すべてのクライアント/サーバー通信を暗号化して機密データを保護します。
  2. CORS: CSRF を軽減するために、信頼できるドメインからのリクエストを制限します。
  3. 暗号化: 個人データなどの機密情報を暗号化します。
  4. 環境変数: すべての認証情報と機密情報を安全に保存します。
  5. JWT 認証: 安全なステートレス認証のために JWT トークンを発行します。
  6. レート制限: リクエストを制限することで、DDoS 攻撃からエンドポイントを保護します。

これらのベスト プラクティスを実装することで、一般的な脅威に対してアプリケーションの安全性を確保できます。

結論

Node.js アプリケーションのセキュリティ保護は継続的なプロセスです。 HTTPS の使用、CORS の設定、データの暗号化、環境変数の使用、JWT 認証の実装、レート制限の追加など、ここで取り上げる手法は、アプリを不正アクセスやデータ侵害から保護するために不可欠です。これらのメソッドを組み込むことで、Node.js アプリケーションの堅牢なセキュリティ基盤を作成できます。

以上がNode.js アプリケーションを保護するためのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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