Bagikan melalui


Keamanan dan Input Pengguna

Data pengguna, yang merupakan jenis input apa pun (data dari permintaan Web atau URL, input ke kontrol aplikasi Microsoft Windows Forms, dan sebagainya), dapat memengaruhi kode karena seringkali data digunakan 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 dibuat aman karena tidak ada bingkai tumpukan untuk melacak keberadaan data yang berpotensi tidak tepercaya.

Ini adalah salah satu bug keamanan paling halus dan tersulit 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 yang berikut ini:

  • Setiap data pengguna dalam respons server berjalan dalam konteks situs server pada klien. Jika server Web Anda mengambil data pengguna dan menyisipkannya ke halaman Web yang dikembalikan, itu mungkin, misalnya, menyertakan <script> tag dan menjalankan seolah-olah dari server.

  • Ingatlah bahwa klien dapat meminta URL apa pun.

  • Pertimbangkan jalur yang sulit atau tidak valid:

    • .. \ , jalur yang sangat panjang.

    • Penggunaan karakter pengganti (*).

    • Ekspansi token (%token%).

    • Bentuk aneh jalur dengan makna khusus.

    • Nama aliran sistem file alternatif seperti filename::$DATA.

    • Versi pendek nama file seperti longfi~1 untuk longfilename.

  • Ingatlah bahwa Eval (userdata) dapat melakukan apa pun.

  • Waspadalah terhadap pengikatan yang terlambat ke nama yang menyertakan data pengguna tertentu.

  • Jika Anda berurusan dengan data Web, pertimbangkan berbagai bentuk escape yang diizinkan, termasuk:

    • Escape Heksadesimal (%nn).

    • Escape Unicode (%nnn).

    • Escape UTF-8 yang terlalu panjang (%nn%nn).

    • Escape ganda (%nn menjadi %mmnn, di mana %mm adalah escape untuk '%').

  • Waspadalah terhadap nama pengguna yang mungkin memiliki lebih dari satu format kanonis. Misalnya, Anda sering dapat menggunakan formulir MYDOMAIN\username atau formulir username@mydomain.example.com.

Lihat juga