CSRFとは
ウィキペディアから取り除かれただけではない基本的な定義が必要です。
SQLインジェクション、XSS、Cookieポイズニングについては理解していますが、これについては思いとどまることができません。
私はこのCSRFを自動的に防ぐコンポーネントを持つフレームワーク CakePHP を使用しています。ただし、jQueryを使用してフィールドの値を変更するなど、フォームに対して何かをするときはいつでも。または、 ploadify のようなFlashプラグインで動作するAjaxをいくつか含めると、CSRFを無効にする必要があります。
SOは、そのような要素がフォームに含まれている場合、原則としてどのようにしてCSRFを防ぐのですか?
CSRF(Cross-Site Request Forgery)は、基本的には悪意のある人物のブラウザをだまして、悪意のある人物に代わってWebサイトで機能を実行させるものです。
ここに例があります:
- 良いユーザーがあなたのウェブサイトにログインし、有効なセッションを取得します
- 悪質なユーザーが悪意のあるサイトへのリンクをたどるように仕向ける
- 悪意のあるサイトには、あなたのウェブサイトに投稿する改ざんされたデータを含むフォームが含まれています(ただし、クライアント側から送信されているため、あなたのサイトはそれが良いユーザーからのものであると考えています)
- 次に、あなたのサイトは、良いユーザーがフォームを送信し、アクションを処理することを確認します。
それをコンテキストに入れましょう:
- 良いユーザーはあなたのウェブサイトの管理者です。
管理パネルから、優れたユーザーは次のようなフォームに入力してユーザーを追加できます。
<form action="/new_user.php" name="myform" method="POST"> <input type="text" name="new_username"> <input type="password" name="new_password"> <input type="Submit"> </form>
良いユーザーは、次のJavaScriptを含む悪意のあるサイトへのリンクをたどります。
<form action="http://www.yoursite.com/new_user.php" name="myform" method="POST"> <input type="hidden" name="new_username" value="MaliciousHax0r"> <input type="hidden" name="new_password" value="MaliciousPass"> </form> <script type="text/javascript"> document.myform.submit(); </script>
これで、アプリケーションは、悪いユーザーに代わって、良いユーザーが送信したリクエストを受け取ります。それはたまたまあなたのウェブサイトにログインしているグッドユーザーから発信されたので、すべてが順調であり、あなたのウェブサイトがリクエストを処理します。
ここで、これは単純な例であり、Goodユーザーは送信が発生して赤いフラグを立てる必要があることを覚えておいてください。ただし、JavaScriptでXMLHttpRequest()などのやや複雑なメソッドを使用すると、Goodユーザーには通知されない/不明になります。
悪意のあるユーザーがシステムのアカウントを取得しました。
CSRFを排除する方法:
- トリックは、各リクエストに対して生成されるランダムな値を持つ各フォームにトークンを追加することです。
- フォームが送信されると、アプリケーションはトークンが渡されたことを確認し、フォームが読み込まれたときに生成されたランダムなトークンと一致します。
悪意のあるサイトはこのトークンにアクセスできないため、必要な範囲を提供できず、フォームの送信が処理されません。
CakePHPでCSRF保護を無効にせずに他のツールを機能させる方法:
知りません。 CSRF保護、CakePHP、およびその他のアドオンのドキュメントを確認してください。
これらのアドオンを使用することがCSRF保護の損失に値するかどうかを質問し、代替ソリューションを検討してください。
CSRFリソース:
https://www.fortify.com/vulncat/en/vulncat/javascript/csrf.html