COOKIE値を設定するときに1つの機能を共有したいと思いますが、これはWeb開発者によって忘れられがちです。
2009〜2011年の脆弱性についてWebアプリケーションを調査する私の実践では、このエラーはPHPで書かれたWebアプリケーションの87%で発生しました。
このインジケータを何らかの形で減らすために、私はこのテキストを書くことにしました。
httpOnlyフラグについてでさえありませんが、その使用はそれほど重要ではなく、必須です。
コード例を考えてみましょう:
<?php setcookie('foo','bar1'); header('Set-cookie: foo1=bar11'); ?>
このコードは明らかに、fooとfoo1という名前の2つのCookie値を設定します。
今、主な質問は
どのドメインとどのフラグに対するものですか?
元のソースであるWebサーバーのHTTPレスポンスを見てみましょう。
ご覧のとおり、サーバーはドメインについてもフラグについても何も言っていません。
次に、質問は別のプレーンに移動し
ます -
ブラウザはそのようなヘッダーに対してどのドメインとフラグを選択しますか?Chrome(現在のバージョン18.0.1025.168)の場合、すべてが適切であり、ドメインはリクエストの送信元とまったく同じになります。 私の例では、foo.bar.com:
すべてがとても良ければ、おそらくここにテキストはないでしょう...
Internet Explorerを確認してください。 彼のCookieを表示するための美しいプラグインがわからないので、foo.comドメインのcookieを置き、bar.foo.comドメインのdocument.cookieを表示します。
これはとても悲しいです。 一方、面白い。
サーバーのHTTP応答の受信時
Set-cookie: foo=bar
Internet Explorerは、すべてのサブドメインにfoo = barを設定します。つまり、httpOnlyなどのフラグなしの例では* .foo.comです。監査を実行する際に私がしばしば果たすべき役割である攻撃者は、ターゲットホストのサブドメインでXSSを見つけるために残ります。これは実際には非常に簡単に実装できます。
しかし、他のブラウザはどうですか?
Firefox | 12.0 | httpOnly | ワイルドカード |
サファリ | 5.1.5 | httpOnly | ワイルドカード |
オペラ | 11.62 | httpOnly | ワイルドカード |
構造体を使用して
setcookie('foo','bar1');
そして
header('Set-cookie: foo1=bar11');
クライアントがInternet Explorer(8-9)を使用している場合、
このサブドメインのすべてのサブドメインにCookieを配置します 。
これを覚えて!