PHPでCookieを設定する際の一般的なエラー

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を見つけるために残ります。これは実際には非常に簡単に実装できます。

しかし、他のブラウザはどうですか?
Firefox12.0httpOnlyワイルドカード
サファリ5.1.5httpOnlyワイルドカード
オペラ11.62httpOnlyワイルドカード


構造体を使用して
 setcookie('foo','bar1'); 

そして
 header('Set-cookie: foo1=bar11'); 

クライアントがInternet Explorer(8-9)を使用している場合、 このサブドメインのすべてのサブドメインにCookieを配置します

これを覚えて!

Source: https://habr.com/ru/post/J143276/


All Articles