Bagaimana Anda mengatur menggunakan cookie HttpOnly di PHP


93

Bagaimana cara mengatur cookie di PHP appssebagai saya HttpOnly cookies?


stackoverflow.com/questions/528405/… Memiliki info dukungan browser.
Kzqai

2
@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.
lanzz

Anda dapat menggunakan $cookie->setHttpOnly(true);dengan github.com/delight-im/PHP-Cookie
gak

Jawaban:


93
  • Untuk cookie Anda , lihat jawaban ini.
  • 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

Sintaks fungsi disederhanakan agar singkat

setcookie(    $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )

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 :

header( "Set-Cookie: name=value; httpOnly" );

1
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().

ini_set( 'session.cookie_httponly', 1 );

9
+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.

Untuk melakukannya:

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

Beberapa item catatan di sini:

  • Anda harus menelepon session_name() sebelumnyasession_start()
  • Ini juga menetapkan jalur default ke '/', yang diperlukan untuk Opera tetapi cookie sesi PHP mana yang tidak dilakukan secara default.

12
php.net/manual/en/function.session-set-cookie-params.php Ini dapat dilakukan secara otomatis melalui fungsi PHP di atas sebagai pengganti pengkodean khusus.
Ryaner

13

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.


13
Situasi ini mungkin telah berubah sejak '08, sekarang. Berikut adalah daftar yang lebih baru / diperbarui: 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); 

?>

Sumber




4

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.

  • Diperbarui.

2
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.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.