Cara Mengatasi Serangan XSS Pada Codeigniter
Apa itu XSS?
XSS merupakan singkatan dari cross site scripting.
Alasan singkatan yang digunakan XSS bukan CSS, karena CSS sudah digunakan untuk cascade style sheet.
Jadi X untuk singkatan kata Cross.
XSS merupakan salah satu bentuk serangan pada aplikasi web yang dilakukan dengan menginjeksi kode javascript dari sisi client.
Dampak yang bisa diakbiatkan XSS:
- Keamanan aplikasi web dapat di-bypass;
- Data user dapat dicuri;
- Halaman yang terkena XSS bisa dijadikan media Phising;
- dan lain-lain.
Cara Mengatasi XSS di Codeigniter
“Untuk menangkap pencuri, kita harus berpikir seperti pencuri”
Mari kita pelajari bagaimana cara melakukan serangan XSS agar bisa menghindarinya.
1. Reflected XSS
Ini adalah jenis serangan XSS yang sering dilakukan attacker.
Biasanya terjadi pada input dari parameter query string yang kita tampilkan.
Contoh:
Misalkan kita punya fitur pencarian seperti ini:
<?php
class Search extends CI_Controller
{
public function index()
{
$data["keyword"] = $this->input->get("keyword");
// do search and render result to view
$this->load->view('search', $data);
}
}Kemudian pada view, kita menampilkan $keyword yang diinputkan seperti ini:
<p>Hasil pencarian dengan kata kunci <?= $keyword ?></p>
<p>Hasil: ...</p>Sekilas tidak ada masalah dengan kode ini.
Tapi coba inputkan keyword dengan kode Javascript seperti ini:
index.php/search/?keyword=<script>alert('hacked!')</script>Maka hasilnya:
Bagaimana cara mengatasi serangan ini?
✅ Solusinya:
Gunakan fungsi htmlentities() pada view untuk menampilkan variabel $keyword.
<p>Hasil pencarian dengan kata kunci <?= htmlentities($keyword) ?></p>
<p>Hasil: ...</p>Maka sekarang halaman ini tidak akan bisa diserang XSS.
Tapi jangan senang dulu..
Masih ada jenis serangan XSS yang lainnya:
2. Stored XSS
Stored XSS adalah serangan XSS yang dilakukan dengan memasukan injeksi XSS pada input yang disimpan ke database.
Sebenarnya tidak harus database, yang penting input itu disimpan di suatu tempat.
Nantinya, saat ditampilkan di halaman view.. kode injeksi XSS-nya akan dieksekusi.
Contohnya:
Misalkan kita membuat fitur untuk aplikasi lowongan pekerjaan. Input yang kita butuhkan untuk menambahkan lowongan baru sebagai berikut.
namenama atau judul lowongan kerja;
job_image_urlalamat URL poster;
job_urlalamat pendaftaran lowongan kerja.
Bentuk kode di Controller-nya seperti ini:
📜 controllers/Jobvacancy.php
<?php
class Jobvacancy extends CI_Controller
{
public function addjob()
{
if ($this->input->method() === "post") {
$data["job"] = $this->input->post();
// di sini biasanya dilakukan penyimpanan ke database
return $this->load->view("list_job", $data);
}
$this->load->view('add_job_form');
}
}berikut ini kode untuk view-nya.
📜 views/list_job.php
<h1><?= $job["name"] ?></h1>
<img src='<?= $job["job_image_url"] ?>' />
<br>
<a href='<?= $job["job_url"] ?>'>Link Pendaftaran</a>
📜 views/add_job_form.php
<form action="" method="post">
<label for="name">Vacancy Job name</label>
<input type="text" name="name" >
<br>
<label for="job_image_url">Image URL</label>
<input type="text" name="job_image_url">
<br>
<label for="job_url">Job URL</label>
<input type="text" name="job_url">
<br>
<input type="submit" value="Simpan">
</form>Ini hasilnya saat kita inputkan data yang benar.
Komentar
Posting Komentar