Cross-Site Scripting, dikenal luas sebagai XSS, adalah salah satu metode serangan paling berbahaya yang digunakan oleh penjahat dunia maya, jadi sangat penting bagi setiap pengembang dan peneliti keamanan untuk mengetahui apa itu dan bagaimana caranya mencegah serangan. Jadi, bagaimana Anda bisa mengambil tindakan terhadap kerentanan XSS? Anda menggunakan HTML, JavaScript, atau DOM untuk menampilkan data yang diterima situs web dari pengguna. Satu atau lebih dari tiga area berbeda ini dapat bekerja sama.
Cara Mencegah XSS Menggunakan HTML
XSS memungkinkan penyerang menyuntikkan kode berbahaya atau skrip ke dalam laman web, menargetkan pengguna yang tidak menaruh curiga yang mengunjungi situs tersebut. Ini dapat mencuri data pribadi, mengalihkan pengunjung ke situs lain yang dibuat oleh penjahat dunia maya, atau merusak tampilan halaman web. Tapi Anda bisa mencegah hal ini terjadi; misalnya, dengan menghentikan mereka memasukkan HTML.
Bayangkan Anda memiliki situs web dengan buku tamu. Misalkan pengunjung Anda yang menggunakan buku tamu ini dapat menulis nama dan pesan mereka di sini, dan pesan mereka dapat dilihat secara publik. Penyerang yang ingin membuat tes XSS di buku tamu Anda akan menggunakan area yang telah Anda alokasikan untuk menulis pesan. Penjahat dunia maya itu akan menjalankan kode JavaScript di sini. Misalnya, penyerang dapat menggunakan kode JavaScript seperti:
<naskah>peringatan("XSS!")</script>
Penyerang harus menggunakan tag skrip agar berhasil. Jika tidak, kode JavaScript tidak akan berfungsi. Anda harus menyandikan pernyataan < sehingga pengguna tidak pernah dapat menggunakan tag HTML. Ini akan mempersulit penyerang untuk bekerja dengan tag HTML.
Cara Mencegah XSS Menggunakan JavaScript
Logika dalam HTML juga valid dalam JavaScript. Di beberapa aplikasi, dimungkinkan untuk mencetak data yang diterima situs web dari pengguna dengan kode JavaScript.
Pertimbangkan pengkodean ini:
<p id="mencetak"></P>
<naskah>
dokumen.getElementById("tes").innerHTML = "";
</script>
Bayangkan sebuah situs web menggunakan blok kode seperti di atas. Pengembang menggunakan tag "p" yang disebut "cetak" di sini. Seperti yang Anda lihat dari kode, nilai akan muncul dari parameter "pencarian", dan pengembang ingin menampilkan nilai yang masuk ini di tag "p". Pengembang yang membuat operasi ini ingin menggunakan fitur innerHTML dari JavaScript.
Sekarang mari kita lihat situasinya dari sudut pandang penyerang dunia maya. Dalam kasus seperti itu, penyerang akan melakukan tes XSS di dalam tag "skrip". Untuk ini, penyerang tidak perlu me-restart tag, karena tag "script" sudah digunakan. Penyerang kemudian dapat menulis tes seperti ini:
nama file.php? cari=a" peringatan("XSS!"); f= "
Kode ini akan muncul di situs web sebagai:
dokumen.getElementById("tes").innerHTML = " A" peringatan("XSS!"); f="";
Serangan itu akan berhasil. Untuk lebih memahami masalahnya, mari kita periksa satu lagi contoh teknik yang dapat digunakan penyerang. Peretas mungkin telah menerapkan tes XSS seperti:
nama file.php? cari=";</script><em>Fatih</em>
Seperti ini jika dilihat dari websitenya:
dokumen.getElementById("tes").innerHTML = "";</script><em>Fatih</em>";
Ini mungkin tampak sedikit aneh karena penyerang telah menutup tag "skrip" pertama dengan menggunakan struktur seperti "/ skrip" di sini. Jadi, penyerang dapat memulai ulang kode JavaScript dan HTML apa pun yang mereka inginkan.
Jika Anda memikirkan dua contoh berbeda ini, melindungi dari XSS tampaknya cukup sederhana. Tindakan pencegahan yang diperlukan adalah menyandikan file " Dan ' karakter yang Anda lihat pada contoh pertama. Pada contoh kedua, enkodekan karakter < Dan >.
Cara Mencegah XSS Menggunakan DOM
Dalam varian XSS ini, data yang diterima situs web dari pengguna dapat mengganggu properti elemen DOM. Misalnya, informasi warna yang diterima situs dari pengguna dapat memengaruhi warna latar belakang tabel atau seluruh latar belakang halaman. Jadi tanpa disadari pengguna mengganggu tata letak gaya tubuh dan tabel. Kode berikut adalah contoh yang bagus untuk ini:
<body bgcolor="<?php gema $_GET['warna']; ?>"/>
Dengan ini, situs web menggunakan parameter "warna" yang diterima dari pengguna secara langsung di properti "bgcolor" dari elemen "tubuh". Jadi apa yang bisa dilakukan penyerang pada saat ini? Mereka dapat menjalankan kode berbahaya ini:
nama file.php? warna=merah" memuat="peringatan('XSS!')
Tampilannya seperti ini jika dilihat dari websitenya:
<body bgcolor=" merah" memuat="peringatan('XSS!') "/>
Untuk mencegah hal ini terjadi, pengembang harus menyandikan " karakter.
Namun, ada satu lagi elemen penting dalam JavaScript yang perlu diperhatikan. Cuplikan kode berikut adalah contoh untuk ini:
<a href="javascript: waspada('XSS!')">
Artinya, beberapa kode JavaScript dapat dijalankan secara langsung. Salah satu tindakan pencegahan terbaik adalah memastikan situs web memeriksa apakah data yang diterima dari pengguna adalah URL asli. Metode paling sederhana adalah memastikan ada ekspresi seperti "HTTP" dan "HTTPS" (versi aman HTTP) dalam koneksi.
Contoh Fungsi Mencegah XSS Dengan PHP
Anda telah melihat beberapa contoh cara melindungi aplikasi atau situs web dari serangan XSS. Anda dapat menggunakan cuplikan kode dalam tabel ini dengan PHP:
Enkode dalam HTML |
htmlspecialchars($str, ENT_COMPAT) |
Enkode dalam atribut JavaScript dan DOM |
htmlspecialchars($str, ENT_NOQUOTES) |
Pemeriksaan URL |
'/^(((https?)|(\/\/))).*/'; |
Perhatikan bahwa ini hanyalah contoh dan akan bervariasi tergantung pada bahasa perangkat lunak yang Anda gunakan.
Kamu bisa membuat aplikasi web dengan PHP dan coba kode yang Anda lihat di atas untuk mengirimkannya. Jika Anda bertanya-tanya bagaimana cara menggunakan semua metode ini, Anda bisa mendapatkan beberapa ide dari blok kode PHP di bawah ini, yang akan berguna bahkan jika Anda menggunakan bahasa yang berbeda:
<?php
$data = $_GET['data'];fungsidalam_atribut($str){
kembali htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT akan menyandikan karakter kutip ganda ("").
}
fungsiin_html($str){
$tautan = '/^(((https?)|(\/\/))).*/';
jika(!preg_match($tautan, $str))
{
kembali "/";
}
kembali $str;
}
$data = in_attribute($data);
$data = in_html($data);
$data = real_url (data);
?>
Lindungi Situs Web Anda Dari XSS dan Lainnya
XSS adalah vektor serangan populer yang digunakan oleh peretas. Biasanya, nilai jalur di URL, bidang apa pun di situs web tempat data dapat dimasukkan (seperti formulir dan bidang komentar), dapat digunakan untuk menguji kerentanan XSS. Namun tentu saja, ada banyak metode berbeda yang dapat digunakan penjahat dunia maya untuk menyerang sebuah situs, terutama jika Anda memiliki situs web yang memiliki banyak pengguna dan menyembunyikan informasinya.