Baru -baru ini, berita keluar. Empat karyawan Departemen Keamanan Jaringan Alibaba menggunakan kerentanan halaman web untuk menulis skrip JS untuk mengambil kue bulan, sehingga mereka tertarik. Mereka ingin tahu cara menulis skrip JS ini dan bagaimana menerapkan berbagai pesanan dan ambil senjata.
Apa itu serangan injeksi JavaScript?
1. Setiap kali konten yang dimasukkan oleh pengguna dan ditampilkan ulang, situs web rentan terhadap serangan injeksi JavaScript. Mari kita lihat aplikasi spesifik yang rentan terhadap serangan injeksi JavaScript. Misalkan situs web umpan balik pelanggan telah dibuat. Pelanggan dapat mengunjungi situs web dan memasukkan informasi umpan balik tentang produk tersebut. Ketika seorang pelanggan mengirimkan umpan balik, informasi umpan balik diputar ulang di halaman umpan balik.
Situs web umpan balik pelanggan adalah situs web sederhana. Sayangnya, situs web ini rentan terhadap serangan injeksi JavaScript.
Misalkan teks berikut sedang dimasukkan ke dalam formulir umpan balik pelanggan:
<script> waspada (serang!) </script>
Teks ini mewakili skrip JavaScript yang menampilkan kotak pesan peringatan. Setelah seseorang mengirimkan skrip ini ke formulir umpan balik pelanggan, serangan pesan! akan ditampilkan ketika ada orang yang mengunjungi situs web umpan balik pelanggan di masa mendatang.
2. Jenis lain adalah memasukkan sepotong kode JS di bilah alamat browser untuk mengubah konten variabel halaman JS dan label halaman.
Menggunakan injeksi JavaScript, pengguna dapat mengubah konten mereka tanpa menutup atau menyimpan halaman web, yang dilakukan di bilah alamat browser. Sintaks perintah adalah sebagai berikut:
JavaScript: Alert (#Command#)
Misalnya, jika Anda ingin melihat kotak peringatan peringatan di situs http://www.example.com, pertama -tama masukkan URL di bilah alamat dan tunggu halaman dimuat, lalu hapus URL dan masukkan:
JavaScript: waspada (halo dunia)
Sebagai URL baru. Ini akan memunculkan kotak peringatan Hello World, menggunakan teknik ini untuk mengubah hampir semua hal di halaman web, seperti gambar. Misalkan ada gambar logo situs web, dan kami menemukan salah satu kode HTML dengan melihat file sumber halaman:
<Name img = hai src = hello.gif>
Gambar bernama HI, file sumbernya adalah hello.gif, kami ingin mengubahnya menjadi file bye.jpeg yang disimpan di situs kami (http://www.mysite.com), jadi alamat URL lengkap dari gambar tersebut adalah http://www.mysite.com/bye.jpeg, menggunakan Just Javascript Corerty, We Just Nears To Nears To The Reades: The Wears To Nears To The Reades: The Wears To Nears To the Just Exted: The Just Just Just Nears To Nears To Nears To Nears To Nears To Nearse: We Just Extelsite.
JavaScript: alert (document.hi.src = http: //www.mysite.com/bye.jpeg)
Anda akan melihat http://www.mysite.com/bye.jpegalert peringatan pop-up, dan gambar diubah. Perlu dicatat bahwa perubahan ini hanya sementara! Jika Anda menyegarkan halaman atau masukkan kembali perubahan Anda akan hilang karena Anda baru saja membuat perubahan ini di PC Anda, bukan di server web.
Menggunakan metode yang sama kami dapat melihat atau mengubah nilai variabel, misalnya, kami menemukan sepotong kode seperti ini di halaman web:
<Bahasa skrip = javaScript> var a = tes </script>
Itu berarti bahwa nilai variabel A adalah tes, dan sekarang kita masuk:
JavaScript: waspada (a)
Lalu kami mengubah nilainya menjadi halo:
JavaScript: waspada (a = halo)
Injeksi JavaScript biasanya digunakan untuk mengubah sifat bentuk, dengan asumsi ada sepotong kode seperti ini:
<Form Name = Format Action = Send.php Metode = Posting> <Input Type = Hidden Name = Mail [email protected]> <Input Type = Teks Nama = Nama> <Input Tipe = Kirim Nilai = Kirim> </form>
Kami ingin formulir dikirim ke kotak surat kami, bukan [email protected]. Anda dapat menggunakan perintah berikut:
JavaScript: Alert ([email protected])
• Mungkin Anda telah memperhatikan hubungan hierarkis dari perintah -perintah ini:
• Kami menjelaskan secara berurutan dari kiri ke kanan:
• 1) yang paling kiri adalah dokumen
• 2) Lalu ada nama objek yang ingin kami ubah (seperti document.hi.src) atau objek yang dikandungnya (seperti document.format.mail.value)
• 3) Akhirnya, ada properti yang ingin kami ubah (seperti jalur sumber: document.hi.src, atau nilai variabel: document.format.mail.value)
• 4) Gunakan pemisahan jumlah
• 5) Ketika kami ingin mengubah nilai atribut, kami menggunakan tanda = tanda dan nilai atribut baru
•*Catatan: Ketika nilai atribut baru adalah string (misalnya: [email protected]) ia perlu dilampirkan dalam kutipan ganda.
• Jika kita ingin menggunakannya sebagai nilai untuk suatu variabel, kita tidak perlu menggunakan kutipan ganda. Misalnya, jika kita ingin menetapkan nilai variabel B ke variabel A, kita dapat memasukkan javascript: peringatan (a = b).
• Namun, sebagian besar tag di halaman tidak memiliki nama, seperti:
<Form Action = Send.php Metode = Post> <Input Type = Hidden Name = Mail [email protected]> <Input Type = Teks Nama = Nama> <Input Type = Kirim Nilai = Kirim> </form>
Tidak ada nama formulir dalam kode ini. Berdasarkan informasi di atas, Anda dapat menggunakan perintah ini:
JavaScript: Alert (dokumen .mail.value = [email protected])
Dalam hal ini kita harus menghitung dan menemukan nomor urutan formulir, dan berikut ini adalah contoh:
<form action=send.php method=post><input type=text name=name><input type=submit value=submit></form><form action=send.php method=post><input type=hidden name=mail [email protected]><input type=text name=name><input type=submit value=submit></form><form action=send.php method=post><input type=text name = name> <input type = kirimkan nilai = kirim> </form>
• Dalam kode di atas kita melihat 3 formulir, tetapi kita hanya tertarik pada yang kedua, jadi nomor formulir yang kita inginkan adalah 2. Jangan lupa bahwa kita mulai dari 1, seperti 1, 2, 3, 4 ... sementara javascript dimulai dari 0, seperti 0, 1, 2, 3 ... jadi angka bentuk sebenarnya adalah 1, bukan 2. Biasanya kita harus mengurangi bentuk bentuk dengan satu dengan satu. Kami akan menggunakan nomor seri ini untuk menyelesaikan perintah kami:
JavaScript: Alert (Document.Forms [1] .mail.value = [email protected])
• Dengan cara ini Anda dapat mengubah gambar atau tautan tanpa nama, dan Anda dapat mengubah formulir ke jenis tag apa pun yang Anda inginkan. Untuk gambar
JavaScript: Alert (Document.Images [3] .src =#URL gambar yang Anda inginkan#)
Untuk tautannya
JavaScript: Alert (Document.Links [0] .href =#URL yang Anda inginkan#)
Akhirnya, kita dapat menggunakan teknik ini untuk mengedit cookie. Perintah berikut ditulis oleh dr_amado dari TriviAsecurity.net, dan saya hanya memodifikasinya sedikit untuk membiarkannya muncul sebelum pengguna mengeditnya. Anda hanya perlu menyalinnya ke bilah alamat:
JavaScript: alert (window.c = fungsi a (n, v, nv) {c = document.cookie; c = c.substring (c.indexof (n)+n.length, c.length); c = c.substring (1, ((c.indexOf (;)>-1)? c.indexOf (;): (c.indexOf (;)>-1)? c.indexOf (;): c.length));nc=unescape(c).replace(v,nv);document.cookie=n+=+escape(nc);return unescape(document.cookie);});alert('The cookie is: '+document.cookie+'');alert(c(prompt(The name of the cookie:,),prompt(Change this value:,),prompt(with this:,))))// Jika Anda ingin mengubah cookie secara manual, Anda dapat menggunakan perintah berikut:
JavaScript: Alert (Document.Cookie)
Ini akan menampilkan cookie Anda saat ini, dengan asumsi userId = 1, jika Anda ingin mengubahnya menjadi userid = 2, Anda dapat menggunakan perintah berikut:
JavaScript: ALERT (Document.cookie = UserId = 2)
Akhirnya saya harus menekankan bahwa semua perubahan hanya ada di sisi klien! Ini seperti menyimpan halaman web di PC Anda dan memodifikasinya. Namun, menggunakan trik ini Anda masih dapat menipu halaman (seperti cookie) atau bypass verifikasi keamanan. Misalnya, beberapa halaman web akan mendeteksi lokasi tempat pengguna mengirim data. Jika Anda mengirim data dari http://www.test.com/form.php ke http://www.test.com/check.php, check.php dapat mendeteksi apakah data berasal dari formulir di http://www.test.com/form.php. Selain itu, jika Anda berencana untuk memasukkan kode JavaScript Anda sendiri ke halaman, dengan menggunakan beberapa trik ini, Anda akan dapat mengubah gambar dan membiarkannya sama!
Akhirnya, karena suntikan JS sangat mengerikan, solusi apa yang harus kita cegah untuk mencegah injeksi JS di situs web yang kita tulis sendiri?
Metode 1:
Cara mudah untuk mencegah serangan injeksi JavaScript adalah dengan menyandikan data yang dimasukkan oleh pengguna situs web mana pun di HTML saat meredisplay data dalam tampilan.
Misalnya: <%= html.encode (feedback.message)%>
Apa arti menggunakan HTML untuk menyandikan string? Saat menggunakan HTML untuk menyandikan string, karakter berbahaya seperti <dan> diganti dengan entitas HTML seperti <n dan>. Jadi, ketika string <script> alert (boo!) </script> dikodekan menggunakan html, itu akan dikonversi menjadi <ript> peringatan (serang!) </script>. Browser tidak lagi menjalankan skrip JavaScript saat mem -parsing string yang dikodekan. Sebaliknya, itu menunjukkan halaman yang tidak berbahaya.
Metode 2:
Selain menggunakan HTML untuk menyandikan data saat menampilkan data dalam tampilan, Anda juga dapat menggunakan HTML untuk menyandikan data sebelum mengirimkannya ke database.
Stringescapeutils.escapeHtml (data yang dikirimkan oleh meja depan);
Seringkali, orang lebih suka menggunakan metode pertama yang dibahas dalam tutorial ini dan bukan metode kedua. Masalah dengan pendekatan kedua adalah bahwa data yang dikodekan HTML pada akhirnya akan disimpan dalam database. Dengan kata lain, data dalam database akan berisi karakter aneh. Apa kerugian dari ini? Jika Anda perlu menampilkan data basis data dalam bentuk selain halaman web, Anda akan menghadapi masalah. Misalnya, data tidak dapat ditampilkan dengan mudah di aplikasi Windows Forms.
Terima kasih kepada Netizens untuk berbagi: http://zxf-noimp.iteye.com/blog/1130771
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.