@Tchalvak Tidak, jawaban saat ini masih berwibawa. Tidak ada yang berubah sejak 2008 terkait pengaturan cookie hanya-HTTP di PHP. Browser mana yang mendukung cookie khusus HTTP adalah pertanyaan yang berbeda, dengan jawaban yang berbeda.
Untuk cookie sesi PHP sendiri ( PHPSESSID, secara default), lihat jawaban @ richie
Fungsi setcookie()dan setrawcookie(), memperkenalkan httponlyparameter, kembali ke masa kegelapan PHP 5.2.0, membuat ini bagus dan mudah. Cukup setel parameter ke-7 menjadi true, sesuai sintaksnya
Masukkan NULLuntuk parameter yang Anda ingin tetap sebagai default. Anda mungkin juga ingin mempertimbangkan apakah Anda harus mengatur secureparameter.
Bisa juga menggunakan fungsi yang lebih lama, header()fungsi tingkat lebih rendah :
Dengan parameter bernama PHP 8, akhirnya kita dapat membuat set_cookiepanggilan tidak terlalu bertele-tele jika kita tidak perlu mengatur parameter lainnya. Misalnya set_cookie($name, $value, httponly: true).
Sygmoral
121
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().
+1 karena ini adalah hal yang baik (untuk keamanan) untuk diterapkan di seluruh server Anda, tetapi malah ditambahkan ke php.ini.
Anthony Hatzopoulos
10
Harap dicatat php_flag harus digunakan sebagai gantinya: "Jangan gunakan php_value untuk menyetel nilai boolean. Php_flag harus digunakan sebagai gantinya." php.net/manual/en/configuration.changes.php
Ondrej Machulda
@OndrejMachulda Mengubah php_valueke php_flagtidak berhasil. Saya baru saja mencobanya di server saya ..
Nate
6
@Nate: Saat mengubah ke php_flag, Anda juga harus mengubah nilainya - ke salah satu onatau off- lihat manual.
Ondrej Machulda
14
Perhatikan bahwa cookie sesi PHP tidak digunakan httponlysecara default.
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.
FYI saja sesi.use_only_cookies aktif secara default di PHP> 5,3
Nic Cottrell
1
dan yang benar adalah "semua cookie sesi mendatang " akan menggunakan httponly, bukan yang khusus ...
qdev
2
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.
$cookie->setHttpOnly(true);
dengan github.com/delight-im/PHP-CookieJawaban:
PHPSESSID
, secara default), lihat jawaban @ richieFungsi
setcookie()
dansetrawcookie()
, memperkenalkanhttponly
parameter, kembali ke masa kegelapan PHP 5.2.0, membuat ini bagus dan mudah. Cukup setel parameter ke-7 menjadi true, sesuai sintaksnyaSintaks fungsi disederhanakan agar singkat
Masukkan
NULL
untuk parameter yang Anda ingin tetap sebagai default. Anda mungkin juga ingin mempertimbangkan apakah Anda harus mengatursecure
parameter.Bisa juga menggunakan fungsi yang lebih lama,
header()
fungsi tingkat lebih rendah :header( "Set-Cookie: name=value; httpOnly" );
sumber
set_cookie
panggilan tidak terlalu bertele-tele jika kita tidak perlu mengatur parameter lainnya. Misalnyaset_cookie($name, $value, httponly: true)
.Untuk cookie sesi PHP sendiri di Apache:
tambahkan ini ke konfigurasi Apache atau
.htaccess
Ini juga dapat diatur dalam skrip, asalkan dipanggil sebelumnya
session_start()
.ini_set( 'session.cookie_httponly', 1 );
sumber
php.ini
.php_value
kephp_flag
tidak berhasil. Saya baru saja mencobanya di server saya ..php_flag
, Anda juga harus mengubah nilainya - ke salah satuon
atauoff
- 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()
sumber
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.
sumber
<?php //None HttpOnly cookie: setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); //HttpOnly cookie: setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); ?>
Sumber
sumber
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");
sumber
Anda dapat menentukannya dalam fungsi set cookie, lihat manual php
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
sumber
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.
sumber
Sintaks yang benar dari perintah php_flag adalah
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.
sumber
Solusi yang lebih elegan sejak PHP> = 7.0
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);
session_start
opsi session_start
sumber