Dalam penetration testing, setiap fitur yang menerima input dari pengguna perlu diperiksa dari sisi keamanan. Salah satu jenis kerentanan yang umum diperiksa pada aplikasi web adalah Reflected Cross-Site Scripting (XSS).
Reflected XSS dapat terjadi ketika input dari pengguna dipantulkan kembali oleh server ke halaman web tanpa proses escaping atau encoding yang sesuai. Dalam kondisi tertentu, browser dapat memperlakukan input tersebut sebagai bagian dari HTML atau JavaScript.
Pada pengujian aplikasi LabKeu, fitur pencarian menjadi salah satu area yang diperiksa karena menggunakan parameter yang berasal dari input pengguna. Pengujian dilakukan secara bertahap mulai dari pemeriksaan layanan, pengecekan endpoint, pemeriksaan source code, hingga pengiriman marker melalui request HTTP.
🔎 Fokus Pengujian
Topik: Pengujian Potensi Reflected Cross-Site Scripting (XSS)
Aplikasi: LabKeu
Fitur: Pencarian
Endpoint: /search
Parameter: q
Metode: Black-box Web Application Testing dengan pemeriksaan source code sebagai evidence pendukung
❓ Apa Itu Reflected XSS?
Reflected XSS adalah kerentanan yang terjadi ketika data yang dikirim oleh pengguna dimasukkan kembali ke dalam response halaman tanpa pengamanan output yang memadai.
Secara sederhana, alurnya dapat digambarkan sebagai berikut:
Input pengguna
↓
Server menerima parameter
↓
Parameter diproses
↓
Nilai dikembalikan ke response
↓
Browser menerima responseApabila data pengguna dikembalikan tanpa encoding atau escaping yang sesuai, terdapat kemungkinan browser memproses data tersebut sebagai bagian dari HTML atau JavaScript. Oleh karena itu, pengujian tidak cukup hanya dengan melihat apakah suatu input dapat dikirim. Response dan cara aplikasi memproses input juga perlu diperiksa.
🌐 Mengenal Fitur Pencarian LabKeu
Sebelum melakukan pengujian keamanan, terlebih dahulu dilakukan pemeriksaan terhadap layanan aplikasi untuk memastikan web server sedang berjalan dan dapat menerima koneksi pada port yang digunakan.
Pada LabKeu, layanan web berjalan pada port 3000. Pemeriksaan dilakukan dari terminal Ubuntu menggunakan file informasi koneksi TCP sistem.
grep -i ':0BB8' /proc/net/tcpNilai hexadecimal 0BB8 merupakan representasi dari port 3000. Dari hasil pemeriksaan terlihat bahwa layanan tersebut sedang dalam keadaan listening.

Screenshot tersebut digunakan sebagai bukti awal bahwa layanan web LabKeu aktif pada port yang digunakan selama pengujian.
🔍 Memeriksa Endpoint Pencarian
Setelah layanan dipastikan aktif, endpoint pencarian diperiksa menggunakan request HTTP dari komputer penguji.
curl.exe -I http://192.168.56.105:3000/searchHasil pemeriksaan menunjukkan response 302 Found dengan tujuan /login. Hal ini menunjukkan bahwa endpoint /search tersedia, tetapi akses langsung tanpa session autentikasi diarahkan kembali ke halaman login.
HTTP/1.1 302 Found
Location: /login
Hasil ini penting untuk dokumentasi karena menunjukkan perilaku endpoint ketika diakses tanpa autentikasi. Pada tahap ini belum dapat disimpulkan adanya XSS.
🧩 Memeriksa Source Code Fitur Pencarian
Setelah endpoint ditemukan, langkah berikutnya adalah memeriksa source code aplikasi untuk mengetahui route yang menangani pencarian.
grep -Rni "router.get('/search'\|app.get('/search'\|/search" /home/labkeu/lab-simulasi-gemati/app/routes /home/labkeu/lab-simulasi-gemati/app/server.jsPerintah tersebut digunakan untuk mencari bagian source code yang berkaitan dengan endpoint /search. Pemeriksaan source code membantu mengetahui file route yang digunakan aplikasi dalam menangani request pencarian.

