Tolong pilih kategori sesuai, jenis posting (diskusi atau bukan) dan sertakan tag/topik yang sesuai seperti komputer, java, php, mysql, dll. Promosi atau posting tidak pada tempatnya akan kami hapus!
- Bagi Anda yang ingin mendaftar, baca link berikut:
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

Apa itu XSS dan Cara Mengatasinya

edited September 2011 in Artikel & Tutorial Komputer
<b>Apa itu XSS</b>
XSS merupakan kependekan yang digunakan untuk istilah cross site scripting.

XSS merupakan salah satu jenis serangan injeksi code (code injection attack). XSS dilakukan oleh penyerang dengan cara memasukkan kode HTML atau client script code lainnya ke suatu situs. Serangan ini akan seolah-olah datang dari situs tersebut. Akibat serangan ini antara lain penyerang dapat mem-bypass keamanan di sisi klien, mendapatkan informasi sensitif, atau menyimpan aplikasi berbahaya.

<i>Dikutip dari <a href="http://id.wikipedia.org/wiki/XSS">Wikipedia</a></i>;

<b>Cara XSS</b>
<font color="red"><i><b>Disini saya hanya menerangkan tempat dimana XSS dapat dilakukan</b></i></font>

XSS yang paling banyak digunakan adalah jenis GET dan POST.
Salah satu contoh yang akan dibahas adalah jenis GET.

Lihat gambar dibawah ini :
<img src="http://i51.tinypic.com/r9euyh.png"/>;
Masukkan script alert sederhana ini pada URL yang mempunyai request GET<div class='geshi_syntax'><table><tr><td><div class='code'><pre class="php">http<span class="sy0">:</span><span class="co1">//localhost/Momonimo/search?search_key=<script>alert('XSS TRUE')</script></span></pre></div></td></tr></table></div>
Jika halaman tersebut (yang mempunyai database) dapat melakukan XSS, maka akan tampil alert seperti gambar sebagai berikut :
<img src="http://i51.tinypic.com/290ud4z.png"/>;


<b>Mengatasi XSS</b>
PHP sangat handal dalam melakukan konversi string dengan cepat. Tetapi jenis apa yang akan anda lakukan jika hal diatas terjadi?

Saya melakukan survey terhadap teman-teman programmer.
Tidak sedikit yang menjawab <i><b>"Pakai saja htmlentities() atau strip_tags()"</i></b>

<b>htmlentities()</b> memang dapat melakukan konversi tag-tag HTML, tetapi bagaimana dengan Javascript?

<b>strip_tags()</b> memang dapat melakukan konversi tag-tag HTML dan PHP dengan NULL byte, tetapi bagaimana dengan Javascript?

<i>Lalu apa yang harus dilakukan?</i>
Saya memakai <b>filter_var()</b> dengan tipe filter <b>Sanitize</b>
Caranya sebagai berikut :<div class='geshi_syntax'><table><tr><td><div class='code'><pre class="php"><span class="kw3">filter_var</span><span class="br0">(</span><span class="re0">$val</span><span class="sy0">,</span> FILTER_SANITIZE_STRING<span class="br0">)</span><span class="sy0">;</span></pre></div></td></tr></table></div>
Dan hasilnya adalah :
<img src="http://i55.tinypic.com/b4ux6v.png"/>;

Berikut adalah Fungsi untuk keseluruhannya :<div class='geshi_syntax'><table><tr><td><div class='code'><pre class="php"><span class="kw2">function</span> xss_filter<span class="br0">(</span><span class="re0">$val</span><span class="br0">)</span> <span class="br0">{</span>
<span class="re0">$val</span> <span class="sy0">=</span> <span class="kw3">htmlentities</span><span class="br0">(</span><span class="re0">$val</span><span class="br0">)</span><span class="sy0">;</span>
<span class="re0">$val</span> <span class="sy0">=</span> <span class="kw3">strip_tags</span><span class="br0">(</span><span class="re0">$val</span><span class="br0">)</span><span class="sy0">;</span>
<span class="re0">$val</span> <span class="sy0">=</span> <span class="kw3">filter_var</span><span class="br0">(</span><span class="re0">$val</span><span class="sy0">,</span> FILTER_SANITIZE_STRING<span class="br0">)</span><span class="sy0">;</span>
 
<span class="kw1">return</span> <span class="re0">$val</span><span class="sy0">;</span>
<span class="br0">}</span></pre></div></td></tr></table></div>

