Mengapa situs tertentu mencegah spasi pada kata sandi?

16

Tampaknya kurang umum dengan situs web yang lebih baru, tetapi banyak situs web tempat saya memerlukan akun (seperti untuk membayar tagihan, dll.) Mencegah saya membuat kata sandi dengan spasi di dalamnya. Ini hanya membuat hal-hal lebih sulit untuk diingat , dan saya menyadari tidak ada batasan basis data atau pemrograman pada kata sandi, terenkripsi atau (surga dilarang) sebaliknya. Lalu, mengapa spasi begitu sering didiskriminasi ketika mendaftar untuk sebuah situs?

Ian Hunter
sumber
Mungkin beberapa situs menggunakan Single Sign On, dengan asumsi bahwa SSO memerlukan kata sandi yang tidak kosong (meskipun tidak yakin)!
NoChance
1
Yang benar-benar membuatku takut, adalah ketika situs-situs secara khusus melarang kutipan tunggal. Apa alasan yang mungkin Anda miliki, selain untuk memungkinkan "insert into USERS (..., password) values (..., '" + $POST['password'] + "');" : -S
Christian Klauser
Seharusnya pergi ke keamanan, bukan programmer. Ini mungkin sudah ada di sana.
Dan McGrath

Jawaban:

20

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_Ở!dmengandung 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%A9ketika 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.

Arseni Mourzenko
sumber
Belum lagi saat Anda menghilangkan spasi, Anda menghilangkan banyak kata sandi panjang yang mudah diingat (dan panjangnya telah terbukti lebih efektif daripada kerumitan melawan retak) dan mendorong pengguna untuk mengadopsi kata sandi omong kosong yang jauh lebih mudah diingat daripada seri panjang ruang.
Lèse majesté
1
Saya setuju dengan sebagian besar dari apa yang saya baca dengar, tetapi saya memiliki waktu yang sangat sulit untuk mencerna pernyataan "cara termudah, ketika pengujian tidak mungkin ...". Pengujian tidak mungkin ??? Siapa pun yang setuju dengan proyek di mana itu terjadi: kebodohan efisien dimaksimalkan ... Ya saya tahu itu terjadi: - |
Thomas
@ Thomas: ini adalah perbedaan antara teori dan pengetahuan secara umum dan praktik dengan ketidaktahuan umum dan batasan waktu, di mana banyak orang tidak ingin menyia-nyiakan pengujian waktu, mengabaikan bahwa mereka akan menghabiskan setidaknya dua kali nanti untuk debugging.
Arseni Mourzenko
Ini mungkin masuk akal untuk mengharuskan pengguna mendefinisikan sebuah passcode yang hanya terdiri dari angka jika kode akses yang sama mungkin diperlukan untuk hal-hal seperti akses telepon otomatis, tetapi kode akses tersebut harus tidak menjadi credential otentikasi utama untuk akses berbasis komputer.
supercat
3

Jawabannya adalah Sejarah

Kita sepertinya lupa bahwa dasar dari banyak hal ini berasal dari waktu ketika penyimpanan tidak secara efektif gratis (pada disk atau dalam memori) ketika kemampuan kita untuk mengelola semua hal ini agak kurang dari sekarang dan sama - sama kemampuan sistem otomatis mencoba untuk memecahkan yang sama juga agak kurang.

Ada banyak kata-kata kasar tentang kata sandi berdasarkan apa yang kita ketahui sekarang dan apa yang bisa kita lakukan sekarang tetapi faktanya adalah kita sering berhadapan dengan kombinasi pemikiran legacy dan sistem legacy.

Haruskah ada pembatasan dalam sistem baru sekarang ? Saya berharap tidak - alasan yang jauh lebih sedikit sekarang

Murph
sumber
Apakah Anda mengatakan ada yang pembatasan teknologi dengan ruang-ruang di password yang tidak ada sebelumnya? Bagian mana tepatnya yang dimainkan oleh penyimpanan?
Ian Hunter
1
Saya menyarankan bahwa batasan teknologi dan kendala eksternal yang tidak terlalu rumit (dan mungkin penggunaan "trim") berarti bahwa orang-orang berpikir secara berbeda tentang apa yang pantas dan diizinkan. Anda dapat membatasi kata sandi untuk memastikan bahwa kata sandi tersebut mudah diingat karena mengatur ulang kata sandi lebih sulit. Anda mungkin tidak mengenkripsi mereka karena hanya mendapatkan ke tempat di mana Anda dapat membacanya adalah (pada saat itu) relatif sangat sulit (dan dalam hal apa pun sistem tidak dapat diakses dari dunia luar). Waktu yang berbeda, proses pemikiran yang sama sekali berbeda yang telah meninggalkan warisan
Murph
2

