PHP で HttpOnly Cookie を使用するように設定するにはどうすればよいですか
質問
クッキーを設定するにはどうすればよいですか 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 を削除します。