10 - Cross Site Scripting
10 - Cross Site Scripting
Eng
Petunjuk Praktikum
A. Dasar Teori
Cross site scripting (XSS) adalah jenis serangan yang mengijinkan kode (client side
script) ke dalam suatu website untuk dijalankan melalui client. Dengan menggunakan teknik
ini, attacker dapat mem-bypass sistem dan menaikkan hak akses.
XSS mengacu pada teknik hacking yang memanfaatkan kerentanan dalam kode
aplikasi web yang memungkinkan penyerang mengirim konten berbahaya dari end user dan
mengumpulkan beberapa jenis data dari korban.
Serangan XSS memiliki 2 tipe yaitu Non persistent dan Persistent, namun intinya
sama yaitu mengijinkan script untuk dijalankan oleh client.
B. Tujuan
1. Mahasiswa dapat mengetahui celah keamanan pada aplikasi web yang dapat diserang
dengan xss.
2. Mahasiswa dapat mengetahui dan mencegah serangan xss pada aplikasi web.
C. Catatan
1. Praktikum dapat dilakukan di Sistem Operasi Windows atau Ubuntu.
2. Lakukan Instalasi instalasi Xampp atau Wamp Server untuk Sistem Operasi Windows dan
Lamp Server untuk Sistem Operasi Ubuntu.
3. Jalankan service web server dan mysql server untuk melakukan praktikum.
1
Praktikum Sistem Keamanan Informasi By : Lindung Siswanto, S.Kom., M.Eng
3. Klik tab SQL, masukkan kode berikut untuk menambah data pada tabel
Perintah tersebut akan menambah data di tabel guestbook, klik pada nama tabel untuk
melihat data yang dihasilkan.
Simpanlah file tersebut di folder yang anda buat dengan nama search.php
6. Pada teks editor, buatlah file hasil_nim.php dan simpan pada folder yang sama.
<?php
mysql_connect("localhost","root","xxxxxx");
mysql_select_db("nim");
$q=@$_GET['q'];
if(isset($_GET['submit'])) {
$ambil=mysql_query("select * from guestbook where nama like '%$q%'");
$cek=mysql_num_rows($ambil);
if($cek>0) {
$data=mysql_fetch_array($ambil);
echo "hasil dari keyword : $q adalah <br>";
echo "$data[nama]<hr>";
}
else {
echo "hasil dari keyword : $q adalah <br>";
echo "data tidak ditemukan";
}
}else {
echo "tidak ada data yang dicari";
}
?>
2
Praktikum Sistem Keamanan Informasi By : Lindung Siswanto, S.Kom., M.Eng
Dapat dilihat bahwa browser menampilkan keyword yang dicari. Hasil dari pencarian
tidak dibutuhkan, yang dibutuhkan adalah output hasil pencarian pada address bar.
Dengan informasi yang didapatkan pada langkah sebelumnya, serangan awal dimulai
dengan fasilitas pencarian dengan memasukkan script dengan harapan browser dapat
menjalankan script tersebut.
Bug ini disebut dengan bug xss non persistent karena bug ini tidak berlaku pada user
yang sedang melihat halaman yang sama yaitu search.php. browser dapat
menampilkan halaman yang sama jika attacker mengirim link yang sudah dimanipulasi.
9. Pencegahan
- Pada file search.php gantilah
<form action="hasil.php" method="GET">
Menjadi :
<form action="hasil.php" method="POST">
- Lakukan percoban, capture hasilnya, lihat perbedaan pada url yang dihasilkan dan
tambahkan analisa anda.
<?php
$host="localhost"; $uname="root";
$pass="xxxxxx"; $db="nim";
$koneksi=mysql_connect($host,$uname,$pass);
mysql_select_db($db,$koneksi);
?>
3
Praktikum Sistem Keamanan Informasi By : Lindung Siswanto, S.Kom., M.Eng
Sesuaikan konfigurasi script diatas dengan database server pada komputer anda.
Simpan file tersebut dengan nama koneksi_nim.php
2. Pada aplikasi editor masukkan kode berikut :
<title>Buku Tamu</title>
<p class="judul"> Buku Tamu
<form method="post" action="proses_nim.php">
Nama *<br> <input class="kotak" type="text" name="nama"
size="34"><br>
Email *<br> <input class="kotak" type="text" name="email"
size="34"><br>
Pesan *<br> <textarea class="kotak" name="pesan" rows="8"
cols="40"></textarea>
<br> *) Wajib diisi <br>
<p> <input class="tombol" type="reset" value="Reset"
name="kosongkan">
<input type="submit" class="tombol" value="Kirim" name="kirim">
</form>
<p> [ <a href="lihatgb_nim.php">Lihat Data Tamu</a> ]
Simpan file tersebut dengan nama index.php pada direktori root web server.
4
Praktikum Sistem Keamanan Informasi By : Lindung Siswanto, S.Kom., M.Eng
a{ color:#000;
text-decoration:none;
}
a:hover { color:#2b4661;
text-decoration:none;
}
</style>
<table>
<?php
include'koneksi_nim.php';
$queryGb = mysql_query("select * from guestbook");
$jmlGb = mysql_num_rows($queryGb);
if($jmlGb==0)
{
echo"Data tamu masih kosong"; }
else
{ $queryTampil=mysql_query("select * from guestbook order by id desc");
echo"<p><b> DATA TAMU</b></p>";
echo "<table width=\"50%\">";
while($dataGb=mysql_fetch_array($queryTampil))
{
echo"<tr><td align=\"justify\">dari : <a
href=\"mailto:$dataGb[2]\">$dataGb[1]</a><br>";
echo"pesan : $dataGb[3]</td></tr>";
echo "<tr><th></th></tr>"; }
echo "</table>";
}
?>
<p> [ <a href="./">Buku Tamu</a> ]
5
Praktikum Sistem Keamanan Informasi By : Lindung Siswanto, S.Kom., M.Eng
Client side
scripting
Script disimpan
dan dijalankan di
server
Jenis serangan ini memberikan dampak global, ketika dijalankan maka script akan
tersimpan di server dan kemudian ditampilkan secara permanen secara “normal” ke
user lain. Setiap user yang mengakses halaman yang sama akan melihat tampilan yang
sama atau bahkan berbeda sesuai dengan script yang dimasukkan.
6. Cobalah memasukkan kode HTML berikut pada form pesan dan lihat hasilnya
a. Masukkan kode berikut :
<script language=”javascript”> document.write(“<h2>Attacked by
nim</h1>”);alert(“Saya berhasil…!!!”);</script>
6
Praktikum Sistem Keamanan Informasi By : Lindung Siswanto, S.Kom., M.Eng
7. Pencegahan
a. Menggunakan htmlentities
Bukalah file proses_nim.php, cari baris berikut :
$nama=$_POST['nama'];
$email=$_POST['email'];
$pesan=$_POST['pesan'];
Ubahlah baris tersebut menjadi :
$nama=trim(htmlentities($_POST['nama']));
$email=trim(htmlentities($_POST['email']));
$pesan=trim(htmlentities($_POST['pesan']));
Ulangi langkah 6 danlihat hasil nya
b. Menggunakan strip_tags
Pada baris yang sama seperti baris diatas, gantilah script menjadi :
$nama=trim(strip_tags($_POST['nama']));
$email=trim(strip_tags($_POST['email']));
$pesan=trim(strip_tags($_POST['pesan']));
Ulangi langkah 6, dan bandingkan dengan hasil pada langkah sebelumnya
c. Menggunakan htmlspecialchars
Pada baris yang sama seperti baris diatas, gantilah script menjadi :
$nama=trim(htmlspecialchars($_POST['nama']));
$email=trim(htmlspecialchars($_POST['email']));
$pesan=trim(htmlspecialchars($_POST['pesan']));
Ulangi langkah 6, dan bandingkan dengan hasil pada langkah sebelumnya
Lakukan percobaan diatas, capture hasilnya dan beri analisis singkat anda
F. Tugas
1. Buatlah laporan praktikum.
2. Lakukan analisa bagaimana percobaan non persistent pada langkah 8 dapat terjadi ?
3. Apa perbedaan antara htmlentities, strip_tags dan htmlspecialchars
?