PHPでHttpOnly Cookieを使用するための設定方法


93

どのように私は私にクッキーを設定することができますPHP appsようにHttpOnly cookies


stackoverflow.com/questions/528405/…ブラウザのサポート情報があります。
Kzqai

2
@Tchalvakいいえ、現在の回答はまだ信頼できます。PHPでのHTTPのみのCookie設定に関しては、2008年以降何も変更されていません。どのブラウザーがHTTPのみのCookieをサポートするかは、別の質問であり、別の答えがあります。
lanzz 2012年

あなたは使用すること$cookie->setHttpOnly(true);github.com/delight-im/PHP-Cookie
CAW

回答:


92
  • 以下のためにあなたのクッキー、この回答を参照してください。
  • ためにPHPの独自のセッションクッキー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" );

PHP 8の名前付きパラメーターを使用するset_cookieと、他のパラメーターを設定する必要がない場合、最終的に呼び出しをより簡潔にすることができます。例えばset_cookie($name, $value, httponly: true)
シグモラル

120

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

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

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

ini_set( 'session.cookie_httponly', 1 );

9
これはサーバー全体に配置するのに(セキュリティの観点から)良いことですが、代わりにに追加されますphp.ini
Anthony Hatzopoulos

10
代わりにphp_flagを使用する必要があることに注意してください:「ブール値を設定するためにphp_valueを使用しないでください。代わりにphp_flagを使用する必要があります。」php.net/manual/en/configuration.changes.php
Ondrej Machulda 2013年

@OndrejMachuldaに変更php_valuephp_flagても機能しません。私はちょうど..私のサーバー上でそれを試してみました
ネイト

6
@Nate:に変更するphp_flag場合は、値も変更する必要があります- onまたはにoff-マニュアルを参照してください。
Ondrej Machulda 2013

14

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

それを行うには:

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

ここで注目すべきいくつかの項目:

  • session_name() 前に電話する必要がありますsession_start()
  • これにより、デフォルトパスが「/」に設定されます。これはOperaに必要ですが、デフォルトではPHPセッションCookieは行いません。

12
php.net/manual/en/function.session-set-cookie-params.phpカスタムコーディングの代わりに、上記のPHP関数を介して自動的に実行できます。
Ryaner

13

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


13
この状況は、2008年以降、変わった可能性があります。ここでは、より多くの電流/更新リストは、次のとおりです。stackoverflow.com/questions/528405/...
Kzqai

7
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

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

?>

ソース




4

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

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

これにより、今後のすべてのセッションCookieでhttponlyが使用されます。

  • 更新しました。

2
PHP> 5.3では、FYI session.use_only_cookiesがデフォルトでオンになっています
Nic Cottrell

1
そして正しいのは、「将来のすべてのセッション Cookie」がカスタムのものではなくhttponlyを使用することです
qdev

2

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

php_flag  session.cookie_httponly On

また、サーバーからの最初の応答でCookieとここに設定するだけでよいことに注意してください(たとえば、 "HttpOnly"ディレクティブが表示されます。テストでは、すべてのテストリクエストの後にブラウザーからCookieを削除します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.