TypeScript上級

上級 TypeScriptで学ぶセキュリティ基礎|練習問題編

導入

近年、ウェブアプリケーションのセキュリティがますます重要視されています。特に、データの取り扱いやユーザーのプライバシー保護に関しては、開発者が意識しておくべきポイントが多く存在します。この記事では、TypeScriptを用いた具体的なセキュリティの実装例を通じて、セキュリティ基礎を学びます。

教科書レベルの解説(セキュリティ基礎)

重要な概念の整理

アプリケーションのセキュリティには、認証、認可、データの暗号化など、さまざまな要素が含まれます。特に、ユーザーからの入力を適切に扱うことは、セキュリティの観点から非常に重要です。ここでは、SQLインジェクションを防ぐための対策に焦点を当てます。

コード例(TypeScript)


import { Pool } from 'pg';

const pool = new Pool({
  user: 'user',
  host: 'localhost',
  database: 'mydb',
  password: 'password',
  port: 5432,
});

async function getUserById(userId: number) {
  const query = 'SELECT * FROM users WHERE id = $1';
  const values = [userId];
  
  const res = await pool.query(query, values);
  return res.rows[0];
}

コードの行ごとの解説

  1. import { Pool } from ‘pg’;
    PostgreSQL用のクライアントライブラリをインポートします。
  2. const pool = new Pool(…);
    データベースへの接続プールを作成します。接続情報は環境に応じて設定します。
  3. async function getUserById(userId: number) {
    ユーザーIDを引数に取り、非同期関数を定義します。
  4. const query = ‘SELECT * FROM users WHERE id = $1’;
    SQLクエリを定義します。プレースホルダーを使用することで、SQLインジェクションを防ぎます。
  5. const values = [userId];
    クエリに渡す値を配列に格納します。
  6. const res = await pool.query(query, values);
    クエリを実行し、結果を取得します。
  7. return res.rows[0];
    取得したユーザー情報を返します。

練習問題編

以下の練習問題に挑戦して、セキュリティの理解を深めてください。

  1. SQLインジェクションを防ぐための他の手法を挙げてください。
    模範解答: ORMの使用、ホワイトリスト方式の入力検証、ストアドプロシージャの利用など。
  2. TypeScriptでユーザーのパスワードを安全に保存する方法は何ですか?
    模範解答: bcryptなどのハッシュ化ライブラリを使用して、パスワードをハッシュ化して保存する。
  3. セキュリティにおけるCORSの役割について説明してください。
    模範解答: CORSは、異なるオリジン間でのリソース共有を制御し、悪意のあるリクエストを防ぐための仕組み。
  4. ユーザーの入力を検証する際に注意すべき点は何ですか?
    模範解答: 入力の型、長さ、範囲、フォーマットを検証し、サニタイズを行うことが重要。

まとめ

  • SQLインジェクション対策としてプレースホルダーを使用することが効果的です。
  • ユーザーのパスワードはハッシュ化して保存し、平文で保存しないことが基本です。
  • セキュリティ対策は、アプリケーション開発の初期段階から組み込むことが望ましいです。