Fitur Keamanan di CRT

Banyak fungsi CRT lama memiliki versi yang lebih baru dan lebih aman. Jika ada fungsi aman, versi yang lebih lama dan kurang aman ditandai sebagai tidak digunakan lagi. Versi baru memiliki akhiran _s ("aman").

Dalam konteks ini, "tidak digunakan lagi" berarti bahwa penggunaan fungsi tidak disarankan. Ini tidak berarti fungsi akan dihapus dari CRT.

Fungsi aman tidak mencegah atau memperbaiki kesalahan keamanan. Sebaliknya, mereka menangkap kesalahan ketika terjadi. Mereka melakukan pemeriksaan tambahan untuk kondisi kesalahan. Jika ada kesalahan, mereka memanggil handler kesalahan (lihat Validasi parameter).

Misalnya, strcpy fungsi tidak dapat mengetahui apakah string yang disalinnya terlalu besar untuk buffer tujuan. Mitranya yang aman, strcpy_s, mengambil ukuran buffer sebagai parameter. Jadi, dapat menentukan apakah overrun buffer akan terjadi. Jika Anda menggunakan strcpy_s untuk menyalin 11 karakter ke dalam buffer 10 karakter, itu adalah kesalahan di bagian Anda; strcpy_s tidak dapat memperbaiki kesalahan Anda. Tetapi dapat mendeteksi kesalahan Anda dan memberi tahu Anda dengan memanggil handler parameter yang tidak valid.

Menghilangkan peringatan penghentian

Ada beberapa cara untuk menghilangkan peringatan penghentian untuk fungsi yang lebih lama dan kurang aman. Yang paling sederhana hanya untuk mendefinisikan _CRT_SECURE_NO_WARNINGS atau menggunakan warning pragma. Salah satu akan menonaktifkan peringatan penghentian, tetapi masalah keamanan yang menyebabkan peringatan masih ada. Lebih baik membiarkan peringatan penghentian diaktifkan dan memanfaatkan fitur keamanan CRT baru.

Di C++, cara term mudah untuk menghilangkan peringatan penghentian adalah dengan menggunakan kelebihan beban templat Aman. Kelebihan beban menghilangkan peringatan penghentian dalam banyak kasus. Mereka mengganti panggilan ke fungsi yang tidak digunakan lagi dengan panggilan untuk mengamankan versi fungsi. Misalnya, pertimbangkan panggilan yang tidak digunakan lagi ini ke strcpy:

char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated

_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES Menentukan sebagai 1 menghilangkan peringatan dengan mengubah strcpy panggilan ke strcpy_s, yang mencegah overruns buffer. Untuk informasi selengkapnya, lihat Mengamankan kelebihan beban templat.

Untuk fungsi yang tidak digunakan lagi tanpa kelebihan beban templat yang aman, Anda harus mempertimbangkan untuk memperbarui kode Anda secara manual untuk menggunakan versi aman.

Sumber peringatan penghentian lainnya, yang tidak terkait dengan keamanan, adalah fungsi POSIX. Ganti nama fungsi POSIX dengan setara standarnya (misalnya, ubah access ke _access), atau nonaktifkan peringatan penghentian terkait POSIX dengan mendefinisikan _CRT_NONSTDC_NO_WARNINGS. Untuk informasi selengkapnya, lihat Kompatibilitas.

Fitur keamanan lainnya

Beberapa fitur keamanan meliputi:

  • Validasi Parameter

    Fungsi aman, dan banyak rekan mereka yang tidak aman, memvalidasi parameter. Validasi dapat mencakup:

    • Memeriksa NULL nilai.
    • Memeriksa nilai enumerasi untuk validitas.
    • Memeriksa apakah nilai integral berada dalam rentang yang valid.

    Untuk informasi selengkapnya, lihat Validasi parameter.

    Handler untuk parameter yang tidak valid juga dapat diakses oleh pengembang. Ketika fungsi menemukan parameter yang tidak valid, alih-alih menegaskan dan keluar dari aplikasi, CRT memungkinkan Anda untuk memeriksa masalah ini melalui _set_invalid_parameter_handler atau _set_thread_local_invalid_parameter_handler.

  • Buffer Berukuran

    Anda harus meneruskan ukuran buffer ke fungsi aman apa pun yang menulis ke buffer. Versi aman memvalidasi bahwa buffer cukup besar sebelum menulis ke dalamnya. Validasi membantu menghindari kesalahan buffer berbahaya yang dapat memungkinkan kode berbahaya dijalankan. Fungsi-fungsi ini biasanya mengembalikan errno kode kesalahan dan memanggil handler parameter yang tidak valid jika ukuran buffer terlalu kecil. Fungsi yang membaca dari buffer input, seperti gets, memiliki versi aman yang mengharuskan Anda menentukan ukuran maksimum.

  • Penghentian null

    Beberapa fungsi yang meninggalkan string yang berpotensi tidak dihentikan memiliki versi aman, yang memastikan bahwa string dihentikan dengan benar.

  • Pelaporan kesalahan yang ditingkatkan

    Fungsi aman mengembalikan kode kesalahan dengan lebih banyak informasi kesalahan daripada yang tersedia dengan fungsi yang sudah ada sebelumnya. Fungsi aman dan banyak fungsi yang sudah ada sebelumnya sekarang diatur errno dan sering mengembalikan jenis kode juga, untuk memberikan pelaporan kesalahan yang errno lebih baik.

  • Keamanan sistem file

    API I/O file aman mendukung akses file aman dalam kasus default.

  • Keamanan Windows

    API proses aman memberlakukan kebijakan keamanan dan memungkinkan ACL ditentukan.

  • Pemeriksa sintaks string format

    String yang tidak valid terdeteksi, misalnya, saat Anda menggunakan karakter bidang jenis yang salah dalam printf string format.

Baca juga

Validasi parameter
Kelebihan beban templat yang aman
File runtime C (CRT) dan C++ Standard Library (STL) .lib