Bagaimana Mencegah Serangan Polusi Prototipe?

Bagaimana Mencegah Serangan Polusi Prototipe



Serangan polusi prototipe mengeksploitasi cara objek JavaScript menangani prototipe terkait. Dalam JavaScript, Prototipe adalah objek lain yang mendefinisikan properti dan metode default untuk objek yang dipilih. Penyerang mengeksploitasi polusi prototipe dengan menyuntikkan kode berbahaya ke dalam prototipe ini dengan memanipulasi properti objek atau dengan menggunakan fungsi yang menggabungkan objek secara rekursif.

Panduan ini menjelaskan cara mencegah serangan polusi prototipe.







Mencegah Serangan Polusi Prototipe?

Akar penyebab serangan polusi prototipe adalah objek JavaScript mewarisi properti dari prototipenya. Artinya jika penyerang dapat memasukkan kode berbahaya ke dalam prototipe, kode tersebut akan diwarisi oleh semua objek yang diwarisi dari prototipe tersebut. Hal ini menyebabkan pencurian data, mengeksekusi kode arbitrer, atau mengambil kendali aplikasi lain.



Dalam cuplikan kode di bawah ini, prototipe kode polusi akan dimasukkan:



konstanta y = { A: 1 , B: 2 } ;
data const = JSON.parse ( '{'__proto__': { 'rusak': benar}}' ) ;

const c = Objek.penetapan ( { } , dan, data ) ;
konsol.log ( c.rusak ) ;


Deskripsi cuplikan kode di atas:





    • Pertama, daftar bernama “ Dan ” dibuat dan menyimpan nilai dalam pasangan nilai kunci.
    • Dengan bantuan ' -Karena itu- ”, kode acak yang tercemar diimplementasikan dalam format nilai kunci. Kuncinya disetel ke “ salah ” dan nilai yang ditetapkan sebesar “ BENAR ”.
    • Kemudian, kode tercemar ini ditugaskan ke “ Dan ” daftar dengan memanggil “ menetapkan() ”, dan daftar yang dihasilkan disimpan dalam daftar baru bernama “ C ”.
    • Akhirnya, kode tercemar dimasukkan ke dalam “ C ” daftar diambil dan nilainya ditampilkan melalui konsol. Untuk memastikan bahwa polusi atau data berbahaya telah disuntikkan.

Setelah mengeksekusi file yang memuatnya, outputnya menunjukkan bahwa kode berbahaya telah berhasil disuntikkan dan nilainya telah diambil:



Bagaimana Mencegah Serangan Polusi Prototipe?

Ada beberapa pendekatan yang dapat digunakan untuk mencegah serangan polusi prototipe:

Penggabungan Rekursif Tidak Aman:

Hindari penggabungan rekursif yang tidak aman karena dapat menyebabkan serangan polusi prototipe:

dimana penggabungan = ( dibutuhkan , src ) = > {
untuk ( atribut var di dalam src ) {
jika ( jenis ( dibutuhkan [ atribut ] ) === 'keberatan' && jenis ( src [ atribut ] ) === 'keberatan' )
{
menggabungkan ( dibutuhkan [ atribut ] , src [ atribut ] ) ;
} kalau tidak {
dibutuhkan [ atribut ] = src [ atribut ] ;
}
}
kembali dibutuhkan ;
} ;


Dalam kode di atas:

    • Pertama, fungsi khusus “ menggabungkan() ” dibuat yang menerima dua parameter array “ dibutuhkan ' Dan ' src ”.
    • Peningkatan “ untuk ” loop digunakan untuk mengulangi variabel “ atribut ” atas yang disediakan “ src ”parameter.
    • Di dalam loop, gunakan “ jika ” pernyataan yang menavigasi melalui kedua kesalahan dan jika ada elemen yang berada di kedua array memiliki tipe data yang sama. Kemudian elemen-elemen tersebut diteruskan sebagai parameter ke “ menggabungkan() ” berfungsi menciptakan sifat rekursif.
    • Jika tipenya tidak sama maka nilai elemen yang berada di “ src ” array parameter diteruskan ke “ dibutuhkan ”parameter.
    • Akhirnya, “ dibutuhkan ” array parametrik dikembalikan.

Membekukan Prototipe

Pencegahan lain terhadap serangan polusi prototipe adalah dengan membekukan siklus eksekusinya. Ini dilakukan melalui “ Objek.freeze() ' metode. Dalam cuplikan di bawah ini, kode tercemar prototipe yang disuntikkan di atas akan dibekukan:

konstanta y = { A: 1 , B: 2 } ;
data const = JSON.parse ( '{'__proto__': { 'rusak': benar}}' ) ;

const c = Objek.penetapan ( { } , dan, data ) ;
konsol.log ( c.rusak ) ;

konsol.log ( Objek.freeze ( c.rusak ) ) ;
konsol.log ( Objek.adalah Beku ( c.rusak ) ) ;


Penjelasan kode diatas seperti dibawah ini:

    • Awalnya, kode prototipe dummy yang tercemar akan dimasukkan ke dalam daftar dummy “ Dan ” seperti yang dijelaskan pada bagian di atas.
    • Kemudian, kunci yang terkontaminasi disuntikkan “ salah ” diteruskan ke “ membekukan() ” metode untuk membekukan bagian yang tercemar.
    • Akhirnya, untuk mengkonfirmasi bagian polusi prototipe yang dibekukan. “ salah ” kunci daftar “ C ” diteruskan ke “ Membeku() ' metode. Metode ini mengembalikan “ BENAR ” jika dibekukan dan “ PALSU ” jika dicairkan:

Setelah mengeksekusi kode yang berisi, output menunjukkan bahwa injeksi, pembekuan, dan verifikasi kode beku tercemar:


Tips Tambahan untuk Mencegah Serangan Polusi Prototipe

Beberapa tip tambahan yang dapat digunakan untuk mencegah serangan polusi prototipe dinyatakan di bawah ini:

    • Pilihan “ –nonaktifkan-proto ” dapat digunakan untuk menonaktifkan atau menghentikan kerja “ prototipe.__proto__ ' Properti.
    • Jangan gunakan metode dengan bantuan “ prototipe ”.
    • Oleh ' Sanitasi Masukan Pengguna ” yang melibatkan validasi dan pemfilteran masukan pengguna untuk menghapus kode berbahaya atau tercemar.
    • Penggunaan ' daftar putih ”, yang merupakan daftar properti dan metode yang diperbolehkan untuk suatu objek. Segala upaya untuk menyetel atau mendapatkan properti atau metode yang bukan anggota daftar putih akan diblokir.

Sekian tentang pencegahan serangan polusi prototipe di Node.js.

Kesimpulan

Untuk mencegah serangan polusi Prototipe, pendekatan seperti menghindari penggabungan rekursif yang tidak aman, membekukan prototipe, dan penggunaan daftar putih untuk mencegah “ __Karena itu__ ” Properti yang disetel dapat digunakan. Seiring dengan pemanfaatan “ –nonaktifkan-proto ” pilihan, hindari penggunaan “ Objek.prototipe ', Dan ' membersihkan Masukan Pengguna ” untuk kode yang tercemar. Panduan ini telah mengilustrasikan pencegahan serangan polusi prototipe di Nodejs.