Saya mulai mencatat upaya login yang gagal di situs web saya dengan pesan seperti
Failed login attempt by qntmfred
Saya perhatikan beberapa log ini terlihat seperti
Failed login attempt by qntmfredmypassword
Saya menduga beberapa orang gagal login karena mereka mengetik nama pengguna dan kata sandi mereka di bidang nama pengguna. Kata sandi di-hash dalam database, tetapi jika entah bagaimana db dapat dikompromikan, pesan-pesan log ini bisa menjadi cara bagi penyerang untuk mencari tahu kata sandi untuk persentase kecil orang yang akhirnya gagal masuk seperti ini.
Apakah ada cara yang lebih baik untuk menangani ini? Haruskah saya khawatir tentang kemungkinan ini?
web-development
security
kenwarner
sumber
sumber
Jawaban:
Coba seperti ini:
Jika nama pengguna ada, catat "upaya masuk gagal oleh
username
". Jika tidak, catat "upaya gagal login oleh IP123.45.67.89
" sebagai gantinya. Itu harus mengatasi masalah memiliki kata sandi muncul di log secara tidak sengaja.sumber
Mengapa tidak memeriksa saja apakah nama pengguna tersebut ada dalam database? Ini akan memberi Anda 2 hasil yang mungkin.
Pengguna memasukkan nama pengguna yang benar. Anda kemudian dapat dengan mudah mencatat apa yang Anda login sekarang.
Pengguna memasukkan kata sandi di dalam bidang nama pengguna, karena itu nama pengguna tidak valid. Cukup masukkan entri log yang mengatakan bahwa ada upaya login yang gagal oleh pengguna yang tidak dikenal?
Dan tentu saja Anda dapat memiliki bidang tambahan untuk mencatat ip, tanggal dan apa yang tidak?
sumber
Pertimbangan:
Dapatkah Anda mendeteksi ketika ini terjadi, sebagai lawan dari seseorang salah mengetik nama pengguna mereka? Mencatat nama pengguna yang salah ketik dapat berguna untuk tujuan dukungan, yaitu menjawab pertanyaan "mengapa saya tidak bisa masuk" dengan jawaban "Anda salah ketik nama pengguna Anda, yang seharusnya berupa tanda hubung bukan titik", atau "Anda memiliki titik dua terkemuka lalu spasi - apakah Anda memotong dan menempelnya ". Jika Anda memiliki sejumlah kecil pengguna berbayar bernilai tinggi (yaitu belum situs jejaring sosial lain) maka Anda mungkin harus menyediakan dukungan semacam ini.
Apa tindakan yang tepat yang harus dilakukan seseorang? Nama pengguna dapat menjadi indikator upaya peretasan. Fakta bahwa nama pengguna tidak muncul dalam daftar Anda tidak berarti Anda tidak perlu tahu apa itu. Namun jika Anda yakin ini adalah masalah serius, dan Anda dapat mendeteksi kata sandi siapa itu, Anda dapat meminta pengguna untuk mengubah kata sandi setelah ini terjadi.
Apa itu praktik industri? Praktik industri adalah mencatat bidang nama pengguna tetapi bukan bidang kata sandi. Anda tidak mungkin dipecat karena melakukan ini.
Kecuali jika Anda memiliki pertimbangan yang tidak biasa, saya akan menyarankan praktik industri berikut ini, dan catat bidang nama pengguna. Pertimbangkan perubahan kata sandi paksa sebagai saran 2 jika menurut Anda ini tidak memadai.
sumber
Supaya aman, login di aplikasi saya saat ini tidak menyimpan parameter yang diteruskan ke metode login atau reset kata sandi. Panggilan log memiliki parameter opsional yang mengontrol ini, yang, ketika diatur ke true, menggantikan objek parameter yang disimpan dengan
[Redacted]
. Tentu, jadi saya kehilangan sedikit data, tetapi saya memiliki alamat IP mereka, dan saya lebih suka tidak mengambil risiko mendapatkan sesuatu yang sensitif dalam plaintext.Jika Anda benar-benar ingin mencatat hal semacam ini, saya sarankan saat membuat log masuk upaya, Anda memeriksa database untuk pengguna dengan nama yang cocok dengan yang Anda miliki di bidang nama pengguna, dan hanya menyimpannya jika Anda memiliki kecocokan. Jika tidak, Anda hanya menyimpannya sebagai "pengguna tak dikenal". Anda bisa menjadi mewah, memeriksa apakah nilai ini mengandung itu atau apa pun, tetapi selalu ada risiko bahwa Anda mendapatkan kombinasi seperti [Pengguna] [Kata Sandi] dan [UserPas] [pedang], dalam hal ini Anda dapat memeriksa IP dan menyimpulkan bahwa Anda secara tidak sengaja menyimpan kata sandi seseorang di awal. Anda dapat memperluas ini ke [Pengguna] [Kata Sandi] dan [Kata Kunci Pengguna] yang tidak mungkin tetapi mungkin, dalam hal ini Anda dapat melihat "login yang tidak berhasil oleh UserPassword" diikuti oleh "Login berhasil oleh Pengguna" dan menyimpulkan semuakata sandi pengguna. Secara umum, untuk amannya saya katakan untuk tidak mencatat nama pengguna kecuali jika login berhasil.
Edit untuk ditambahkan:
Sebagian besar argumen yang diposkan orang untuk mencatat nama pengguna karena upaya login yang gagal, menurut pendapat saya, lebih baik ditangani melalui metode lain.
Sebagai contoh, dikatakan bahwa ketika seorang pelanggan bertanya "mengapa saya tidak bisa masuk?", Nama pengguna yang masuk akan memungkinkan Anda untuk menunjukkan kesalahan ketik. Ini benar, tetapi tidak sepadan dengan risiko juga mendapatkan kata sandi; Saya akan melakukan ini dengan mengarahkan kembali pengguna ke formulir login jika gagal, menyorot bidang nama pengguna dan mengisinya kembali dengan apa pun yang mereka ketikkan sehingga mereka dapat melihat sendiri.
Argumen lain adalah itu memungkinkan Anda mengidentifikasi upaya peretasan; serangkaian kegagalan terhadap satu nama pengguna mungkin merupakan upaya untuk memaksa kata sandi. Saya akan melakukan ini dengan memiliki kolom "BadLogins" pada tabel Users, yang bertambah setiap kali login gagal dengan nama pengguna yang cocok dengan pengguna ini, dan disetel ulang ke nol pada login yang berhasil, setelah memberi tahu pengguna "telah ada x upaya login yang gagal sejak login terakhir Anda "dan memberi tahu mereka tentang apa yang harus dilakukan jika mereka tidak menganggap upaya itu dari mereka. Jika Anda ingin benar-benar teliti, Anda bisa memiliki kolom lain yang menyimpan nilai terakhir dari kolom BadLogins bahkan setelah login berhasil, dan / atau kolom yang menyimpan nilai tertinggi kolom ini, dan / atau kolom yang menyimpan jumlah total login gagal yang pernah dimiliki akun ini.
sumber