Saya tidak faham bagaimana menggunakan "token cabaran" menambah sebarang jenis pencegahan: apakah nilai yang harus dibandingkan dengan apa?
Daripada OWASP:
Secara umumnya, pembangun hanya memerlukan Hasilkan token ini sekali Sesi semasa. Selepas permulaan Penjanaan token ini, yang nilainya disimpan dalam sesi dan digunakan Untuk setiap permintaan seterusnya, sehingga Sesi tamat tempoh.
Jika saya faham prosesnya dengan betul, inilah yang berlaku.
Saya log masuk ke http://example.com dan mencipta sesi/kuki yang mengandungi token rawak ini. Setiap borang kemudiannya mengandungi input tersembunyi yang juga mengandungi nilai rawak daripada sesi, yang dibandingkan dengan sesi/kuki pada penyerahan borang.
Tetapi apakah yang boleh dicapai? Bukankah anda hanya mendapatkan data sesi, memasukkannya ke dalam halaman, dan membandingkannya dengan data sesi yang sama? Nampak seperti penaakulan bulat. Artikel ini terus bercakap tentang mengikuti "dasar asal yang sama" tetapi itu tidak masuk akal kerana semua serangan CSRF berasal dari pengguna dan hanya menipu pengguna untuk melakukan sesuatu yang dia tidak berniat.
Adakah terdapat pilihan lain selain menambahkan token sebagai rentetan pertanyaan pada setiap URL? Kelihatan sangat hodoh dan tidak praktikal, dan menyukarkan pengguna untuk menanda halaman.
CSRF dijelaskan dengan analogi - Contoh:
Penipu mengambil semua wang anda dan mungkin bermain beberapa Xbox semasa keluar...
Ringkasan
CSRF pada asasnya bergantung pada hakikat bahawa anda membuka pintu ke rumah anda dan kemudian membiarkannya terbuka supaya orang lain boleh masuk dan berpura-pura menjadi anda.
Bagaimana untuk menyelesaikan masalah ini?
Apabila anda membuka pintu ke rumah anda buat kali pertama, penjaga pintu akan memberikan anda sekeping kertas dengan nombor yang panjang dan sangat rawak tertulis di atasnya:
Sekarang ni kalau nak masuk rumah kena tunjuk sekeping kertas tu pada penjaga pintu untuk masuk.
Jadisekarangapabila penipu cuba memasuki rumah anda, penjaga pintu akan bertanya:
"Apakah nombor rawak yang tertulis di atas kertas itu?"
Jika penyamar tidak mempunyai nombor yang betul, maka dia tidak boleh masuk. Sama ada dia perlu meneka nombor rawak dengan betul - tugas yang sangat sukar. Lebih teruk lagi, nombor rawak hanya sah selama 20 minit (contohnya). Jadi ketahuilah bahawa penyamar mesti meneka dengan betul, dan bukan itu sahaja, dia hanya mempunyai 20 minit untuk mendapatkan jawapan yang betul. Ini sangat berat! Jadi dia berputus asa.
Sudah tentu, analogi ini agak jauh, tetapi saya harap ia membantu.
**crud = (buat, baca, kemas kini padam)
Penyerang tidak boleh mendapatkan token. Oleh itu permintaan itu tidak akan berkuat kuasa.
Saya mengesyorkan artikel oleh Gnucitizen ini. Ia mempunyai penjelasan yang cukup bagus tentang CSRF: http://www.gnucitizen.org/blog/csrf-revealed/