Anggapan Anda tentang kode yang menjadi kebocoran keamanan mungkin atau mungkin tidak benar tergantung pada bahasa yang Anda gunakan. Dalam kode C itu bisa menjadi masalah (terutama karena dalam C a boolean hanyalah sebuah int yang bukan nol atau nol) - tetapi dalam bahasa yang diketik paling kuat (yaitu pengecekan tipe runtime) jika passwordCheck
variabel dideklarasikan sebagai boolean, tidak ada cara untuk menetapkan sesuatu yang lain untuk itu. Faktanya, segala sesuatu dalam if
predikat harus diselesaikan ke boolean, apakah Anda menggunakan operator boolean atau hanya menggunakan nilai. Jika Anda berhasil membuat jenis objek lain terikat ke passwordCheck
runtime akan membuang beberapa jenis pengecualian pemain ilegal.
Sederhana jika / jika konstruksi lebih mudah dibaca daripada jika / jika konstruksi - dan kurang rentan terhadap masalah yang tidak disengaja jika seseorang mencoba untuk membalikkan konstruksi. Mari kita ambil contoh yang sama sebentar:
if(passwordCheck == false) {
denyAccess();
}
if(passwordCheck) {
letThemIn();
}
Arti dari klausa yang saling eksklusif yang ingin Anda jalankan di atas hilang. Itulah yang konstruksi if / else sampaikan. Dua cabang eksekusi yang saling eksklusif, di mana salah satunya akan selalu berjalan. Ini adalah bagian penting dari keamanan - memastikan tidak ada cara untuk letThemIn
setelah Anda menelepon denyAccess
.
Untuk tujuan kejelasan kode, dan untuk tujuan memastikan bagian kritis paling terlindungi, mereka harus berada di dalam klausa utama ( if
bagian). Perilaku default yang tidak patuh harus dalam klausa alternatif ( else
bagian). Sebagai contoh:
if(passwordCheck) {
letThemIn();
} else {
denyAccess();
}
CATATAN: dalam bekerja dengan bahasa yang berbeda, saya telah mengembangkan habbit pengkodean yang membantu menghindari pertanyaan "bagaimana jika itu sebuah string?" Pada dasarnya, ini adalah untuk menempatkan konstanta pertama dalam ekspresi boolean. Misalnya, alih-alih memeriksa, passwordCheck == false
saya memeriksa false == passwordCheck
. Ini juga menghindari masalah penugasan tak disengaja yang mungkin terjadi di C ++. Menggunakan pendekatan ini, kompiler akan mengeluh jika saya mengetik =
bukan ==
. Dalam bahasa seperti Java dan C #, kompiler akan memperlakukan tugas dalam klausa if sebagai kesalahan, tetapi C ++ akan menerimanya dengan senang hati. Itu sebabnya saya juga cenderung melakukan pemeriksaan nol dengan yang null
pertama.
Jika Anda secara rutin mengubah bahasa, menempatkan konstanta terlebih dahulu sangat membantu. Namun, di tim saya itu berlawanan dengan standar pengkodean dan kompiler menangkap masalah itu pula. Ini bisa menjadi kebiasaan yang sulit untuk dilanggar.