How To Fix XSS Injection in JSON

Learn System Security - Halo kawan kawan, apa kabarnya? seboga baik baik saja yaa.. kali ini saya tidak membahas tentang Bug Hunter/Bug yang saya temukan, tapi saya akan berbagi tips Cara Memperbaiki Bug XSS Injection di JSON, langsung saja cek dibawah ini.

Yang pertama kita buat dulu file php seperti dibawah ini :
<?php
if(isset($_GET['test'])){
    $test = $_GET['test'];
    $array = array("test"=>$test);
    echo json_encode($array);
}
Jadi apapun yang ada pada $_GET['test'] akan menjadi value/isi dari array['test'].
URL seperti dibawah ini :
level1.php?test=123
Akan mendapatkan response berupa :
{"test":"123"}

Tapi, ketika kita coba mengganti 123 pada URL diatas dengan Payloads XSS, akan terjadi XSS pada halaman tersebut, berikut ini payloads yang saya gunakan :
<img+src=x+onerror=alert(1)>
Jadi saya mendapatkan URL seperti dibawah ini :
http://localhost/tryxss/json/level1.php?test=<img+src=x+onerror=alert(1)>

Source code dari halaman JSON yang terjadi XSS :

Lalu bagaimana cara memperbaiki?
Kita menambahkan kode dibawah ini :
header('Content-type: application/json');
dan menambah beberapa ekstensi seperti :
JSON_HEX_TAG untuk mengubah tag HTML < dan > menjadi \u003C and \u003E
JSON_HEX_APOS mengubah single quote ( ' ) menjadi \u0027 Hal ini bermanfaat ketika meletakkan JSON pada atribut elemen HTML
JSON_HEX_QUOT mengubah double quote ( " ) menjadi \u0022
JSON_HEX_AMP mengubah ( & ) menjadi \u0026

Jadi script full dari file json yang kita buat seperti dibawah ini :
<?php
if(isset($_GET['test'])){
    header('Content-type: application/json');
    $test = $_GET['test'];
    $array = array("test"=>$test);
    echo json_encode($array, JSON_HEX_TAG | JSON_HEX_QUOT | JSON_HEX_APOS | JSON_HEX_AMP);
}

Saat kita coba membuka halaman tersebut, XSS tidak akan ada karena TAG ataupun karakter tertentu akan di encode seperti pada screenshot dibawah ini :

Itu sedikit berbagi tutorial "Cara Memperbaiki Bug XSS Injection di JSON" dari saya, semoga dapat membantu sobat. Terimakasih sudah berkunjung.

0 comments