Muncul Pesan Disallowed Key Characters di Website? Ini Penjelasannya
Bagi sebagian pengguna website atau pengelola situs berbasis PHP dan framework seperti CodeIgniter, mungkin pernah menjumpai pesan error berbunyi: “Disallowed Key Characters”. Pesan ini muncul ketika sistem mendeteksi adanya karakter yang tidak diizinkan atau dianggap berbahaya dalam input data, baik dari URL, form, maupun permintaan HTTP lainnya.

Secara teknis, pesan ini bukan bug atau kesalahan sistem fatal, melainkan mekanisme keamanan yang sengaja diaktifkan untuk mencegah serangan injeksi, XSS, atau manipulasi data lainnya.
Muncul Pesan Disallowed Key Characters di Website? Ini Penjelasannya
Error “Disallowed Key Characters” biasanya muncul karena sistem mendeteksi karakter aneh atau tidak sesuai standar input yang diperbolehkan oleh framework (misalnya CodeIgniter). Karakter-karakter yang mencurigakan ini bisa berasal dari:
-
URL query string yang tidak valid
-
Form input dengan karakter khusus
-
Header HTTP request yang dimodifikasi
-
Manipulasi data dari pengguna atau bot jahat
Contoh karakter yang sering ditolak:
-
Tanda kurung
[]
-
Tanda plus
+
-
Tanda kutip
'
atau"
-
Tanda kutip backtick
`
-
Karakter escape
\
-
Atau kombinasi tertentu seperti
../
,<script>
, dan karakter yang biasa digunakan untuk injeksi
Contoh Kasus Sederhana
Misalnya Anda memiliki website dengan URL seperti ini:
Atau:
Framework seperti CodeIgniter secara default akan menolak karakter <
, >
, dan tanda kurung siku []
dalam parameter query karena dapat digunakan untuk injeksi skrip berbahaya. Maka hasilnya adalah munculnya pesan:
Di Mana Error Ini Umumnya Muncul?
Pesan ini sering muncul pada aplikasi berbasis:
-
PHP Framework seperti CodeIgniter, Laravel (dengan config tertentu)
-
CMS kustom atau backend admin
-
Website e-commerce yang memiliki form pencarian atau filter
-
API endpoint yang menerima input dari parameter GET atau POST
Fungsi Keamanan Input Filter
Perlu diketahui bahwa sistem validasi karakter ini adalah bagian dari lapisan keamanan (security layer). CodeIgniter, misalnya, menerapkan fungsi Input Class
yang secara otomatis memfilter semua data yang masuk melalui GET, POST, COOKIE, dan lain-lain.
Tujuan utamanya adalah:
-
Melindungi dari serangan Cross Site Scripting (XSS)
-
Mencegah SQL Injection
-
Menjaga agar sistem hanya menerima input valid
-
Mengurangi potensi crash aplikasi akibat input rusak
Bagaimana Cara Mengatasi Error Ini?
Meskipun tujuan mekanisme ini baik, terkadang pengguna atau developer tetap ingin mengizinkan karakter tertentu untuk fungsi khusus. Berikut beberapa solusi yang dapat dipertimbangkan:
1. Validasi dan Sanitasi Input
Langkah pertama dan paling aman adalah memastikan input data divalidasi dengan baik. Jika pengguna ingin memasukkan karakter seperti []
atau +
, sebaiknya:
-
Gunakan encoding URL yang benar (misalnya
%5B
untuk[
) -
Bersihkan data di sisi frontend sebelum dikirim ke backend
-
Gunakan fungsi PHP
htmlspecialchars()
atauurlencode()
untuk menghindari error
2. Modifikasi File Input.php
(Jika Menggunakan CodeIgniter)
Jika menggunakan CodeIgniter, Anda bisa mengatur ulang karakter yang diperbolehkan di file system/core/Input.php
atau override-nya:
Namun, mengubah regex ini sangat tidak disarankan jika Anda tidak paham implikasinya terhadap keamanan. Lebih baik ubah logika input di sisi frontend atau gunakan teknik encoding URL yang benar.
3. Gunakan URL Routing yang Aman
Hindari menyisipkan karakter tidak umum dalam parameter URL. Sebagai alternatif:
-
Gunakan ID atau slug yang hanya mengandung angka dan huruf
-
Jika ingin mengirim array atau data kompleks, gunakan metode POST dan bukan GET
-
Untuk aplikasi REST API, lebih baik kirimkan data melalui header atau body JSON
4. Ubah Config Filter (Jika Sangat Terpaksa)
Di beberapa versi framework, Anda dapat mengatur konfigurasi input filter secara global. Misalnya, di CodeIgniter:
Anda dapat menambahkan karakter yang dibutuhkan, tetapi pastikan Anda memahami risikonya. Jangan pernah menambahkan karakter seperti <
, >
, =
, atau "
tanpa alasan yang sangat jelas dan kontrol ketat.
5. Gunakan Teknik POST daripada GET
Jika Anda mengirim data formulir yang mengandung banyak simbol, karakter khusus, atau nilai array, gunakan metode POST. POST lebih fleksibel dan tidak sensitif terhadap batasan karakter URL dibandingkan GET.
Apakah Error Ini Menunjukkan Serangan?
Tidak selalu. Bisa jadi pengguna hanya salah ketik atau memasukkan URL secara manual. Namun, jika error “Disallowed Key Characters” muncul berulang kali dengan pola yang mencurigakan, bisa jadi:
-
Ada bot yang mencoba melakukan injection
-
Upaya scanning celah keamanan
-
Uji coba brute-force atau pengetesan sistem oleh hacker
Dalam hal ini, Anda bisa:
-
Mengaktifkan log keamanan untuk merekam parameter GET/POST mencurigakan
-
Memblokir IP secara otomatis jika ada percobaan terus-menerus
-
Menggunakan Web Application Firewall (WAF) untuk perlindungan tambahan
Tips Developer untuk Mencegah Error Serupa
-
Selalu encode data dengan benar saat mengirim dari frontend ke backend
-
Gunakan
filter_input()
ataufilter_var()
di PHP untuk memvalidasi input -
Hindari query langsung menggunakan data GET tanpa validasi
-
Sediakan halaman error yang ramah pengguna saat error terjadi
-
Jangan menonaktifkan filter keamanan kecuali benar-benar paham risikonya
Baca juga: Google Ganti Logo G Pertama dalam 10 Tahun Terakhir
Kesimpulan
Pesan “Disallowed Key Characters” bukanlah error acak, melainkan bentuk perlindungan dari sistem terhadap input yang berpotensi membahayakan aplikasi. Meskipun menyulitkan di beberapa kasus, filter ini adalah tembok pertahanan pertama terhadap serangan siber.
Solusi terbaik bukanlah menonaktifkan filter, tetapi mengatur input dan validasi secara benar, serta menggunakan metode pengiriman data yang aman seperti POST atau JSON.
Bagi developer, memahami penyebab dan cara mengatasinya adalah langkah penting menuju pengembangan web yang aman dan stabil.