Jika saya membuat login untuk aplikasi yang memiliki risiko keamanan menengah ke bawah (dengan kata lain, ini bukan aplikasi perbankan atau apa pun), apakah saya dapat memverifikasi sandi yang dimasukkan oleh pengguna dengan hanya mengatakan sesuatu seperti:
if(enteredPassword == verifiedPassword)
SendToRestrictedArea();
else
DisplayPasswordUnknownMessage();
Tampaknya mudah untuk menjadi efektif, tetapi saya tentu tidak akan keberatan jika itu saja yang diperlukan. Apakah pemeriksaan sederhana pada nama pengguna / kata sandi cukup?
Pembaruan: Proyek tertentu adalah layanan web, verifikasi sepenuhnya sisi server, dan bukan open-source. Apakah domain mengubah cara Anda menangani hal ini?
security
passwords
validation
Morgan Herlocker
sumber
sumber
Jawaban:
Bukan tanpa SSL
Ini tidak aman jika kata sandi dikirim melalui jaringan dalam teks biasa. Hashing kata sandi di sisi server juga tidak aman jika kata sandi dikirim melalui jaringan dalam teks biasa.
Karena
<input type="password"/>
tag HTML mengirimkan kontennya dalam teks biasa, ini akan menjadi masalah tidak peduli bagaimana Anda menyimpan kata sandi di server, kecuali situs web Anda menggunakan SSL untuk mengirimkan kata sandi.(Otentikasi HTTP, yang memunculkan kotak dialog di browser yang meminta kata sandi, mungkin atau tidak menjadi teks yang jelas, tergantung pada mekanisme otentikasi apa yang dimiliki server dan browser. Jadi itu bisa menjadi cara untuk menghindari ini tanpa menggunakan SSL.)
Tidak jika administrator situs dicurigai
Sekarang, seandainya Anda menggunakan HTTPS untuk melakukan situs web, ini bisa aman jika Anda mempercayai administrator situs Anda (yang dapat membaca kata sandi teks biasa), dan orang lain yang memiliki akses ke mesin untuk berperilaku baik. Sekarang, mungkin jelas bahwa mereka dapat melakukan apa pun yang mereka inginkan dengan situs web Anda (karena mereka mengelolanya), tetapi jika mereka dapat membaca kata sandi, mereka juga dapat menggunakan pasangan login / kata sandi yang dicuri di situs orang lain.
Cara yang membuat kata sandi aman dari administrator
Satu cara aman untuk menyimpan dan memeriksa kata sandi adalah sebagai berikut:
Untuk fungsi hash, coba gunakan sesuatu yang kuat, dan sesuatu yang belum memiliki tabel pelangi yang bagus di alam liar. Anda dapat mengubah panjang garam jika perlu bekerja di sekitar meja pelangi.
Bergantung pada lingkungan tempat Anda berada, variabilitas dalam latensi jaringan Anda, dan apakah nama pengguna dimaksudkan untuk diketahui secara publik, Anda mungkin ingin agar jalur kode lain menghitung
hash('0000'+entered_password)
jika pengguna tidak ada, untuk mencegah penyerang dari menentukan nama pengguna mana yang valid berdasarkan waktu yang dibutuhkan menentukan bahwa kata sandi salah.sumber
http://
koneksi biasa ... itu membuat frustrasi: /encrypt(entered_password, public_key)
klien, dan mengirimkan hasil itu ke server, yang berkinerjadoes_password_match?(user, decrypt(encrypted_password, private_key))
?does_password_match(user, salt, decrypt(encrypted, key))
, dengan garam tergantung pada pengguna. Seperti yang saya katakan, masalah yang jelas adalah kurangnya perlindungan manusia di tengah.Itu akan menyarankan, bahwa Anda menyimpan kata sandi dalam teks terbuka, yang merupakan tidak-tidak, bahkan dalam skenario keamanan rendah.
Anda sebaiknya memiliki:
Anda dapat menggunakan hash sederhana seperti MD5 misalnya
sumber
Saya setuju dengan mereka yang menyarankan hashing, tetapi ada juga roda yang Anda temukan kembali di sini. Bergantung pada platform Anda mungkin dapat menemukan alat manajemen peran / pengguna yang mencakup semua hal manajemen pengguna dengan aman dan aman tanpa perlu terlalu banyak intervensi di pihak Anda.
sumber
Keamanan adalah subjek yang sangat sensitif, terutama karena harus ada keseimbangan antara ketidaknyamanan pengguna Anda dan memastikan informasi mereka aman. Biasanya, rumus untuk berapa banyak keamanan yang Anda butuhkan adalah fungsi dari pentingnya data. Pendeknya:
Kesalahpahaman umum tentang orang-orang yang melakukan hal-hal buruk adalah apa yang mereka kejar. Sebagian besar dari mereka keluar untuk menghancurkan kepercayaan . Anda harus selalu melakukan apa saja untuk melindungi kepercayaan pengguna Anda. Bagian dari itu adalah melakukan uji tuntas Anda untuk memastikan identitas mereka aman. Mereka mungkin tidak terlalu peduli dengan data yang mereka simpan, tetapi mereka benar-benar peduli dengan identitas mereka - bahkan pada ambang keamanan terendah.
Ada sejumlah opsi berbiaya rendah (untuk menerapkan dan berdampak pada pengguna). Salah satunya adalah hashing password minimal. Layanan apa pun yang menyimpan sesuatu yang sensitif seperti kata sandi dalam teks biasa layak untuk dipermalukan.
Prinsip Umum untuk Perlindungan Kata Sandi
Karena Anda akan menggunakan SSL untuk otentikasi, minimal Anda ingin mengenkripsi semua halaman yang berhubungan dengan akun pengguna juga. Ini memungkinkan sebanyak mungkin identitas pengguna dilindungi.
Catatan tentang manajemen kata sandi : Pengguna akan lupa kata sandi mereka dari waktu ke waktu. Hal terburuk yang dapat Anda lakukan adalah mengirimkan kata sandi mereka dalam email. Jika Anda menerapkan prinsip-prinsip yang diuraikan di atas, Anda tidak akan bisa melakukannya. Jauh lebih baik untuk menyediakan cara untuk mereset kata sandi mereka menggunakan tautan yang dikirim ke alamat email terdaftar mereka. Tautan reset itu akan memiliki kode penggunaan satu kali untuk memastikan orang yang mengakses halaman itu adalah mereka.
sumber
Tidak apa-apa kecuali kata sandinya digunakan untuk hal lain. Masih ada risiko bahwa pengguna memutuskan bahwa ia dapat menggunakan kembali kata sandi, sehingga akan lebih baik dengan:
Jika itu untuk Anda sendiri atau seseorang yang sadar bahwa kata sandi disimpan dalam teks biasa, maka tidak masalah.
sumber
if (hash (enteredPassword + salt) == hashOfValidSaltedPassword)
- dan perhatikan bahwa+
ini mungkin gabungan, bukan penambahan. Ini benar-benar menghalangi penggunaan tabel pelangi, yang merupakan tabel hash kata sandi yang mungkin.Apakah kode sumber tersedia? Bahkan jika tidak, saya cukup yakin kata sandi dapat ditemukan dalam instruksi mesin jika biner tersedia. Saya akan merekomendasikan melakukan checksum dan membandingkannya sebagai gantinya.
Jangan pernah mengabaikan keamanan bahkan jika itu tidak terlalu penting menurut Anda.
sumber
Benar-benar tidak. Baca ini , ini menjelaskan bagaimana peretas meretas situs web keamanan. Anda berencana menjadikan Anda sebagai tautan terlemah dalam rantai.
sumber
Telah dicatat dalam beberapa jawaban bahwa Anda tidak harus menyimpan kata sandi itu sendiri, tetapi sebuah hash - dan Anda harus menggunakan SSL.
Anda mungkin berkata, apa masalahnya? Jika aplikasi saya diretas, itu tidak penting. Yah itu adalah pola yang cukup umum bagi pengguna untuk menggunakan kembali kata sandi yang sama di semua situs. Jika seorang peretas untuk meretas situs Anda dan mendapatkan akses ke kata sandi pengguna, peretas akan dapat menyamar sebagai banyak pengguna di situs lain yang lebih penting bagi pengguna tersebut. Jadi meretas situs Anda bisa menjadi langkah pertama bagi seorang peretas untuk mendapatkan akses ke informasi perbankan bagi para pengguna.
Dan hanya hashing kata sandi tidak cukup. Anda perlu hash dengan garam. Hacker membalikkan tabel pencarian hash, jadi untuk hash yang diberikan, mereka dapat menemukan kata sandi yang cocok.
Jika Anda memilih untuk tidak mengimplementasikan fitur ini, Anda harus memberi tahu para pengguna tentang kurangnya keamanan ini, mendorong mereka untuk tidak menggunakan kata sandi yang sama dengan yang mereka gunakan di tempat lain.
sumber
Selama ini adalah sisi server .. Lalu ya.
Jika Anda menginginkan keamanan yang lebih baik, gunakan https dan enkripsi sandi hash di DB.
sumber