PHP で HttpOnly Cookie を使用するように設定するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/36877

質問

クッキーを設定するにはどうすればよいですか PHP apps として HttpOnly cookies?

役に立ちましたか?

解決

  • のために あなたのクッキー, 、この回答を参照してください。
  • のために PHP 独自のセッション Cookie (PHPSESSID, 、デフォルト)、を参照してください。 @リッチーの答え

setcookie() そして setrawcookie() 機能を導入しました httponly PHP 5.2.0 の暗黒時代に戻って、パラメータを使用することで、これが素晴らしく簡単になりました。構文に従って、7 番目のパラメータを true に設定するだけです。

簡潔にするために関数の構文を簡略化

setcookie(    $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )

入力 NULL デフォルトのままにしておきたいパラメータの場合。を設定する必要があるかどうかも検討してください。 secure パラメータ。

古い、低レベルのバージョンを使用することも可能です header() 関数:

header( "Set-Cookie: name=value; httpOnly" );

他のヒント

Apache 上の PHP 独自のセッション Cookie の場合:
これを Apache 設定に追加するか、 .htaccess

<IfModule php5_module>
    php_flag session.cookie_httponly on
</IfModule>

これは、前に呼び出される限り、スクリプト内で設定することもできます。 session_start().

ini_set( 'session.cookie_httponly', 1 );

HttpOnly はクロスサイト スクリプティングを停止しないことに注意してください。代わりに、考えられる 1 つの攻撃を無力化しますが、現時点では IE でのみこれを実行します (FireFox は XmlHttpRequest で HttpOnly Cookie を公開し、Safari はそれをまったく尊重しません)。ぜひ HttpOnly をオンにしてください。ただし、それと引き換えに出力フィルタリングとファズ テストを 1 時間でも省略しないでください。

PHP セッション Cookie は使用しないことに注意してください。 httponly デフォルトでは。

そのためには:

$sess_name = session_name();
if (session_start()) {
    setcookie($sess_name, session_id(), null, '/', null, null, true);
}

ここで注意すべき点がいくつかあります。

  • 電話しなければなりません session_name()前に session_start()
  • これにより、デフォルトのパスが「/」に設定されます。これはオペラに必要ですが、どのPHPセッションCookieもデフォルトでは行われません。
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 

?>

ソース

イリアからの説明はここにあります...5.2だけだけど

PHP 5.2 での httpOnly Cookie フラグのサポート

その記事に記載されているように、以前のバージョンの PHP ではヘッダーを自分で設定できます。

header("Set-Cookie: hidden=value; httpOnly");

set cookie関数で指定できます PHPマニュアルを参照してください

setcookie('Foo','Bar',0,'/', 'www.sample.com'  , FALSE, TRUE);

これをヘッダー ファイルで使用できます。

// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);

これにより、今後のセッション Cookie はすべて httponly を使用するようになります。

  • 更新しました。

php_flag コマンドの正しい構文は次のとおりです。

php_flag  session.cookie_httponly On

そして、サーバーからの最初の応答だけが Cookie を設定していることに注意してください (たとえば、「HttpOnly」ディレクティブが表示されます)。したがって、テストの場合は、テスト要求のたびにブラウザから Cookie を削除します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top