Pertimbangan Keamanan: Kontrol Microsoft Windows

Topik ini menyediakan informasi tentang pertimbangan keamanan yang terkait dengan kontrol Windows. Informasi dalam topik ini tidak menyediakan semua yang perlu Anda ketahui tentang masalah keamanan—gunakan sebagai titik awal dan referensi untuk area teknologi ini.

Interkonektivitas di antara komputer adalah umum; perhatian utama pengembang haruslah keamanan aplikasi. Bagian berikut membahas beberapa potensi masalah keamanan yang perlu dipertimbangkan saat memprogram kontrol Windows.

Pesan Kontrol null-terminated

Banyak pesan kontrol dan makro memiliki parameter string. Seringkali pesan-pesan ini tidak memvalidasi string input, khususnya, mereka tidak memeriksa penghentian '\0'. Saat Anda memanggil pesan yang menggunakan string sebagai parameter, tentukan secara eksplisit bahwa string dihentikan null.

Penggunaan String

Ketika Anda memprogram kontrol Windows, perlu untuk memanipulasi string. Hampir setiap kontrol mengharuskan teks disisipkan. Misalnya, untuk mengisi kotak daftar, Anda harus memuat string ke dalam kontrol. Karena menggunakan string salah sering menyebabkan overruns buffer, lakukan tindakan pencegahan untuk menghindari risiko keamanan ini.

Untuk informasi selengkapnya tentang overruns buffer, lihat Menulis Kode Aman oleh Michael Howard dan David LeBlanc, Microsoft Press, 2002 dan Praktik Terbaik untuk API Keamanan.

Validasi Input

Pesan kontrol berikut dapat menyajikan masalah keamanan.

Jika teks berubah antara panggilan untuk mendapatkan panjang teks dan waktu teks ditampilkan atau digunakan, overrun buffer dapat terjadi. Untuk menghindari hal ini, Anda harus memvalidasi string sebelum menggunakannya. Selain itu, pesan yang mengambil teks, CB_GETLBTEXT, TB_GETBUTTONTEXT, dan TTM_GETTEXT, tidak memiliki parameter ukuran buffer yang menyajikan potensi penyerbuan buffer.

Saat menggunakan CB_GETLBTEXT atau SB_GETTEXT, Anda harus terlebih dahulu memanggil CB_GETLBTEXTLEN atau SB_GETTEXTLENGTH untuk mendapatkan ukuran buffer. Beberapa pesan ini, TB_GETBUTTONTEXT, LVM_GETISEARCHSTRING, dan TVM_GETISEARCHSTRING, dapat dipanggil dengan nilai parameter NULL untuk mendapatkan panjang string sebelum memanggil pesan untuk mengambil string.

Pesan yang harus Anda perhatikan adalah bilah status SB_GETTIPTEXT pesan. Pesan ini tidak menyediakan cara untuk mengkueri panjang string yang akan diambil.

Penggunaan Kata Sandi

Jika Anda menggunakan kontrol edit yang dilindungi kata sandi (gaya ES_PASSWORD ), buffer yang berisi teks yang diambil harus diatur ke nol sesegera mungkin untuk menghindari mengekspos kata sandi pengguna dalam memori.

Pemberitahuan Keamanan

Tabel berikut mencantumkan fitur yang, jika salah digunakan, dapat membahayakan keamanan aplikasi Anda. Pesan yang tercantum di sini tidak menyediakan parameter yang menentukan ukuran buffer.

Fitur Mitigasi
DlgDirListComboBox Pastikan buffer yang digunakan oleh fungsi dapat ditulis dan dihentikan null.
CB_GETLBTEXT Panggil CB_GETLBTEXTLEN untuk mendapatkan ukuran buffer, lalu panggil CB_GETLBTEXT untuk mengambil string.
LVM_GETISEARCHSTRING Panggil pesan dengan nilai parameter NULL untuk mendapatkan ukuran buffer, lalu panggil pesan untuk kedua kalinya untuk mengambil string.
SB_GETTEXT Panggil SB_GETTEXTLENGTH untuk mendapatkan ukuran buffer, lalu panggil SB_GETTEXT untuk mengambil string.
TB_GETBUTTONTEXT Panggil pesan dengan nilai parameter NULL untuk mendapatkan ukuran buffer, lalu panggil pesan untuk kedua kalinya untuk mengambil string.
TTM_GETTEXT Pesan ini tidak menyediakan cara bagi Anda untuk mengetahui atau menentukan ukuran buffer.
TVM_GETISEARCHSTRING Panggil pesan dengan meneruskan nilai parameter NULL untuk mendapatkan ukuran buffer, lalu panggil pesan untuk kedua kalinya untuk mengambil string.

 

Sumber Daya Lainnya

Keamanan Microsoft

Keamanan

Microsoft Security Response Center

Praktik Terbaik untuk API Keamanan