PHP apps
自分のCookieをとして設定するにはどうすればよいHttpOnly cookies
ですか?
11 に答える
Apache での PHP 独自のセッション Cookie の場合:
これを Apache 構成に追加するか、.htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
これは、前に呼び出される限り、スクリプト内で設定することもできますsession_start()
。
ini_set( 'session.cookie_httponly', 1 );
- Cookieについては、この回答を参照してください。
- PHP独自のセッションCookie(
PHPSESSID
デフォルトでは)については、@richieの回答を参照してください。
setcookie()
and関数は、PHP 5.2.0の暗黒時代にsetrawcookie()
ブール型パラメーターを導入し、これを素晴らしく簡単にしました。httponly
構文に従って、7番目のパラメーターをtrueに設定するだけです。
簡潔にするために簡略化された関数構文
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
PHP <8では、NULL
デフォルトのままにしておきたいパラメーターを指定します。
PHP> = 8では、名前付きパラメーターを使用することでメリットが得られます。名前付きパラメータについては、この質問を参照してください。
setcookie( $name, $value, httponly:true )
header()
古い低レベルの関数を使用することもできます。
header( "Set-Cookie: name=value; HttpOnly" );
パラメータを設定する必要があるかどうかも検討することをお勧めしSecure
ます。
httponly
PHP セッション Cookie はデフォルトでは使用されないことに注意してください。
それを行うには:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
ここでいくつかの注意事項があります。
session_name()
事前に電話する必要がありますsession_start()
- また、これはデフォルト パスを '/' に設定します。これは Opera に必要ですが、PHP セッション Cookie もデフォルトでは行いません。
HttpOnly はクロスサイト スクリプティングを停止しないことに注意してください。代わりに、可能性のある 1 つの攻撃を無力化します。現在、これは IE でのみ行われます (FireFox は XmlHttpRequest で HttpOnly Cookie を公開し、Safari はそれをまったく尊重しません)。必ず HttpOnly をオンにしますが、それと引き換えに出力フィルタリングとファズ テストを 1 時間も行わないでください。
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE);
//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
?>
setcookie関数で指定できます。phpマニュアルを参照してください。
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
ここでイリアからの説明...5.2だけですが
その記事で述べられているように、以前のバージョンのPHPではヘッダーを自分で設定できます
header("Set-Cookie: hidden=value; httpOnly");
これをヘッダーファイルで使用できます。
// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
このようにして、今後のすべてのセッション Cookie は httponly を使用します。
- 更新しました。