Keamanan dan Input Pengguna
Data pengguna, yang merupakan input apa pun (data dari permintaan Web atau URL, input ke kontrol Microsoft aplikasi Formulir Windows, dan sebagainya), dapat memengaruhi kode secara negatif karena sering kali data tersebut digunakan secara langsung sebagai parameter untuk memanggil kode lain. Situasi ini dianalogikan dengan kode berbahaya yang memanggil kode Anda dengan parameter aneh, dan tindakan pencegahan yang sama harus diambil. Input pengguna sebenarnya lebih sulit untuk dijadikan aman karena tidak ada bingkai tumpukan untuk melacak keberadaan data yang berpotensi tidak tepercaya.
Ini adalah salah satu bug keamanan paling halus dan paling sulit untuk ditemukan karena, meskipun mereka dapat ada dalam kode yang tampaknya tidak terkait dengan keamanan, mereka adalah gateway untuk meneruskan data buruk ke kode lain. Untuk mencari bug ini, ikuti segala jenis data input, bayangkan berapa rentang nilai yang mungkin, dan pertimbangkan apakah kode yang melihat data ini dapat menangani semua kasus tersebut. Anda dapat memperbaiki bug ini melalui pemeriksaan rentang dan menolak input apa pun yang tidak dapat ditangani kode.
Beberapa pertimbangan penting yang melibatkan data pengguna meliputi hal berikut:
Setiap data pengguna dalam respons server berjalan dalam konteks situs server di klien. Jika server Web Anda mengambil data pengguna dan menyisipkannya ke halaman Web yang dikembalikan, mungkin, misalnya, menyertakan <tag skrip> dan menjalankan seolah-olah dari server.
Ingat bahwa klien dapat meminta setiap URL.
Pertimbangkan jalur yang sulit atau tidak valid:
.. \ , jalur yang sangat panjang.
Penggunaan karakter kartubebas (*).
Ekspansi token (%token%).
Bentuk jalur yang aneh dengan arti khusus.
Nama aliran sistem file alternatif seperti
filename::$DATA
.Versi pendek nama file seperti
longfi~1
untuklongfilename
.
Ingatlah bahwa Eval (userdata) dapat melakukan apa saja.
Waspadalah terhadap pengikatan terlambat ke nama yang menyertakan beberapa data pengguna.
Jika Anda berurusan dengan data Web, pertimbangkan berbagai bentuk pelarian yang diizinkan, termasuk:
Pelarian heksadesimal (%nn).
Pelarian Unicode (%nnn).
Pelarian UTF-8 yang terlalu lama (%nn%nn).
Pelarian ganda (%nn menjadi %mmnn, di mana %mm adalah pelarian untuk '%').
Waspadalah terhadap nama pengguna yang mungkin memiliki lebih dari satu format kanonis. Misalnya, Anda sering dapat menggunakan formulir MYDOMAIN\nama pengguna atau formulir nama pengguna@mydomain.example.com.