1

クロスドメインリクエストの拒否に関するSOに関するいくつかの質問を読みましたが、すべてクライアント側の保護(同一生成元ポリシー)に依存すると述べています。サーバー側で実行できる保護のレイヤーはありますか?ヘッダー-オリジン、ヘッダー-リファラーに依存する必要がありますか?一部のスパイウェア対策プログラムによってヘッダーリファラーが変更されると言う人もいます。ffにはoriginヘッダーオプションが含まれていると言う人もいれば(しかし含まれている)、chromeには含まれていないと言う人もいます:)。
ヘッダーを変更できることは知っていますが(setrequestheaderメソッドを使用してもリファラーを変更できます)、この問題についてサーバー側で保護を行ったことがある場合は、アイデアを共有してください。

PS:可能性は、各リクエスト(すべてのタイプのリクエスト、データのみを取得するリクエスト、サーバー上のデータを変更するリクエストなど)をトークン化することですが、それはお尻の痛みになります...

PPS:omgはシンクロナイザートークンパターンについてスパムしないでください...私が最初のPSで言ったように、それは解決策になるでしょう、他のアイデアはありますか?

4

2 に答える 2

0

CSRFについて聞いたことがあると思いますか?

CSRFの仕組みとその防止方法の概要は次のとおりです。

誰でもあなたのサイトにページをリクエストできます。同じように、誰でもあなたのサイトに投稿できます。登録フォームがあるとしましょう。フォームをコピーして任意のHTMLページに配置し、JS検証を削除して、無限にスパムを送信することができます。脅威のようですね。

ただし、セッションIDを使用することでこれを防ぐことができます。これは一意の文字列(通常はMD5またはSHA-1)であり、ページをレンダリングする前にPHPのセッション変数に格納されます。このセッションIDは、フォームの非表示の入力フォームにも表示されます。これで、フォームが送信されると、PHPは、フォームとともに送信されたセッションIDが、セッション変数に格納されているセッションIDと一致するかどうかを確認します。有効な場合は続行し、サーバーに保存されているものは再利用されないように無効にされます。

また、一定の時間が経過すると、そのセッションIDは期限切れになります。たとえば、ユーザーが15分を超えてフォームに残っている場合を考えてみましょう。そのフォームの使用は無効になります。新しいセッションIDを取得するには、ページを更新する必要があります


ここで、フォームではなくページリクエストでこれを使用する方法を尋ねるかもしれません。

私はセッションIDをサーバーに送信する2つの方法を知っています。それは、Cookieを使用するか、URLにセッションIDを追加することによって行われます。

Cookieの場合も、同じように機能します。ページがサーバーによって生成された場合、ページはサーバー上にセッションIDを作成し、コピーをCookieとして送信します。次のページのリクエストでは、リクエストのCookieを読み取り、そのセッションIDを取得して、サーバー上のものと比較します。等しい場合は、リクエストが有効である場合は続行します。それ以外の場合は無効です。

Cookieを無効にしている場合は、ページにあるすべてのリンクのURLにセッションIDを追加できます。一部のサイトでは、URLパラメータがsid、などsessidであることに注意してください。それが彼らがそれを渡す方法です。ページ内のすべてのリンクにこのIDが追加されます。リンクをクリックすると、サーバーはURLからそのセッションIDを取得し、それをサーバーと比較するだけです。

かなり長い答え:D

于 2012-04-05T07:34:36.643 に答える
0

市長の質問は、防御したい攻撃の種類は何ですか?

CSRF から保護する場合は、ランダムなセキュリティ トークンを使用してフォームを処理する必要があります。

お気に入り

<input type="hidden" name="token" value="random value generated on server side for each request" />

フォームが送信された後、リクエストからのトークンとサーバー側のセッションに保存されたトークンを比較する必要があります。

他のドメインからのある種のリソースのロードを拒否する場合 (サーバーから Evil.com に画像やスクリプトをロードするなど)、各リソースに同様のトークンを追加できます。

お気に入り

<img src="/images/mysuperimg.png?token=<token>" />

于 2012-04-05T07:10:30.747 に答える