Cara membaca cookie HttpOnly menggunakan JavaScript

90

Apakah ada cara untuk membaca cookie aman dengan JavaScript?
Saya mencoba melakukannya dengan menggunakan document.cookiedan sejauh yang saya bisa lihat di artikel ini tentang cookie aman dan bendera HttpOnly , saya tidak dapat mengakses cookie aman dengan cara ini.

Adakah yang bisa menyarankan solusi?

tzam
sumber
1
Dari wiki : Kuki aman hanya digunakan saat peramban mengunjungi server melalui HTTPS.
Pavel Hodek
6
@Pavel Hodek Itu bendera yang salah. Bendera cookie "aman" tidak ada hubungannya dengan tanda keamanan HTTPOnly. Mereka memiliki sistem penamaan yang buruk.
Benteng
1
Judul pertanyaan ini harus diubah untuk menyertakan tanda "HttpOnly". Sepertinya pertanyaannya adalah tentang bendera "Aman".
Tom

Jawaban:

126

Browser yang berbeda memungkinkan tindakan keamanan yang berbeda ketika flag HTTPOnly disetel. Misalnya Opera dan Safari tidak mencegah javascript untuk menulis ke cookie. Namun, membaca selalu dilarang di versi terbaru dari semua browser utama.

Tetapi yang lebih penting mengapa Anda ingin membaca HTTPOnlycookie? Jika Anda seorang pengembang, nonaktifkan saja benderanya dan pastikan Anda menguji kode Anda untuk xss. Saya menyarankan Anda menghindari menonaktifkan bendera ini jika memungkinkan. The HTTPOnlybendera dan "bendera aman" (yang memaksa cookie yang akan dikirim melalui https) harus selalu set.

Jika Anda seorang penyerang , maka Anda ingin membajak sesi . Tapi ada cara mudah untuk membajak sesi meskipun ada HTTPOnlybendera. Anda masih bisa mengendarai sesi tanpa mengetahui id sesi. Worm MySpace Samy melakukan hal itu. Ini menggunakan XHR untuk membaca token CSRF dan kemudian melakukan tugas resmi. Oleh karena itu, penyerang dapat melakukan hampir semua hal yang dapat dilakukan oleh pengguna yang login.

Orang terlalu percaya pada HTTPOnlybendera, XSS masih bisa dieksploitasi. Anda harus menyiapkan penghalang di sekitar fitur sensitif. Seperti perubahan kata sandi yang diajukan harus membutuhkan kata sandi saat ini. Kemampuan admin untuk membuat akun baru harus membutuhkan captcha, yang merupakan teknik pencegahan CSRF yang tidak dapat dengan mudah dilewati dengan XHR .

benteng
sumber
Bisakah Anda menjelaskan tentang cacing itu? Tautan itu tidak berfungsi dan juga tidak terlalu memahami banyak hal dari internet. Terima kasih.
Abhishek Jebaraj
@Abhishek Jebaraj Jika Anda tidak memahami worm sammy, atau token CSRF, coba pahami dulu batas-batas kebijakan asal yang sama
rook
saya ingin mendapatkan tanggal kadaluwarsa dari http hanya cookie, bagaimana saya melakukannya
PirateApp
50

Inti dari cookie HttpOnly adalah bahwa cookie tidak dapat diakses oleh JavaScript.

Satu-satunya cara (kecuali untuk mengeksploitasi bug browser) agar skrip Anda membacanya adalah dengan memiliki skrip yang bekerja sama di server yang akan membaca nilai cookie dan menggemakannya kembali sebagai bagian dari konten respons. Tetapi jika Anda bisa dan akan melakukannya, mengapa menggunakan cookie HttpOnly?

Ilmari Karonen
sumber
Anda mungkin ingin mengujinya untuk mengetahui apakah browser pengguna menangani HttpOnly untuk cookie dengan benar sebelum mengizinkan pengguna menggunakan situs Anda dari browser tertentu. Saya mencari contoh yang dapat memastikan dukungan browser dari bendera HttpOnly. MS juga menyarankan untuk melakukannya, tetapi tidak ada saran lebih lanjut tentang caranya: Mengurangi XSS dengan HttpOnly
Ursegor
Saya menemukan saran mereka versi browser daftar putih. Saya mungkin salah, tetapi bukankah ini cara yang nyaman untuk memeriksa dukungan dari javascript? Bisakah Anda menyarankan drawbaks dalam hal ini?
Ursegor
-7

Salah satu caranya adalah dengan menggunakan safari web inspector, dan di tab penyimpanan Anda dapat melihat semua cookie, httpOnly atau tidak, dan cukup pilih cookie Command + C, untuk menyalinnya.

Setelah Anda memiliki string, Anda dapat dengan mudah menguraikannya kembali dengan parser cookie atau javascript biasa.

masukkan deskripsi gambar di sini

pankajdoharey
sumber
1
FF dan Chrome juga bisa melakukan ini. Mereka tidak sama dengan yang diinginkan OP.
imba-tjd
@ imba-tjd Anda benar, tetapi saya menggunakan Safari pada saat itu jadi saya bisa menjaminnya.
pankajdoharey
Itu seperti Anda menjawab seseorang yang bertanya "Bagaimana cara saya mendapatkan masukan pengguna" dengan, "Tanya saja kepada mereka lalu setel dalam kode Anda".
forumulator