Show
Cookie adalah serangkaian kecil data yang disimpan langsung di browser. Mereka adalah bagian dari protokol HTTP, ditentukan oleh spesifikasi RFC 6265 Cookie biasanya disetel oleh server web menggunakan respons 2 HTTP-header. Kemudian, browser secara otomatis menambahkannya ke (hampir) setiap permintaan ke domain yang sama menggunakan 3 HTTP-headerSalah satu kasus penggunaan yang paling umum adalah otentikasi
Kami juga dapat mengakses cookie dari browser, menggunakan properti 6Ada banyak hal rumit tentang cookie dan opsinya. Dalam bab ini kita akan membahasnya secara rinci Apakah browser Anda menyimpan cookie dari situs ini?
Nilai 6 terdiri dari 8 pasang, dibatasi oleh 9. Masing-masing adalah cookie yang terpisahUntuk menemukan cookie tertentu, kita dapat memisahkan 6 dengan 9, lalu menemukan nama yang tepat. Kita dapat menggunakan ekspresi reguler atau fungsi array untuk melakukan ituKami meninggalkannya sebagai latihan untuk pembaca. Selain itu, di akhir bab ini Anda akan menemukan fungsi pembantu untuk memanipulasi cookie Kami dapat menulis ke 6. Tapi itu bukan properti data, ini adalah pengakses (pengambil/penyetel). Tugas untuk itu diperlakukan secara khususOperasi tulis ke _6 hanya memperbarui cookie yang disebutkan di dalamnya, tetapi tidak menyentuh cookie lainMisalnya, panggilan ini menyetel cookie dengan nama 4 dan nilai 5
Jika Anda menjalankannya, mungkin Anda akan melihat banyak cookie. Itu karena operasi 6 tidak menimpa semua cookie. Itu hanya menetapkan cookie yang disebutkan 4Secara teknis, nama dan nilai dapat memiliki karakter apa saja. Untuk mempertahankan pemformatan yang valid, format tersebut harus di-escape menggunakan fungsi ________13______8 bawaan
Keterbatasan Ada beberapa batasan
Cookie memiliki beberapa opsi, banyak di antaranya penting dan harus disetel Opsi dicantumkan setelah _1, dibatasi oleh 9, seperti ini
Awalan jalur url harus mutlak. Itu membuat cookie dapat diakses untuk halaman di bawah jalur itu. Secara default, ini adalah jalur saat ini Jika cookie disetel dengan _4, cookie terlihat di halaman 5 dan 6, tetapi tidak di 7 atau 8Biasanya, kita harus mengatur _9 ke root. 0 untuk membuat cookie dapat diakses dari semua halaman situs web
Domain menentukan di mana cookie dapat diakses. Namun dalam praktiknya, ada batasannya. Kami tidak dapat menetapkan domain apa pun Tidak ada cara untuk membiarkan cookie dapat diakses dari domain tingkat 2 lainnya, jadi 2 tidak akan pernah menerima kumpulan cookie di 3Ini adalah batasan keamanan, untuk memungkinkan kami menyimpan data sensitif dalam cookie yang seharusnya hanya tersedia di satu situs Secara default, cookie hanya dapat diakses di domain yang menyetelnya Harap dicatat, secara default cookie juga tidak dibagikan ke subdomain, seperti 4
…Tapi ini bisa diubah. Jika kami ingin mengizinkan subdomain seperti 4 untuk mendapatkan set cookie di 3, itu mungkinAgar hal itu terjadi, saat menyetel cookie di 3, kita harus secara eksplisit menyetel opsi 8 ke domain root. _1. Kemudian semua subdomain akan melihat cookie tersebutMisalnya
Untuk alasan historis, 0 (dengan titik sebelum 3) juga berfungsi dengan cara yang sama, memungkinkan akses ke cookie dari subdomain. Itu notasi lama dan harus digunakan jika kita perlu mendukung browser yang sangat lamaSingkatnya, opsi _8 memungkinkan untuk membuat cookie dapat diakses di subdomainSecara default, jika cookie tidak memiliki salah satu opsi ini, cookie akan menghilang saat browser ditutup. Cookie semacam itu disebut "cookie sesi" Untuk membiarkan cookie bertahan dari penutupan browser, kita dapat mengatur opsi 3 atau 4
Tanggal kedaluwarsa cookie menentukan waktu, kapan browser akan menghapusnya secara otomatis Tanggal harus persis dalam format ini, dalam zona waktu GMT. Kita dapat menggunakan _6 untuk mendapatkannya. Misalnya, kami dapat mengatur cookie untuk kedaluwarsa dalam 1 hari
Jika kami menyetel _3 ke tanggal di masa lalu, cookie akan dihapus
Ini adalah alternatif untuk _3 dan menentukan kedaluwarsa cookie dalam hitungan detik dari saat iniJika disetel ke nol atau nilai negatif, cookie akan dihapus
Cookie harus ditransfer hanya melalui HTTPS Secara default, jika kami menyetel cookie di 1, maka cookie itu juga muncul di 2 dan sebaliknyaArtinya, cookie berbasis domain, mereka tidak membedakan antara protokol Dengan opsi ini, jika cookie disetel oleh 2, maka cookie tersebut tidak akan muncul saat situs yang sama diakses melalui HTTP, seperti 1. Jadi, jika cookie memiliki konten sensitif yang tidak boleh dikirim melalui HTTP yang tidak dienkripsi, flag 0 adalah hal yang tepat
Itu atribut keamanan lainnya 6. Ini dirancang untuk melindungi dari apa yang disebut serangan XSRF (pemalsuan permintaan lintas situs).Untuk memahami cara kerjanya dan kapan berguna, mari kita lihat serangan XSRF Bayangkan, Anda masuk ke situs ________51______7. Itu adalah. Anda memiliki cookie otentikasi dari situs itu. Browser Anda mengirimkannya ke 7 dengan setiap permintaan, sehingga mengenali Anda dan melakukan semua operasi keuangan yang sensitifSekarang, saat menjelajah web di jendela lain, Anda secara tidak sengaja membuka situs lain 9. Situs itu memiliki kode JavaScript yang mengirimkan formulir 0 ke 7 dengan bidang yang memulai transaksi ke akun peretasBrowser mengirimkan cookie setiap kali Anda mengunjungi situs ________ 51 _______7, bahkan jika formulir dikirimkan dari ________ 51 _______9. Jadi bank mengenali Anda dan benar-benar melakukan pembayaran Itulah yang disebut serangan "Pemalsuan Permintaan Lintas Situs" (singkatnya, XSRF). Bank nyata dilindungi darinya tentu saja. Semua formulir yang dihasilkan oleh 7 memiliki bidang khusus, yang disebut "token perlindungan XSRF", yang tidak dapat dibuat atau diekstraksi oleh halaman jahat dari halaman jarak jauh. Itu bisa mengirimkan formulir di sana, tetapi tidak bisa mendapatkan datanya kembali. Situs _7 memeriksa token tersebut dalam setiap formulir yang diterimanyaPerlindungan semacam itu membutuhkan waktu untuk diterapkan. Kami perlu memastikan bahwa setiap formulir memiliki bidang token yang diperlukan, dan kami juga harus memeriksa semua permintaan Opsi cookie ________ 51 _______ 6 menyediakan cara lain untuk melindungi dari serangan semacam itu, yang (secara teori) seharusnya tidak memerlukan "token perlindungan csrf" Ini memiliki dua nilai yang mungkin
Cookie dengan _7 tidak pernah dikirim jika pengguna berasal dari luar situs yang samaDengan kata lain, apakah pengguna mengikuti tautan dari email mereka atau mengirimkan formulir dari 9, atau melakukan operasi apa pun yang berasal dari domain lain, cookie tidak dikirimJika cookie otentikasi memiliki opsi _6, maka serangan XSRF tidak memiliki peluang untuk berhasil, karena pengiriman dari 9 datang tanpa cookie. Jadi _7 tidak akan mengenali pengguna dan tidak akan melanjutkan pembayaranPerlindungannya cukup andal. Hanya operasi yang berasal dari _7 yang akan mengirimkan cookie 6, e. g. pengiriman formulir dari halaman lain di 7Meskipun, ada sedikit ketidaknyamanan Saat pengguna mengikuti tautan resmi ke _7, seperti dari catatan mereka sendiri, mereka akan terkejut bahwa 7 tidak mengenalinya. Memang, 7 cookie tidak dikirim dalam kasus tersebutKami dapat mengatasinya dengan menggunakan dua cookie. satu untuk "pengakuan umum", hanya untuk tujuan mengatakan. “Halo, John”, dan yang lainnya untuk operasi pengubahan data dengan 7. Kemudian, seseorang yang datang dari luar situs akan melihat sambutan, tetapi pembayaran harus dilakukan dari situs web bank, agar cookie kedua dikirim
Pendekatan yang lebih santai yang juga melindungi dari XSRF dan tidak merusak pengalaman pengguna Mode longgar, seperti 2, melarang browser mengirim cookie ketika datang dari luar situs, tetapi menambahkan pengecualianCookie 1 dikirim jika kedua kondisi ini benar
Jadi, apa yang dilakukan _1, pada dasarnya adalah mengizinkan operasi "masuk ke URL" yang paling umum untuk memiliki cookie. e. g. membuka tautan situs web dari catatan yang memenuhi ketentuan iniTetapi apa pun yang lebih rumit, seperti permintaan jaringan dari situs lain atau pengiriman formulir, akan kehilangan cookie Jika itu baik untuk Anda, menambahkan 1 mungkin tidak akan merusak pengalaman pengguna dan menambahkan perlindunganSecara keseluruhan, _6 adalah pilihan yang bagusAda kekurangannya
Jadi jika kita hanya mengandalkan _6 untuk memberikan perlindungan, maka browser lama akan rentanTapi kita pasti bisa menggunakan _6 bersama dengan langkah-langkah perlindungan lainnya, seperti token xsrf, untuk menambahkan lapisan pertahanan tambahan dan kemudian, di masa mendatang, ketika browser lama mati, kita mungkin bisa menjatuhkan token xsrfOpsi ini tidak ada hubungannya dengan JavaScript, tetapi kami harus menyebutkannya untuk kelengkapan Server web menggunakan header _2 untuk menyetel cookie. Juga, ini dapat mengatur opsi _02Opsi ini melarang akses JavaScript apa pun ke cookie. Kami tidak dapat melihat cookie tersebut atau memanipulasinya menggunakan 6Itu digunakan sebagai tindakan pencegahan, untuk melindungi dari serangan tertentu saat peretas menyuntikkan kode JavaScript miliknya sendiri ke halaman dan menunggu pengguna mengunjungi halaman tersebut. Itu sama sekali tidak mungkin, peretas seharusnya tidak dapat menyuntikkan kode mereka ke situs kami, tetapi mungkin ada bug yang memungkinkan mereka melakukannya Biasanya, jika hal seperti itu terjadi, dan pengguna mengunjungi halaman web dengan kode JavaScript peretas, maka kode tersebut akan dieksekusi dan mendapatkan akses ke 6 dengan cookie pengguna yang berisi informasi autentikasi. Itu burukTetapi jika cookie adalah 02, maka 6 tidak melihatnya, jadi itu dilindungiBerikut sekumpulan kecil fungsi untuk bekerja dengan cookie, lebih nyaman daripada modifikasi manual 6Ada banyak pustaka cookie untuk itu, jadi ini untuk tujuan demo. Meskipun bekerja penuh Cara terpendek untuk mengakses cookie adalah dengan menggunakan ekspresi reguler Fungsi 08 mengembalikan cookie dengan 09 yang diberikan
Di sini 10 dihasilkan secara dinamis, untuk mencocokkan 11Harap perhatikan bahwa nilai cookie dikodekan, jadi 12 menggunakan fungsi 13 bawaan untuk mendekodekannyaSetel 09 cookie ke 15 yang diberikan dengan 0 secara default (dapat dimodifikasi untuk menambahkan default lainnya) 0Untuk menghapus cookie, kita bisa menyebutnya dengan tanggal kedaluwarsa negatif _1Memperbarui atau menghapus harus menggunakan jalur dan domain yang sama Tolong dicatat. saat kami memperbarui atau menghapus cookie, kami harus menggunakan jalur dan opsi domain yang persis sama seperti saat kami menyetelnya Bersama. Kue kering. js Cookie disebut "pihak ketiga" jika ditempatkan oleh domain selain halaman yang dikunjungi pengguna Contohnya
Cookie pihak ketiga secara tradisional digunakan untuk pelacakan dan layanan iklan, karena sifatnya. Mereka terikat ke domain asal, jadi 19 dapat melacak pengguna yang sama di antara situs yang berbeda, jika mereka semua mengaksesnyaSecara alami, beberapa orang tidak suka dilacak, jadi browser memungkinkan untuk menonaktifkan cookie semacam itu Selain itu, beberapa browser modern menggunakan kebijakan khusus untuk cookie tersebut
Tolong dicatat Jika kami memuat skrip dari domain pihak ketiga, seperti 31, dan skrip itu menggunakan 6 untuk menyetel cookie, maka cookie tersebut bukan pihak ketigaJika skrip menyetel cookie, dari mana pun skrip itu berasal – cookie tersebut milik domain halaman web saat ini Topik ini sama sekali tidak terkait dengan JavaScript, hanya sesuatu yang perlu diingat saat menyetel cookie Ada undang-undang di Eropa yang disebut GDPR, yang memberlakukan seperangkat aturan bagi situs web untuk menghormati privasi pengguna. Salah satu aturan ini adalah meminta izin eksplisit untuk melacak cookie dari pengguna Harap perhatikan, itu hanya tentang melacak/mengidentifikasi/mengotorisasi cookie Jadi, jika kami menyetel cookie yang hanya menyimpan beberapa informasi, tetapi tidak melacak atau mengidentifikasi pengguna, maka kami bebas melakukannya Tetapi jika kita akan menyetel cookie dengan sesi autentikasi atau id pelacakan, maka pengguna harus mengizinkannya Situs web umumnya memiliki dua varian mengikuti GDPR. Anda pasti sudah melihat keduanya di web
GDPR bukan hanya tentang cookie, ini juga tentang masalah terkait privasi lainnya, tetapi itu terlalu jauh di luar jangkauan kami Bagaimana Anda mengatur cookie di JavaScript?Buat Cookie dengan JavaScript
. dokumen. cookie = "username=John Doe"; .
Bagaimana Anda menetapkan nilai ke cookie?Setel cookie . dokumen. cookie adalah perintah yang digunakan untuk membuat cookie baru 'newCookie' adalah string yang menetapkan nilai cookie. Ini memiliki sintaksnya sendiri yang harus diperhatikan. nama=nilai. Untuk alasan keterbacaan, nama harus menyiratkan apa yang disimpan cookie (mis. g. nama pengguna) nilai hanyalah nilai Bagaimana cara menyetel JavaScript tajuk cookie?Cukup setel header Set-Cookie sebagai respons dari kode sisi server . Browser harus menyimpannya secara otomatis. Sebagai pengembang, Anda mungkin dapat memeriksa nilai cookie menggunakan "Alat Pengembang". Dan cookie yang sama akan dikirim dalam permintaan berikutnya ke domain yang sama, hingga cookie kedaluwarsa.
Bagaimana cara mendapatkan nilai cookie tertentu dalam JavaScript?untuk mengambil nilai cookie tertentu, kita hanya perlu mendapatkan string setelah "; {name}=" dan sebelum next ";". Before we do any processing, we prepend the cookies string with "; ", so that every cookie name, including the first one, is enclosed with "; " and "=": "; {name}={value}; {name}={value}; ..." |