セキュリティガイドライン
私たちはセキュリティを真剣に考えています。CodeIgniter には、適切なセキュリティプラクティスを強制したり、それを簡単に行えるようにするための多くの機能とテクニックが組み込まれています。
私たちは Open Web Application Security Project (OWASP) を尊重し、可能な限り彼らの推奨事項に従います。
以下は、Webアプリケーションの最も重要な脆弱性を特定する OWASP Top Ten Cheat Sheet から引用したものです。それぞれの脆弱性に対して、簡単な説明、OWASP の推奨事項、そしてその問題に対処するための CodeIgniter の規定を提供します。
A1 インジェクション
インジェクションとは、クライアントからアプリケーションへの入力データ経由で、部分的または完全なデータが不適切に挿入されることです。攻撃ベクトルには、SQL、XML、ORM、コードとバッファオーバーフローが含まれます。
OWASP の推奨事項
プレゼンテーション: 正しいコンテンツタイプ、文字セット、ロケールを設定する
送信: フィールドを検証し、フィードバックを提供する
コントローラー: 入力をサニタイズする。正しい文字セットを使用して入力の正当性を検証する
モデル: パラメータ化されたクエリ
CodeIgniter の規定
InvalidChars フィルター
Validation ライブラリ
HTTP ライブラリ は、入力フィールドのフィルタリング およびコンテンツメタデータを提供します
A2 脆弱な認証とセッション管理
不十分な認証または不適切なセッション管理は、ユーザーが自分に与えられた以上の特権を得る可能性につながります。
OWASP の推奨事項
プレゼンテーション: 認証とロールを検証する。フォームに CSRF トークンを送信する
設計: ビルトインのセッション管理のみを使用する
コントローラー: ユーザー、ロール、CSRF トークンを検証する
モデル: ロールを検証する
ヒント: リクエストガバナーの使用を検討する
CodeIgniter の規定
Session ライブラリ
Security ライブラリは CSRF 検証を提供します
公式の認証および認可フレームワーク CodeIgniter Shield
サードパーティ認証の追加が簡単
A3 クロスサイトスクリプティング (XSS)
あるユーザーが Web サイトにコンテンツを追加でき、そのコンテンツが他のユーザーによって表示されたときに悪意のあるものになる可能性がある、不十分な入力検証。
OWASP の推奨事項
プレゼンテーション: 出力コンテキストに従ってすべてのユーザーデータを出力エンコードする。入力制約を設定する
コントローラー: 入力の正当性を検証する
ヒント: 信頼できるデータのみを処理する。データを HTML エンコードされた状態で DB に保存しない
CodeIgniter の規定
esc()
関数Validation ライブラリ
コンテンツセキュリティポリシー のサポート
A4 安全でない直接オブジェクト参照
安全でない直接オブジェクト参照は、アプリケーションがユーザーが提供した入力に基づいてオブジェクトへの直接アクセスを提供する場合に発生します。この脆弱性の結果、攻撃者は承認をバイパスして、データベースレコードやファイルなどのシステム内のリソースに直接アクセスできます。
OWASP の推奨事項
プレゼンテーション: 内部データを公開しない。ランダム参照マップを使用する
コントローラー: 信頼できるソースまたはランダム参照マップからデータを取得する
モデル: データを更新する前にユーザーのロールを検証する
CodeIgniter の規定
Validation ライブラリ
公式の認証および認可フレームワーク CodeIgniter Shield
サードパーティ認証の追加が簡単
A5 セキュリティの誤った設定
アプリケーションアーキテクチャの不適切な設定は、アーキテクチャ全体のセキュリティを侵害する可能性のあるミスにつながる可能性があります。
OWASP の推奨事項
プレゼンテーション: Web およびアプリケーションサーバーを強化する。HTTP Strict Transport Security を使用する
コントローラー: Web およびアプリケーションサーバーを強化する。XML スタックを保護する
モデル: データベースサーバーを強化する
CodeIgniter の規定
ブートストラップ中のサニティチェック
A6 機密データの露出
機密データは、ネットワーク経由で送信される際に保護する必要があります。このようなデータには、ユーザーの資格情報やクレジットカードが含まれる場合があります。原則として、データが保存時に保護する必要がある場合は、送信時にも保護する必要があります。
OWASP の推奨事項
プレゼンテーション: TLS1.2 を使用する。強力な暗号とハッシュを使用する。キーまたはハッシュをブラウザに送信しない
コントローラー: 強力な暗号とハッシュを使用する
モデル: サーバーとの強力な暗号化通信を義務付ける
CodeIgniter の規定
グローバルセキュアアクセスの設定 (
Config\App::$forceGlobalSecureRequests
)データベース設定 (
encrypt
)
A7 機能レベルのアクセス制御の欠落
機密データは、ネットワーク経由で送信される際に保護する必要があります。このようなデータには、ユーザーの資格情報やクレジットカードが含まれる場合があります。原則として、データが保存時に保護する必要がある場合は、送信時にも保護する必要があります。
OWASP の推奨事項
プレゼンテーション: Web データ以外のデータが Web ルートの外にあることを確認する。ユーザーとロールを検証する。CSRF トークンを送信する
コントローラー: ユーザーとロールを検証する。CSRF トークンを検証する
モデル: ロールを検証する
CodeIgniter の規定
A8 クロスサイトリクエストフォージェリ (CSRF)
CSRF は、エンドユーザーが現在認証されている Web アプリケーションで、望ましくないアクションを実行することを強制する攻撃です。
OWASP の推奨事項
プレゼンテーション: ユーザーとロールを検証する。CSRF トークンを送信する
コントローラー: ユーザーとロールを検証する。CSRF トークンを検証する
モデル: ロールを検証する
CodeIgniter の規定
A9 既知の脆弱性を持つコンポーネントの使用
多くのアプリケーションには、リモート制御を取得したり、データを悪用したりするために悪用される可能性のある既知の脆弱性と既知の攻撃戦略があります。
OWASP の推奨事項
以下は使用しないでください
CodeIgniter の規定
組み込まれたサードパーティライブラリは検証する必要があります
A10 検証されていないリダイレクトと転送
不適切なビジネスロジックや挿入された実行可能なコードにより、ユーザーが不適切にリダイレクトされる可能性があります。
OWASP の推奨事項
プレゼンテーション: URL リダイレクトを使用せず、ランダムな間接参照を使用してください
コントローラー: URL リダイレクトを使用せず、ランダムな間接参照を使用してください
モデル: ロールを検証する
CodeIgniter の規定
HTTP ライブラリ は以下を提供します …