IMHO, Ini benar-benar bodoh dari semua situs / aplikasi yang menggunakan hashing modern dan / atau salting untuk menyimpan kata sandi untuk tidak mengizinkan spasi dalam kata sandi. Namun, beberapa sistem lawas (baca tentang ini di suatu tempat) masih menyebarkan kata sandi dalam plaintext - jadi tidak mengizinkan ruang di sana mungkin masuk akal. Juga, beberapa aplikasi mungkin "menghapus" semua input string yang mereka terima. Jadi, kata sandi yang dimulai atau diakhiri dengan spasi tidak akan bagus (tentu saja, itu sudah dibuat-buat, tetapi Anda bisa membayangkan apa yang tidak bisa terjadi dengan hampir semua orang yang datang dengan situsnya sendiri). Tidak ada yang "buruk" dalam memberikan spasi pada kata sandi - seperti yang Anda tunjukkan, DB tidak akan melarang hash atau versi plaintext.

Sebenarnya sebagian besar teman Windows saya tidak tahu bahwa mereka dapat menggunakan spasi di kata sandi mereka - Jadi, mungkin, sesuai jawaban Tim Medora, pemilik situs tidak ingin mengambil risiko dengan lamah (maafkan itu) atau mungkin beberapa dari mereka memiliki kesalahpahaman dan / atau tidak tahu manfaat yang bisa diberikan ruang.

yati sagade
sumber
1
Saya lebih suka menghapus spasi awal / akhir dari kata sandi karena cenderung menyebabkan masalah tapi itu bukan alasan untuk melarangnya - mereka hanya akan dilucuti baik pada pengaturan dan pengujian, tidak ada masalah.
Loren Pechtel
Dan apa sebenarnya "masalah" itu? Saya telah menekankan dalam jawaban bahwa ruang HARUS DILAKUKAN. "Mereka akan dilucuti pada pengaturan dan pengujian" - Apa gunanya kalau begitu? lalu "1 4m 1337" dan "1 4am 1337" keduanya hash dengan nilai yang sama (sebenarnya, ada sejumlah kemungkinan yang tak terbatas dalam teori).
yati sagade
What's the point then?Poin kecil adalah bahwa kata sandi kurang entropi seperti yang dimaksudkan pengguna. Dan beberapa sistem memangkas GET / POST vars secara default, perubahan (tidak mungkin) untuk perilaku itu akan mengarah ke masalah yang lebih serius.
yannis
@Yati sagade: Saya TIDAK berbicara tentang pengupasan ruang internal. Saya berbicara tentang memimpin dan mengikuti spasi - orang tidak menyadari bahwa ruang itu ada dan itu menyebabkan kegagalan login. Demikian juga, jika Anda melihat kata sandi yang semuanya huruf besar balik ke huruf kecil, itu mungkin seseorang yang tidak menyadari huruf besar sedang menyala.
Loren Pechtel
-1

Ini dilakukan dengan alasan yang sama bahwa banyak situs tidak mengizinkan tanda hubung, apostrof, atau huruf non-ASCII dalam nama, meskipun ini adalah praktik yang sangat umum bahkan hanya di AS dan memerlukan lebih banyak pekerjaan untuk melarang karakter ini daripada hanya mengizinkan mereka.

Ini juga dilakukan karena alasan yang sama dengan banyak filter kata situs tidak akan membiarkan Anda menggunakan kata-kata seperti "sombong", "tahan" atau bahkan "menumpuk" (meskipun banyak penghinaan ras umum baik-baik saja).

Itu karena banyak pengembang tampaknya benar-benar kurang masuk akal, atau setidaknya memiliki imajinasi yang sangat terbatas ketika mempertimbangkan kemungkinan input dan skenario pengguna. Sebagian kecil dari mereka mungkin bekerja dari informasi palsu (yang mengecualikan karakter non-alfanumerik entah bagaimana merupakan praktik standar, atau bahwa algoritma hashing atau metode penyimpanan tidak dapat menangani spasi atau karakter khusus). Orang lain mungkin malas — mereka khawatir tentang masalah rangkaian karakter, sehingga mereka hanya membatasi input ke ruang karakter minimal. Dan kemudian mungkin ada orang-orang yang menggunakan validasi / sanitasi input terlalu bersemangat karena paranoia karena kurangnya pemahaman tentang ancaman nyata.

Lèse majesté
sumber
Apa alasan Anda harus menggunakan daftar putih di luar menegakkan pengkodean karakter tertentu? Fakta bahwa membatasi karakter sewenang-wenang tidak memberikan manfaat saat melemahkan kata sandi yang dipilih pengguna adalah alasan saya mendasari pendapat ini. Semua contoh yang saya berikan adalah gejala pengembang tidak memikirkan pilihan desain dengan cukup hati-hati.
Lèse majesté