Bagaimana cara mengatur cookie di PHP apps
sebagai saya HttpOnly cookies
?
$cookie->setHttpOnly(true);
dengan github.com/delight-im/PHP-Cookie
Bagaimana cara mengatur cookie di PHP apps
sebagai saya HttpOnly cookies
?
$cookie->setHttpOnly(true);
dengan github.com/delight-im/PHP-Cookie
Jawaban:
PHPSESSID
, secara default), lihat jawaban @ richieFungsi setcookie()
dan setrawcookie()
, memperkenalkan httponly
parameter, kembali ke masa kegelapan PHP 5.2.0, membuat ini bagus dan mudah. Cukup setel parameter ke-7 menjadi true, sesuai sintaksnya
Sintaks fungsi disederhanakan agar singkat
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
Masukkan NULL
untuk parameter yang Anda ingin tetap sebagai default. Anda mungkin juga ingin mempertimbangkan apakah Anda harus mengatur secure
parameter.
Bisa juga menggunakan fungsi yang lebih lama, header()
fungsi tingkat lebih rendah :
header( "Set-Cookie: name=value; httpOnly" );
set_cookie
panggilan tidak terlalu bertele-tele jika kita tidak perlu mengatur parameter lainnya. Misalnya set_cookie($name, $value, httponly: true)
.
Untuk cookie sesi PHP sendiri di Apache:
tambahkan ini ke konfigurasi Apache atau.htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Ini juga dapat diatur dalam skrip, asalkan dipanggil sebelumnya session_start()
.
ini_set( 'session.cookie_httponly', 1 );
php.ini
.
php_value
ke php_flag
tidak berhasil. Saya baru saja mencobanya di server saya ..
php_flag
, Anda juga harus mengubah nilainya - ke salah satu on
atau off
- lihat manual.
Perhatikan bahwa cookie sesi PHP tidak digunakan httponly
secara default.
Untuk melakukannya:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
Beberapa item catatan di sini:
session_name()
sebelumnyasession_start()
Ketahuilah bahwa HttpOnly tidak menghentikan pembuatan skrip lintas situs; sebaliknya, ia menetralkan satu kemungkinan serangan, dan saat ini melakukannya hanya di IE (FireFox mengekspos cookie HttpOnly di XmlHttpRequest, dan Safari tidak menghormatinya sama sekali). Dengan segala cara, aktifkan HttpOnly, tetapi jangan hentikan bahkan satu jam pemfilteran output dan pengujian fuzz sebagai gantinya.
Penjelasan di sini dari Ilia ... 5.2 saja
httpOnly cookie flag support di PHP 5.2
Seperti yang dinyatakan dalam artikel tersebut, Anda dapat mengatur sendiri header di versi PHP sebelumnya
header("Set-Cookie: hidden=value; httpOnly");
Anda dapat menentukannya dalam fungsi set cookie, lihat manual php
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
Anda dapat menggunakan ini di file header.
// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
Dengan cara ini semua cookie sesi mendatang akan menggunakan httponly.
Sintaks yang benar dari perintah php_flag adalah
php_flag session.cookie_httponly On
Dan berhati-hatilah, hanya jawaban pertama dari server yang mengatur cookie dan di sini (misalnya Anda dapat melihat petunjuk "HttpOnly". Jadi untuk pengujian hapus cookie dari browser setelah setiap permintaan pengujian.
Solusi yang lebih elegan sejak PHP> = 7.0
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);