Source code tersebut digunakan sebagai evidence pendukung untuk memahami bagaimana request pencarian diproses oleh aplikasi.
🔎 Memeriksa Parameter Pencarian
Dalam pengujian Reflected XSS, salah satu bagian penting adalah mengetahui apakah aplikasi menerima parameter yang berasal langsung dari pengguna. Pada fitur pencarian LabKeu, parameter yang diperiksa adalah q.
grep -RniE "req\.query\.q|query\.q|q\s*=" /home/labkeu/lab-simulasi-gemati/appPerintah tersebut digunakan untuk mencari penggunaan parameter q pada source code aplikasi. Dari pemeriksaan ini dapat diketahui bagian kode yang mengambil nilai input pencarian.
Secara umum, bentuk request pencarian dapat dituliskan sebagai berikut:
/search?q=kata-kunciParameter q menjadi perhatian karena nilainya berasal dari input pengguna dan kemudian diproses oleh aplikasi.

Screenshot ini menunjukkan hasil pencarian parameter yang berkaitan dengan fitur pencarian pada source code aplikasi.
🧪 Pengujian Menggunakan Marker
Sebelum melakukan pengujian menggunakan payload keamanan, digunakan sebuah marker teks sederhana sebagai baseline.
DEVINA-PENTEST-3009Marker tersebut digunakan untuk melihat bagaimana aplikasi menangani nilai yang dikirim melalui parameter q.
curl.exe -i "http://192.168.56.105:3000/search?q=DEVINA-PENTEST-3009"Request tersebut digunakan untuk melihat response HTTP ketika parameter pencarian berisi marker yang telah ditentukan.
Mau Kuasai Reflected XSS pada Fitur Pencarian Aplikasi Web LabKeu Sampai Bisa Praktik Langsung?
Materi ini juga kami ajarkan langsung di kelas Edusoft Center, dibimbing mentor, sampai kamu bisa praktik nyata — bukan cuma baca teori.
Tanya Kursus via WhatsApp Lihat contoh project nyata dari siswa kami →

