Secure Development on PHP – Part 2 : Cross-site Scripting

Introduction

Berdasarkan data dari W3Techs pada April 2019, PHP merupakan bahasa pemrograman server-side terpopuler dan digunakan oleh 79% website yang ada. Tapi,apakah semua developer sudah tahu tentang secure development pada PHP? Lantas,bagaimana secure development pada PHP itu? Jawabannya ada pada artikel dibawah ini yang dibagi dalam beberapa part.

Cross-site Scripting

Cross-site Scripting atau yang biasa disebut XSS merupakan vulnerability yang sering ditemui pada sebuah aplikasi. Bahkan, XSS menempati posisi ke 7 pada OWASP Top 10.

Pada XSS, kode client-side di inject ke dalam output halaman web, misalnya sebagai atribut HTML, dan dieksekusi di browser pengguna. Dampaknya. Serangan XSS dapat mengarahkan pengguna ke situs web berbahaya atau dapat digunakan untuk mencuri credential, cookie, atau token anti-CSRF.

Causes of Vulnerability

Saat input dari pengguna tidak di filter, maka memungkinkan attacker untuk menginjeksi serangkaian code javascript yang nantinya akan dieksekusi oleh browser pengguna.

Cross-site Scripting Prevention in PHP

Insecure Code Sample :

Pada sample berikut, input pengguna dari parameter GET digunakan secara langsung sebagai output tanpa di filter. ini merupakan contoh simple dari Reflected XSS.

function no_check($data)
{
    return $data;
}

Jika attacker memasukkan kode JavaScript alih-alih teks murni (misalnya,<script> alert(‘xss’); </script>), maka input attacker akan dieksekusi saat page di akses :

Beberapa developer menggunakan campuran tag HTML inline, PHP, dan JavaScript, yang juga dapat dengan mudah untuk dieksploitasi :

<script type="text/javascript">
var term = <?php echo $_GET['string']; ?>
</script>

Dalam contoh ini, attacker bahkan tidak perlu menggunakan tag <script> karena malicious input akan disuntikkan langsung ke JavaScript.

Secure Code Sample :

Cross-site Scripting dapat dieksploitasi dengan banyak cara, yang berarti bahwa blacklist bukan ide yang baik. Solusi yang disarankan adalah validasi input sebelum menggunakannya sebagai output. Ketika di-encoding, karakter HTML dikonversi menjadi entitas HTML, yang berarti bahwa browser tidak akan menafsirkannya sebagai kode tetapi sebagai data.

Ada dua fungsi yang dapat digunakan dalam aplikasi PHP untuk escaping data: htmlspecialchars () dan htmlentities (). Fungsi htmlspecialchars () mengkonversi karakter khusus berikut ‘, “, &, <,> ke’,”, &, <, dan>. Fungsi htmlentities () sangat mirip dengan htmlspecialchars () dengan satu perbedaan – ia mengkodekan semua karakter yang memiliki setara entitas HTML. Pada PHP 5.6, UTF-8 adalah set karakter default untuk kedua fungsi.

function xss_check($data, $encoding = "UTF-8")
{
    return htmlspecialchars($data, ENT_QUOTES, $encoding);
}

Ada beberapa library open source yang tersedia untuk PHP yang bisa digunakan. Perpustakaan ini terus diperbarui dengan teknik perlindungan terbaru. Beberapa contohnya yaitu Google-antixss dan xssprotect, HTML Purifier, dan htmLawed.

Conclusion

Cross-site Scripting atau yang biasa disebut XSS merupakan kerentanan yang menempati peringkat ke-7 pada OWASP Top 10. XSS terjadi karena input dari user tidak difilter atau divalidasi sehingga memungkinkan attacker untuk memasukkan code melalui client-side.

Reference

Leave a Reply

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

Back To Top