Ajax seringkali digunakan oleh banyak web programmer untuk mendapatkan data tertentu tanpa me-load keseluruhan halaman. Namun terkadang banyak celah yang dapat digunakan oleh para peretas dari pengunaan ajax ini. Oleh karenanya perlu adanya beberapa optimasi dari sisi keamanan. Beberapa hal yang dapat dilakukan adalah:
1. Membatasi Akses dari host yang tidak dikenal.
Cara ini untuk menghindari Cross Site Scripting yaitu dengan melakukan validasi pada bagian atas sebelum pengembalian data dilakukan berdasarkan parameter yang direquest.
header('Content-Type: application/json'); if (isset($_SERVER['HTTP_ORIGIN'])) { $address = 'http://' . $_SERVER['SERVER_NAME']; if (strpos($address, $_SERVER['HTTP_ORIGIN']) !== 0) { exit(json_encode([ 'error' => 'Invalid Origin header: ' . $_SERVER['HTTP_ORIGIN'] ])); } } else { exit(json_encode(['error' => 'No Origin header'])); }
Generate token :
session_start();
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
Tambahkan token yang telah di generate via meta :
<meta name="csrf-token" content="<?= $_SESSION['csrf_token'] ?>">
Lakukan Pemanggilan Ajax dengan mengirimkan Meta seperti dibawah ini :
$.ajaxSetup({
headers : {
'CsrfToken': $('meta[name="csrf-token"]').attr('content')
}
});
Lakukan pengecekan di Script Ajax anda :
session_start();
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
header('Content-Type: application/json');
$headers = apache_request_headers();
if (isset($headers['CsrfToken'])) {
if ($headers['CsrfToken'] !== $_SESSION['csrf_token']) {
exit(json_encode(['error' => 'Wrong CSRF token.']));
}
} else {
exit(json_encode(['error' => 'No CSRF token.']));
}