Ada sejumlah besar kebodohan dalam hal kata sandi di situs web.
- Beberapa memiliki alasan teknis murni (valid atau tidak, itu pertanyaan lain, tetapi hampir semuanya tidak):
Kata sandi Anda harus sepanjang empat karakter dan hanya memiliki digit.
(Dengan membatasi kata sandi hingga 0001 .. rentang 9999, Anda dapat menyimpannya sebagai angka, plaintext, dalam database)
- Lainnya dijelaskan oleh beberapa pemikiran keliru bahwa mereka akan membuat kata sandi lebih aman :
Kata sandi Anda harus dimulai dengan huruf kapital dan diakhiri dengan angka.
(Dengan melakukan ini, pengembang, atau manajer, berasumsi bahwa ini akan memaksa pengguna untuk memilih kata sandi yang aman, sementara aturan sebagai "Kata sandi Anda harus mengandung minimal 6 karakter dan mengandung setidaknya satu huruf kapital, huruf kecil dan digit "secara ajaib akan gagal melakukannya)
- Lainnya, akhirnya, dijelaskan oleh fakta bahwa kata sandi disimpan plaintext , dan ada beberapa ambiguitas tentang bagaimana mereka disimpan, diproses atau diambil, dan tidak ada waktu untuk unit mengujinya.
Kata sandi Anda mengandung karakter yang tidak valid é
.
atau,
Kata sandi Anda y$₯46¥*A'xD<7&฿=ᴙcN&sF5_Ở!d
mengandung beberapa karakter yang tidak valid. Gunakan karakter dari alfabet Latin dan digit saja.
atau,
Kata sandi Anda tidak boleh mengandung karakter spasi putih.
Dalam ketiga kasus, pengembang hanya memastikan bahwa kata sandi seperti ini akan disimpan dengan benar.
Dalam kasus pertama, bagaimana jika é
akan diubah menjadi %C3%A9
ketika dikirim? Atau bagaimana jika database akan disimpan secara é
tidak benar?
Dalam kasus kedua, bagaimana jika PHP (mengapa PHP?) Tidak dapat menangani unicode, dan melakukan sesuatu yang mengerikan ketika menerima kata sandi seperti ini? Bagaimana jika <
karakter menyebabkan masalah? Bagaimana jika &
karakter ditafsirkan sebagai pemisah dalam URL (dengan asumsi bahwa karena suatu alasan, kata sandi dikirim melalui GET bukannya POST)? Bagaimana jika '
ditafsirkan oleh database, karena, coba tebak, kami tidak tahu apa itu SQL Injection dan bagaimana cara menghindarinya? Atau bagaimana jika '
diubah menjadi \'
?
Dalam kasus ketiga, bagaimana jika PHP (lagi?) Memangkas spasi putih dalam beberapa kasus dan tidak dalam yang lain? Bagaimana jika administrator (yang secara mengejutkan memiliki akses ke kata sandi pengguna dalam plaintext) hilang karena mereka hanya melihat satu spasi putih, sementara pengguna telah menetapkan tiga spasi putih berturut-turut ?
Dalam ketiga kasus tersebut, ambiguitas tersebut mudah diselesaikan melalui pengujian , terutama pengujian unit. Tetapi dalam sejumlah besar proyek, tidak ada pengujian sama sekali , dan tidak ada waktu untuk menguji (tapi masih banyak waktu untuk debug nanti).
Ini berarti apakah pengembang mencoba untuk memikirkan kemungkinan konsekuensi dari memungkinkan spasi , atau unicode karakter, atau sembarang karakter di luar ASCII 48..57 ∪ 65..90 ∪ 97..122 (digit, huruf kecil, huruf besar) , cara termudah, ketika pengujian tidak memungkinkan, adalah dengan hanya melarang mereka .
Menurut pendapat saya, ini adalah satu-satunya alasan untuk melarang ruang. Yannis Rizos memberi alasan lain terkait UX. Meskipun menjadi alasan yang masuk akal secara teori, itu tidak bekerja sama sekali dalam praktiknya: situs web yang dibuat oleh orang-orang yang benar-benar peduli tentang UX tidak memperbaiki aturan kata sandi yang bodoh. Sebaliknya, situs web di mana spasi putih sebenarnya dilarang sebagian besar dilakukan oleh orang-orang yang tidak pernah mendengar tentang UX . Ini terutama benar karena melarang karakter apa pun benar-benar menjengkelkan dari sudut pandang UX, karena setiap pembatasan terkait kata sandi, termasuk yang bermanfaat, sebagai jumlah minimum karakter.