Bagaimana mengatasi serangan XSS?
XSS atau Cross Site Script merupakan salah satu jenis serangan
yang berbahaya dan paling banyak ditemukan di website manapun seperti
google, facebook, Amazon, Paypal, dll. Jika anda cek laporan bug pada
masing-masing website tersebut maka sebagian besar melaporkan serangan
XSS.
Serangan cross-site scripting biasanya digunakan untuk mencuri cookie, penyebaran malware, session hijacking / pembajakan session, dan pembelokkan tujuan / malicious redirects. Serangan ini tipikalnya adalah melakukan injeksi kode javascript terhadap sebuah website sehingga browser mengeksekusi kode/script yang diperintahkan oleh penyerang. Kelemahan ini mudah didapat tapi susah untuk diatasi. Inilah alasannya mengapa XSS banyak ditemukan di berbagai website.
Apa pengertian Cross-site Scripting atau XSS?
Anda mungkin berpikiran kenapa Cross-site scripting itu disingkat jadi XSS bukannya CSS? jawabnya adalah karena CSS sudah lebih familiar pada dunia desain web yaitu Cascading Style Sheet, maka dipilihlah XSS agar tidak menjadi rancu.
Sedangkan penjelasan mengenai XSS adalah suatu jenis serangan web dimana penyerang berusaha untuk menyisipkan script yang berisikan kode jahat terhadap suatu website untuk menjalankan suatu perintah.
Testing / percobaan XSS
Saya sudah menyiapkan halaman untuk pembelajaran XSS, silahkan kunjungi :
Sekarang anda masukkan script berikut pada inputan pencarian :
Maka akan muncul popup seperti gambar berikut :
Ini berarti website tersebut memiliki vulnerable XSS. Sekarang kita akan coba melakukan pengambilan cookie dari pengakses, masukkan script seperti berikut :
Langkah selanjutnya adalah biasanya sang penyerang mengirimkan link yang berisikan perintah XSS, contoh :
http://ethicninja.altervista.org/xss.php?q=%3Cscript%3Ealert%28%27Terimakasih%20cookienya%20;%29%27%29;alert%28document.cookie%29;%3C/script%3E
Aspek target XSS
Target XSS bisa dimana saja, di tempat yang tidak diduga sekalipun, inilah daftar aspek target yang banyak digunakan untuk eksploitasi XSS :
1. URL
2. HTTP referrer objects
3. Parameter GET
4. Parameter POST
5. Window.location
6. Document.referrer
7. document.location
8. document.URL
9. document.URLUnencoded
10. cookie data
11. headers data
12. database data
Bagaimana cara mengatasinya?
Pertama, lakukan encoding untuk karakter <, >,’ dan “. LIhat encoding dibawah :
& –> &
< –> <
> –> >
” –> “
‘ –> ‘
/ –> /
Untuk fungsi diatas jika anda menggunakan PHP anda dapat memakai fungsi htmlspecialchars() ini akan meng-encode semua Tag HTML dan spesial karakter.
Atau anda dapat menambahkan filter dengan str_replace
$input = str_replace(array(‘&’,’<’,’>’), array(‘&’,’<’,’>’), $input);
Atau menggunakan Open Source Libraries mengenai pencegahan XSS attack seperti PHP AntiXSS , HTML Purifier , xssprotect , XSS HTML Filter
Anda dapat menggunakan salah satu dari library diatas, semuanya sama baiknya yang penting lakukan pencegahan sejak dini, sebelum website anda terkena serangan.
Serangan cross-site scripting biasanya digunakan untuk mencuri cookie, penyebaran malware, session hijacking / pembajakan session, dan pembelokkan tujuan / malicious redirects. Serangan ini tipikalnya adalah melakukan injeksi kode javascript terhadap sebuah website sehingga browser mengeksekusi kode/script yang diperintahkan oleh penyerang. Kelemahan ini mudah didapat tapi susah untuk diatasi. Inilah alasannya mengapa XSS banyak ditemukan di berbagai website.
Apa pengertian Cross-site Scripting atau XSS?
Anda mungkin berpikiran kenapa Cross-site scripting itu disingkat jadi XSS bukannya CSS? jawabnya adalah karena CSS sudah lebih familiar pada dunia desain web yaitu Cascading Style Sheet, maka dipilihlah XSS agar tidak menjadi rancu.
Sedangkan penjelasan mengenai XSS adalah suatu jenis serangan web dimana penyerang berusaha untuk menyisipkan script yang berisikan kode jahat terhadap suatu website untuk menjalankan suatu perintah.
Testing / percobaan XSS
Saya sudah menyiapkan halaman untuk pembelajaran XSS, silahkan kunjungi :
http://ethicninja.altervista.org/xss.phpIsi script form tersebut adalah
<html> <head> <title>File Belajar cara mengatasi XSS</title> </head> <body> <h1>Belajar cara mengatasi XSS. </h1> <form action="" method="post"> <input type="text" name="q" value="" /> <input type="submit" value="Search" /> </form> <?php if (isset($_POST['q'])) echo 'Anda mencari : '. $_POST['q']; ?> <br><br> Ikuti tutorial lengkapnya di <a href="https://www.ethic.ninja/">Ethic Ninja</a> </body> </html>
<script>alert('Ethic Ninja');</script>
Ini berarti website tersebut memiliki vulnerable XSS. Sekarang kita akan coba melakukan pengambilan cookie dari pengakses, masukkan script seperti berikut :
<script>alert(document.cookie);</script>
http://ethicninja.altervista.org/xss.php?q=%3Cscript%3Ealert%28%27Terimakasih%20cookienya%20;%29%27%29;alert%28document.cookie%29;%3C/script%3E
Aspek target XSS
Target XSS bisa dimana saja, di tempat yang tidak diduga sekalipun, inilah daftar aspek target yang banyak digunakan untuk eksploitasi XSS :
1. URL
2. HTTP referrer objects
3. Parameter GET
4. Parameter POST
5. Window.location
6. Document.referrer
7. document.location
8. document.URL
9. document.URLUnencoded
10. cookie data
11. headers data
12. database data
Bagaimana cara mengatasinya?
Pertama, lakukan encoding untuk karakter <, >,’ dan “. LIhat encoding dibawah :
& –> &
< –> <
> –> >
” –> “
‘ –> ‘
/ –> /
Untuk fungsi diatas jika anda menggunakan PHP anda dapat memakai fungsi htmlspecialchars() ini akan meng-encode semua Tag HTML dan spesial karakter.
Atau anda dapat menambahkan filter dengan str_replace
$input = str_replace(array(‘&’,’<’,’>’), array(‘&’,’<’,’>’), $input);
Atau menggunakan Open Source Libraries mengenai pencegahan XSS attack seperti PHP AntiXSS , HTML Purifier , xssprotect , XSS HTML Filter
Anda dapat menggunakan salah satu dari library diatas, semuanya sama baiknya yang penting lakukan pencegahan sejak dini, sebelum website anda terkena serangan.
1
2
3
| < body bgcolor = "black" >< center >< font color = "green" size = "30" > This Site Was Hacked </ font ></ center ></ body > |
Berikut contoh lain serangan XSS yang dilakukan melalui modifikasi parameter URL (Uniform Resource Locator). Hal ini biasa terjadi pada form HTML yang menggunakan metode GET. Lihatlah parameter URL berikut,
Sekarang bagaimana kalau kita sisipkan kode JavaScript berikut di belakang parameter tersebut. Lebih tepatnya, ganti kata “Mojokerto” dengan script di bawah ini,
1
| <script>alert( "Is This Vulnerable!" );</script> |
Walaupun HTML Tag dan Javascript injection ini tidak berpengaruh besar pada sisi server, namun hal ini juga termasuk vulnerable. Karena dapat merusak tampilan website tersebut, dengan sedikit kreatifitas dari si peretas.
Nah, bagaimana sekarang kalau kita injeksikan kode Javascript berikut,
1
| <script>prompt( "Masukan Nomor PIN Anda?" , " " );</script> |
Jawabanya mudah sekali, yaitu dengan LINK HTML. Dengan membuat link yang menuju pada halaman yang sudah kita injeksikan tersebut, para korban akan lebih mudah tertipu. LINK tersebut juga dapat kita masukan ke website korban melalui fasilitas GuestBook, atau Komentar.
Saya disini tidak mengajarkan untuk berbuat jahat, namun memang itulah apa adanya yang harus kita ketahui. Dan untuk pencegahanya, kita dapat menggunakan fungsi khusus “htmlspecialchars” dari PHP. Tambahkan fungsi tersebut seperti contoh-contoh berikut,
1
2
3
4
5
6
| //contoh method POST $umur = htmlspecialchars( $_POST [ 'age' ]); //contoh method GET $nama = htmlspecialchars( $_GET [ 'name' ]); //contoh langsung echo "Alamat : " . htmlspecialchars( $_POST [ 'alamat' ]); |
Sedangkan untuk serangan XSS mengguanakn PHP sebagai bahan injeksinya, sebagian besar tidak akan berfungsi. Karna script tersebut akan langsung dirubah menjadi STRING. Lebih mudahnya adalah, tidak bisa menjalankan PHP di dalam PHP.
Untuk mengakali hal tersebut pun, kita masih bisa menggunakan fungsi eval(), yang tentunya Insya Allah akan kita ulas di bahasan berikutnya. AJKH