Saya membuat Fungsi diatas (dengan menambahkan htmlentities dan strip_tags) agar XSS key yang digunakan dapat terbaca semua. Semata-mata hanya ingin membuat rasa penasaran para hacker :)

Dan hasilnya seperti berikut :
<img src="http://i52.tinypic.com/flj3gy.png"/>;

<b>Note</b>
Script diatas semata-mata hanya ingin membantu pembaca lainnya untuk mengeksplorasi PHP lebih dalam saja.
Banyak hal yang dapat dilakukan untuk merusak aplikasi yang telah kita buat dan tentunya bukan hanya XSS saja. Karena tidak ada yang tidak mungkin dalam dunia ini.
Tagged:

Comments

  • Bagaimana dg htmlentities($val, ENT_QUOTES) ? Kayaknya mirip dg function xss_filter() di atas?
  • trims infonya,, :)
  • wao , , nice post gan
  • edited May 2013
    Nice info gan...  sangat membantu. Thanks
  • Mantappp gan, ane jadi tau lagi
  • browser skrg dah mengantisipasi teknik ini
  • Tambah ilmu
  • Sebagai Info, XSS itu ada 3 macam, DOM, Reflected dan Stored Type
    XSS sendiri dapat dicegah menggunakan beberapa cara seperti salah satunya menggunakan filtering inputan dari user sebelum di kirim GET atau POST. Untuk lebih mudahnya bisa menggunakan Web Application Firewall salah satunya OWASP ModSecurity CRS ( Open Source )
  • Tambahan info

    XSS atau Cross Site Scripting adalah teknik yang digunakan untuk menambahkan script pada sebuah website yang akan dieksekusi oleh user lain pada browser user lain tersebut.

    Kunci utama pada XSS yaitu user dapat memasukkan data melalui input form (contohnya input form seperti kita akan mem-posting sesuatu di forum) yang kemudian akan ditampilkan kemudian oleh user lain atau user itu sendiri. Kalau si programmer nya tidak men-strip-tags elemen HTML atau tanda bahasa pemrograman lain ya dengan udah akan bisa di cross site scripting.

    Contohnya gampang saja. Kalau ada buku tamu di sebuah website isi saja dengan alert(‘Anak-anak KIOSS’);

    Kalau keluar alert javascript di browser berarti site tersebut bisa di XSS. Biasanya site2 partai politik dengan mudah bisa di XSS karena programmernya kurang jeli.

    Cara untuk mengatasi XSS adalah dengan memberikan function seperti ini pada halaman insert anda

    function antixss($data)
    {
    $xss = htmlspecialchars(trim($data));
    return $xss;
    }
    Dari source diatas kita melihat 2 Fungsi, yakni fungsi htmlspecialchars dan trim, lalu apa sih kegunaanya?

    Htmlspecialchars : berfungsi untuk mengabaikan tag html, misal spasi dirubah menjadi %20, sehingga ketika ada attacker menyisipkan kode html, maka tidak akan terbaca sebagai Tag HTML, tetapi teks biasa.
    Trim : trim disini berfungsi untuk menghapus karakter spasi di depan teks.
    Untuk penggunaan fungsi anti xss sebagai berikut, misal kita akan gunakan di file simpan.php jadi kode lengkapnya sebagai berikut:

    <?php
    mysql_connect("localhost","root","") or die ("gagal Koneksi");
    mysql_select_db("db_guestbook") or die ("gagal koneksi database");
    function antixss($data)
    {
    $xss = htmlspecialchars(trim($data));
    return $xss;
    }
    $nama = antixss($_POST['nama']);
    $email = antixss($_POST['email']);
    $web = antixss($_POST['web'];);
    $pesan = antixss($_POST['pesan']);
    $tgl = date('Y-m-d');
    $query = mysql_query("insert into buku_tamu values('','$nama','$email','$web','$pesan','$tgl')");
    if(!$query)
    {
    echo "Gagal simpan buku tamu, silahkan ulangi.";
    }
    else
    {
    echo "Terima kasih $nama telah mengisi buku tamu.";
    }
    ?>
Sign In or Register to comment.