セキュリティに関する簡単で基本的なヒントを開発者向けに提供することを目的としています。セキュリティガイドで取り上げられている問題を補完、増補、強調しています。フレームワークは、多くの単調な作業から開発者を解放し、複雑なタスクを迅速かつ容易に実行できるようにするための手段を提供します。内部構造に不慣れな新しい開発者には、アプリケーションの基本的な側面を保護するための一連の基本ガイドラインが必要となることが予想されます。このドキュメントのねらいは、このような指針を提供することです。いう関数を備えています。システムコマンドを呼び出す方法が複数あります。ベースのアプリケーションでこれらを使用するときには細心の注意を払う必要があります。通常は、使用すべきではありません。使用する必要がある場合は、入力可能値のホワイトリストを使用して、あらゆる入力をできるだけ入念に検証します。Guide」にインジェクションに関するセクションがあります。Injection」から辿ることができます。ともに使用されますが、柔軟性があり、他のデータソースでも使用できます。モデルに対するメソッドの使用を通じて、データのクエリが実行されます。インジェクションに対する防御が追加設定なしで適用されます。インジェクションを可能にしてしまうコードが作成される場合もあります。パラメーターがエスケープされていないため、ステートメントへのインジェクションが可能です。この種のステートメントを構築する場合、次のようなイディオムを使うべきです。ステートメントを構築しないよう注意してください。インジェクションに関する広範な情報を保有しています。対する防御が既定の動作となっています。ビューへの文字列データの表示時、文字列データはブラウザーに送り返される前にエスケープされます。これはとても有用ですが、よくあるケースとして、開発者が、リッチテキストの編集を可能にするためなどの目的で、この保護をバイパスすることがあります。次のように記述したくなります。潜在的な標的になります。ついても、一般に広まっている誤解があります。メカニズムに関する詳細な説明があります。文字列の出力の準備方法を変更するその他のタグも、同様の問題を発生させます。タグは拒否することを検討してください。コンテンツを含む入力の受け入れを防止するのに役立ちます。実行を禁止するコンテンツセキュリティポリシーの導入を検討してください。メソッドの使用を検討します。このメソッドは不備があることが何度も判明しているため、完全なソリューションとはなりません。始まるリンクが含まれている場合、生成されたリンクをユーザーがクリックすると、コンテンツが実行されます。関する一般情報を提供しています。ベースのセッションストアを使用します。これは、特に設定を変更しない限り、セッションはサーバー上で期限切れにならないことを意味します。既定のアプリケーションは、再生攻撃に対して脆弱である可能性があることになります。これは、センシティブな情報はセッションに含めるべきではない、ということも意味します。ベストプラクティスは、データベースのセッションを使用することです。セッション管理に関するチートシート」があります。それ自体では認証機能を提供しません。ライブラリを活用して認証機能を実装しています。認証を有効にするには、単にコントローラーで次のように指定します。:authenticate_user他の方法と同様に、これは例外をサポートしています。最低文字数は次のファイルで変更できます。8..128複雑性を強制する方法はいくつかあります。ユーザーモデルに検証を導入することです。認証に関するチートシート」があります。これは、パスがしばしば直観的で推測可能であることを意味します。ユーザーが別のユーザーに属するデータへのアクセスやデータの変更を試みようとするのを阻止するには、アクションを明確に制御することが重要です。アプリケーションのゲートの外には、そのような組み込みの保護機能はありません。手動により、コントローラーレベルでこの制御を行うことは可能です。リソースベースのアクセス制御ライブラリを使用してこの制御を行うことも可能であり、おそらくこちらの方法を検討するのが良いでしょう。この方法により、データベースオブジェクトに対するすべての操作が、アプリケーションのビジネスロジックによって認可されるようになります。ページには、このクラスの脆弱性に関する一般情報があります。対する特別なサポートが組み込まれています。見つけて、次のようなディレクティブを探します。protect_from_forgeryこの種の制御の構文には、例外を追加するための方法が含まれています。その他の理由で役立つことがありますが、その必要性をよく検討して、意識して組み込む必要があります。防御を提供しないことにも注意してください。ついて説明しています。以前のプロジェクトやアップグレードされたプロジェクトでは、この問題について理解し、変更可能とされている属性以外は公開されないようにすることが重要です。モデルの操作時、プログラマーが次のように明示的に指示しない限り、ポストされたフォームからモデルの属性にアクセスすることはできません。属性がアクセス可能である場合、次のことが可能になることがあります。host:port/projectsアクセス可能な属性はどれか、そして実際にアクセス可能にする必要があるか、を確認してください。使用している場合は、次の方法で必ず属性のホワイトリストを作成する必要があります。それぞれ使用できます。アプリケーションには、クライアントが提供したデータに基づいてユーザーを動的にリダイレクトする機能が必要になります。挿入されなければなりません。リダイレクトされます。リダイレクトされます。この機能に関連するセキュリティの問題は、組織の信頼されたブランドを使ってユーザーを有害なサイトに誘導するフィッシング攻撃の存在です。オプションを使用することです。設定すると、本質的に、あらゆるホスト情報が削除されます。引数の一部でなければなりません。引数がハッシュテーブルでない場合、このオプションを渡すことはできません。ライブラリを使用してホストを取得し、ホスト値を正規表現パターンと照合することは、理にかなっています。このような正規表現は、少なくともアンカーを含んでいなければなりません。なければ、攻撃者が検証ルーチンをバイパスする可能性が高まります。つながる可能性があります。制限するか、特定のサイトを定義するか、またはキーとその値とをマップすることです。メソッドを呼び出すことによって、コントローラーのアクションとビューで、どのビューまたはその一部をレンダリングするかを動的に決定することができます。管理ページなどの任意のビューをアプリケーションがレンダリングするように、操作されてしまう可能性があります。レンダリングするビューをユーザー入力に基づいて決定する場合は、注意が必要です。ビューの名前やパスの中でユーザー入力を使用することは、できるだけ避けてください。(CORS)ときには、別のドメインとリソースを共有する必要が生じることがあります。リクエストを介して別のドメインにデータを送信するファイルアップロード機能などのリソースがあります。ブラウザーが従う同一生成元の規則を曲げなければなりません。コンストラクトを使用する場合には、次のことが適用されます。ヘッダーを設定する必要があります。リクエストが送信されるためです。リクエストが送信されます。ここでも、トランザクションが成功として表示されるためには、ヘッダーが設定されていなければなりません。コンストラクトを使用する場合:リクエストの送信後、レスポンスを受信すると、ブラウザーはレスポンスヘッダーを調べて、レスポンスが処理可能かどうか、また処理すべきかどうかを確認します。オブジェクトにアクセスします。これは、ほぼすべてのクラスのほとんどのヘッダーに有効です。