Evidence ini digunakan untuk mencatat bagaimana server memberikan response terhadap request pencarian yang membawa nilai marker.
⚠️ Apakah Reflected XSS Sudah Terbukti?
Hasil pengujian perlu dibedakan antara indikasi dan vulnerability yang benar-benar terkonfirmasi.
Dalam pengujian ini, endpoint /search berhasil ditemukan dan parameter q juga dapat diidentifikasi dari source code. Namun, akses langsung ke endpoint tanpa autentikasi memberikan response 302 Found yang mengarahkan request ke /login.
Karena belum terdapat evidence yang menunjukkan bahwa input marker maupun payload JavaScript berhasil dipantulkan dan dieksekusi oleh browser, maka Reflected XSS belum dapat dinyatakan terkonfirmasi berdasarkan pengujian yang telah dilakukan.
Kesimpulan tersebut penting agar laporan pentest tetap sesuai dengan evidence dan tidak memasukkan klaim yang belum berhasil dibuktikan.
💻 Peran Source Code sebagai Evidence Pendukung
Source code dapat membantu menjelaskan bagaimana aplikasi menerima dan memproses input dari pengguna. Namun, source code saja tidak cukup untuk menyatakan bahwa vulnerability telah berhasil dieksploitasi.
Dalam pengujian ini, pemeriksaan source code digunakan untuk mencari route pencarian dan penggunaan parameter q. Evidence tersebut kemudian dibandingkan dengan response HTTP yang diperoleh selama pengujian.
Parameter q
↓
Route pencarian
↓
Pemrosesan request
↓
Response aplikasi
↓
Pemeriksaan hasilDengan alur tersebut, hasil assessment dapat ditelusuri dari request sampai response dan tidak hanya bergantung pada asumsi.
📊 Risiko Reflected XSS
Reflected XSS dapat menjadi masalah keamanan ketika input pengguna diproses oleh aplikasi tanpa mekanisme output encoding atau escaping yang sesuai.
Apabila pada kondisi tertentu input dapat dieksekusi sebagai JavaScript pada origin aplikasi, dampaknya dapat mencakup perubahan tampilan halaman atau tindakan lain dalam konteks browser pengguna.
Namun, pada assessment ini dampak tersebut belum boleh dinyatakan sebagai hasil aktual karena eksekusi JavaScript belum berhasil dibuktikan.
🛡️ Cara Mencegah Reflected XSS
Pencegahan Reflected XSS dapat dilakukan dengan memastikan input dari pengguna tidak langsung diperlakukan sebagai HTML atau JavaScript.
1. Gunakan Output Encoding
Data yang berasal dari pengguna perlu di-encode sebelum ditampilkan kembali pada halaman.
2. Gunakan Escaping pada Template
Template engine sebaiknya menggunakan mekanisme escaping ketika merender data dari pengguna agar karakter tertentu tidak diperlakukan sebagai kode HTML atau JavaScript.
3. Validasi Input
Parameter pencarian dapat divalidasi sesuai kebutuhan fitur sehingga input yang tidak sesuai dapat ditangani dengan aman.
4. Terapkan Content Security Policy
Content Security Policy atau CSP dapat digunakan sebagai lapisan keamanan tambahan untuk membatasi sumber script yang dapat dijalankan oleh halaman web.
5. Perhatikan Konfigurasi Session Cookie
Cookie session juga perlu dikonfigurasi dengan atribut keamanan yang sesuai, seperti HttpOnly, Secure, dan SameSite sesuai kebutuhan aplikasi.
📝 Dokumentasi Evidence
Setiap hasil pengujian sebaiknya disimpan dalam bentuk screenshot dan catatan teknis agar proses assessment dapat ditelusuri kembali.
evidence/
├── 01-port-3000.png
├── 02-search-redirect.png
├── 03-search-source-code.png
├── 04-search-parameter.png
└── 05-search-marker.pngKelima evidence tersebut mewakili tahapan pemeriksaan layanan, endpoint, source code, parameter pencarian, dan pengiriman marker melalui request HTTP.
💡 Hal yang Bisa Dipelajari dari Pengujian
Pengujian keamanan pada fitur pencarian menunjukkan bahwa sebuah fitur sederhana tetap perlu diperiksa dari sisi input dan output. Parameter yang diterima oleh server perlu dipahami sebelum dilakukan pengujian lanjutan.
Pengujian secara bertahap juga membantu menghasilkan evidence yang lebih terstruktur. Pemeriksaan dimulai dari layanan yang aktif, dilanjutkan dengan endpoint, source code, parameter, kemudian request dengan marker.
Pendekatan tersebut membantu membedakan antara indikasi awal dan vulnerability yang benar-benar terkonfirmasi.
🔐 Ringkasan Pengujian
- Aplikasi: LabKeu
- Fitur: Pencarian
- Endpoint:
/search - Parameter:
q - Marker:
DEVINA-PENTEST-3009 - Metode: Pemeriksaan layanan, endpoint, source code, dan request HTTP
- Evidence: Screenshot terminal dan response HTTP
- Status Reflected XSS: Belum terkonfirmasi
✅ Kesimpulan
Reflected XSS merupakan salah satu kerentanan aplikasi web yang berkaitan dengan cara aplikasi menangani dan menampilkan kembali input pengguna.
Pada aplikasi LabKeu, pengujian difokuskan pada fitur pencarian dengan endpoint /search dan parameter q. Pemeriksaan dilakukan mulai dari memastikan layanan pada port 3000 aktif, memeriksa response endpoint, mencari route pencarian pada source code, memeriksa penggunaan parameter q, hingga mengirim marker melalui request HTTP.
Hasil pengujian menunjukkan bahwa endpoint /search merespons dengan redirect ke /login ketika diakses tanpa autentikasi. Oleh karena itu, berdasarkan evidence yang tersedia, Reflected XSS belum dapat dinyatakan sebagai vulnerability yang terkonfirmasi.
Dokumentasi pentest yang baik harus selalu mengikuti hasil evidence yang diperoleh selama assessment. Dengan demikian, setiap kesimpulan yang ditulis dalam laporan dapat dipertanggungjawabkan berdasarkan hasil pengujian yang benar-benar dilakukan.
Penulis : Devina Ghea Amanda
Mau Kuasai Reflected XSS pada Fitur Pencarian Aplikasi Web LabKeu Sampai Bisa Praktik Langsung?
Materi ini juga kami ajarkan langsung di kelas Edusoft Center, dibimbing mentor, sampai kamu bisa praktik nyata — bukan cuma baca teori.
Tanya Kursus via WhatsApp Lihat contoh project nyata dari siswa kami →
