1. Prinsip serangan
Cookie Spoofing terutama menggunakan praktik yang tidak aman untuk menyimpan informasi login pengguna dalam cookie di jaringan saat ini.
Kita tahu bahwa sistem pengguna berbasis cookie umum akan menyimpan setidaknya dua variabel dalam cookie: nama pengguna dan UserLevel, di mana nama pengguna adalah nama pengguna dan UserLevel adalah tingkat pengguna. Saat browser kami mengakses halaman ASP, itu akan memancarkan sesuatu seperti
Get /.../file.asp http 1.0
...
Cookie: username = user & userLevel = 1
...
Kemudian, selama kita tahu nama pengguna dan nilai level administrator (dengan asumsi admin dan 5 masing -masing), kita dapat mentransfernya
Get /.../file.asp http 1.0
...
Cookie: Username = admin & UserLevel = 5
...
untuk mendapatkan izin administrator. Sangat sederhana, bukan? Namun, sebelum kerentanan ditemukan, hampir semua sistem manajemen pengguna mengandalkan cookie.
2. Simpan informasi pengguna dengan aman
Karena cookie tidak aman dan kita harus menyimpan informasi login pengguna, di mana harus disimpan?
Kami memperhatikan bahwa di ASP, selain cookie, ada juga sesi yang dapat menyimpan informasi. Sesi disimpan di server dan tidak dapat diubah oleh klien sesuka hati, sehingga memiliki keamanan yang sangat tinggi. Dengan cara ini, semua orang dapat mengubah kode semua cookie menjadi sesi.
3. Simpan informasi pengguna untuk waktu yang lama
Sesi digunakan untuk menyimpan informasi login pengguna. Metode yang dijelaskan dalam bagian ini dihasilkan.
Ada dua varian dari metode ini. Berikan sesuai dengan cookie. Kode untuk mengimplementasikan metode ini adalah sebagai berikut:
VBS:
<%
Nama pengguna redup, kata sandi
nama pengguna = sesi (nama pengguna)
Jika nama pengguna = lalu
'Tidak ada informasi login pengguna di sesi
username = request.cookies (nama pengguna)
kata sandi = request.cookies (kata sandi)
'Perhatikan nama pengguna dan kata sandi yang diperoleh dalam dua kalimat di atas untuk mencegah kerentanan injeksi SQL (mis. Menyaring kutipan tunggal'), dihilangkan di sini
Jika nama pengguna = atau kata sandi = lalu
'Pengguna tidak masuk
...
kalau tidak
'Di sini diasumsikan bahwa objek Conn dan RS telah dibuat
Rs.Open Pilih Top 1 * dari [pengguna] di mana nama pengguna = '& nama pengguna &' dan kata sandi = '& kata sandi &', conn, 1, 3
Jika rs.eof maka
'Informasi dalam cookie adalah ilegal
...
kalau tidak
'Informasi dalam cookie legal dan secara otomatis masuk
Sesi (nama pengguna) = nama pengguna
...
akhiri jika
akhiri jika
kalau tidak
'Informasi pengguna sudah ada di sesi dan dibaca secara langsung
...
akhiri jika
%>
JS:
<%
var nama pengguna, kata sandi;
nama pengguna = sesi (nama pengguna) +;
if (username == || nama pengguna == tidak terdefinisi) {
// Tidak ada informasi pengguna di sesi ini
username = request.cookies (nama pengguna) +;
kata sandi = request.cookies (kata sandi) +;
// Perhatikan nama pengguna dan kata sandi yang diperoleh dalam dua kalimat di atas untuk mencegah kerentanan injeksi SQL (mis. Menyaring kutipan tunggal '), dihilangkan di sini
if (username == || username == tidak terdefinisi || kata sandi == || kata sandi == tidak terdefinisi) {
// Pengguna tidak masuk
...
}
kalau tidak {
// Di sini diasumsikan bahwa objek Conn dan RS telah dibuat
rs.open (pilih Top 1 * dari [pengguna] di mana nama pengguna = ' + nama pengguna +' dan kata sandi = ' + kata sandi +', conn, 1, 3);
if (rs.eof) {
// Informasi dalam cookie adalah ilegal
...
}
kalau tidak {
// Informasi dalam cookie legal dan secara otomatis masuk
Sesi (nama pengguna) = nama pengguna +;
...
}
}
}
kalau tidak {
// informasi pengguna sudah ada di sesi dan dibaca secara langsung
...
}
%>
Namun, metode ini tidak terlalu aman bagi pengguna, karena browser akan mengirimkan cookie setiap kali mengunjungi halaman, dan akun pengguna akan dicuri begitu cookie yang berisi kata sandi diperoleh oleh orang lain. Untuk kasus ini, metode kedua muncul, yaitu, tambahkan kode verifikasi bidang ke database informasi pengguna. Nilai kode ditambahkan. Saat memverifikasi informasi pengguna dalam cookie, hanya nama pengguna dan memverifikasi kode yang diverifikasi. Keuntungan dari metode ini adalah bahwa bahkan jika cookie pengguna diperoleh oleh peretas, ia hanya dapat menggunakan kode verifikasi sementara ini untuk masuk, dan tidak dapat memperoleh kata sandi pengguna. Selama pengguna ini masuk dengan nama pengguna dan kata sandi lagi, nilai VerificationCode akan berubah dan peretas tidak akan dapat masuk melalui kode verifikasi asli.
Implementasi metode ini hanya membutuhkan sedikit perubahan pada kode metode yang disebutkan di atas. Pertama, dalam program login Anda, Anda perlu menambahkan paragraf di mana verifikasi lewat untuk menyimpan informasi pengguna:
VBS:
<%
Response.cookies (verifyCode) = int (rnd * 2100000000)
%>
JS:
<%
Response.cookies (verifyCode) = math.floor (math.random () * 2100000000);
%>
Kemudian, dalam kode verifikasi yang disediakan di atas, ubah verifikasi cookie (kata sandi) ke verifikasi cookie (verifyCode).
4. Kesimpulan
Melalui analisis dan pemrosesan kami, kerentanan spoofing cookie telah sepenuhnya diselesaikan, dan sejak itu, program ASP kami menjadi lebih aman.
2007-08-05 20:37 Penulisan dimulai
2007-08-05 21:14 Edisi pertama selesai