セキュリティガイドライン

私たちはセキュリティを真剣に考えています。CodeIgniter には、適切なセキュリティプラクティスを強制したり、それを簡単に行えるようにするための多くの機能とテクニックが組み込まれています。

私たちは Open Web Application Security Project (OWASP) を尊重し、可能な限り彼らの推奨事項に従います。

以下は、Webアプリケーションの最も重要な脆弱性を特定する OWASP Top Ten Cheat Sheet から引用したものです。それぞれの脆弱性に対して、簡単な説明、OWASP の推奨事項、そしてその問題に対処するための CodeIgniter の規定を提供します。

A1 インジェクション

インジェクションとは、クライアントからアプリケーションへの入力データ経由で、部分的または完全なデータが不適切に挿入されることです。攻撃ベクトルには、SQL、XML、ORM、コードとバッファオーバーフローが含まれます。

OWASP の推奨事項

  • プレゼンテーション: 正しいコンテンツタイプ、文字セット、ロケールを設定する

  • 送信: フィールドを検証し、フィードバックを提供する

  • コントローラー: 入力をサニタイズする。正しい文字セットを使用して入力の正当性を検証する

  • モデル: パラメータ化されたクエリ

CodeIgniter の規定

A2 脆弱な認証とセッション管理

不十分な認証または不適切なセッション管理は、ユーザーが自分に与えられた以上の特権を得る可能性につながります。

OWASP の推奨事項

  • プレゼンテーション: 認証とロールを検証する。フォームに CSRF トークンを送信する

  • 設計: ビルトインのセッション管理のみを使用する

  • コントローラー: ユーザー、ロール、CSRF トークンを検証する

  • モデル: ロールを検証する

  • ヒント: リクエストガバナーの使用を検討する

CodeIgniter の規定

  • Session ライブラリ

  • Security ライブラリは CSRF 検証を提供します

  • 公式の認証および認可フレームワーク CodeIgniter Shield

  • サードパーティ認証の追加が簡単

A3 クロスサイトスクリプティング (XSS)

あるユーザーが Web サイトにコンテンツを追加でき、そのコンテンツが他のユーザーによって表示されたときに悪意のあるものになる可能性がある、不十分な入力検証。

OWASP の推奨事項

  • プレゼンテーション: 出力コンテキストに従ってすべてのユーザーデータを出力エンコードする。入力制約を設定する

  • コントローラー: 入力の正当性を検証する

  • ヒント: 信頼できるデータのみを処理する。データを HTML エンコードされた状態で DB に保存しない

CodeIgniter の規定

A4 安全でない直接オブジェクト参照

安全でない直接オブジェクト参照は、アプリケーションがユーザーが提供した入力に基づいてオブジェクトへの直接アクセスを提供する場合に発生します。この脆弱性の結果、攻撃者は承認をバイパスして、データベースレコードやファイルなどのシステム内のリソースに直接アクセスできます。

OWASP の推奨事項

  • プレゼンテーション: 内部データを公開しない。ランダム参照マップを使用する

  • コントローラー: 信頼できるソースまたはランダム参照マップからデータを取得する

  • モデル: データを更新する前にユーザーのロールを検証する

CodeIgniter の規定

  • Validation ライブラリ

  • 公式の認証および認可フレームワーク CodeIgniter Shield

  • サードパーティ認証の追加が簡単

A5 セキュリティの誤った設定

アプリケーションアーキテクチャの不適切な設定は、アーキテクチャ全体のセキュリティを侵害する可能性のあるミスにつながる可能性があります。

OWASP の推奨事項

  • プレゼンテーション: Web およびアプリケーションサーバーを強化する。HTTP Strict Transport Security を使用する

  • コントローラー: Web およびアプリケーションサーバーを強化する。XML スタックを保護する

  • モデル: データベースサーバーを強化する

CodeIgniter の規定

  • ブートストラップ中のサニティチェック

A6 機密データの露出

機密データは、ネットワーク経由で送信される際に保護する必要があります。このようなデータには、ユーザーの資格情報やクレジットカードが含まれる場合があります。原則として、データが保存時に保護する必要がある場合は、送信時にも保護する必要があります。

OWASP の推奨事項

  • プレゼンテーション: TLS1.2 を使用する。強力な暗号とハッシュを使用する。キーまたはハッシュをブラウザに送信しない

  • コントローラー: 強力な暗号とハッシュを使用する

  • モデル: サーバーとの強力な暗号化通信を義務付ける

CodeIgniter の規定

A7 機能レベルのアクセス制御の欠落

機密データは、ネットワーク経由で送信される際に保護する必要があります。このようなデータには、ユーザーの資格情報やクレジットカードが含まれる場合があります。原則として、データが保存時に保護する必要がある場合は、送信時にも保護する必要があります。

OWASP の推奨事項

  • プレゼンテーション: Web データ以外のデータが Web ルートの外にあることを確認する。ユーザーとロールを検証する。CSRF トークンを送信する

  • コントローラー: ユーザーとロールを検証する。CSRF トークンを検証する

  • モデル: ロールを検証する

CodeIgniter の規定

  • アプリケーションとシステムが外部にある Public フォルダー

  • Security ライブラリは、CSRF 検証 を提供します

A8 クロスサイトリクエストフォージェリ (CSRF)

CSRF は、エンドユーザーが現在認証されている Web アプリケーションで、望ましくないアクションを実行することを強制する攻撃です。

OWASP の推奨事項

  • プレゼンテーション: ユーザーとロールを検証する。CSRF トークンを送信する

  • コントローラー: ユーザーとロールを検証する。CSRF トークンを検証する

  • モデル: ロールを検証する

CodeIgniter の規定

A9 既知の脆弱性を持つコンポーネントの使用

多くのアプリケーションには、リモート制御を取得したり、データを悪用したりするために悪用される可能性のある既知の脆弱性と既知の攻撃戦略があります。

OWASP の推奨事項

  • 以下は使用しないでください

CodeIgniter の規定

  • 組み込まれたサードパーティライブラリは検証する必要があります

A10 検証されていないリダイレクトと転送

不適切なビジネスロジックや挿入された実行可能なコードにより、ユーザーが不適切にリダイレクトされる可能性があります。

OWASP の推奨事項

  • プレゼンテーション: URL リダイレクトを使用せず、ランダムな間接参照を使用してください

  • コントローラー: URL リダイレクトを使用せず、ランダムな間接参照を使用してください

  • モデル: ロールを検証する

CodeIgniter の規定