Saat ini saya sedang mengerjakan penyedia PHP OpenID yang akan bekerja melalui HTTPS (karenanya dienkripsi SSL).
Apakah salah jika saya mengirimkan kata sandi sebagai teks biasa? HTTPS secara teori, tidak dapat dicegat, jadi saya tidak melihat ada yang salah. Atau apakah ini tidak aman pada tingkat tertentu dan saya gagal untuk melihatnya?
https
password-protection
WhyNotHugo
sumber
sumber
Anda masih perlu memastikan bahwa Anda mengirimkannya melalui permintaan POST, bukan GET. Jika Anda mengirimkannya melalui permintaan GET, ini bisa disimpan dalam teks biasa di log riwayat browser pengguna atau log akses server web.
sumber
Jika HTTP dinonaktifkan, dan Anda hanya menggunakan HTTPS, Anda tidak benar-benar mentransmisikan kata sandi sebagai teks biasa.
sumber
Sisi klien hash. Mengapa? Izinkan saya memberi tahu Anda tentang eksperimen kecil. Berjalan ke komputer di kafetaria perusahaan. Buka browser ke halaman login situs web perusahaan (https). Tekan F12, klik tab jaringan, centang log tetap, minimalkan konsol tetapi biarkan halaman web terbuka untuk halaman login. Duduk dan makan siang. Perhatikan sebagai karyawan setelah karyawan log on ke situs web perusahaan dan menjadi pekerja kecil yang baik logout setelah selesai. Selesai makan siang, duduklah di depan komputer, buka tab jaringan dan lihat setiap nama pengguna dan kata sandi dalam teks biasa dalam bentuk bodys.
Tidak ada alat khusus, tidak ada pengetahuan khusus, tidak ada perangkat keras peretasan yang mewah, tidak ada keylogger, hanya F12 lama yang bagus.
Tapi, hei, teruslah berpikir yang Anda butuhkan hanyalah SSL. Orang jahat akan mencintaimu karenanya.
sumber
Mari kita buat beberapa catatan untuk jawaban sebelumnya.
Pertama, itu mungkin bukan ide terbaik untuk menggunakan sisi klien algoritma hash. Jika kata sandi Anda diasinkan di sisi server, Anda tidak akan dapat membandingkan hash (setidaknya tidak jika Anda tidak menyimpan hash klien dalam database di salah satu lapisan hashing dari kata sandi, yang sama atau lebih buruk). Dan Anda tidak ingin mengimplementasikan algoritma hashing yang digunakan oleh database di sisi klien, itu akan konyol.
Kedua, menukar kunci kriptografi juga tidak ideal. MITM secara teoritis (mengingat dia memiliki sertifikat root yang diinstal pada klien) mengubah kunci kriptografi, dan mengubah dengan kuncinya sendiri:
Koneksi asli (tidak mempertimbangkan tls) dari server teoritis yang bertukar kunci:
Klien meminta kunci publik> server memegang kunci privat, menghasilkan kunci publik ke klien> server mengirimkan kunci publik ke klien
Sekarang, di jalur MITM teoretis:
Klien meminta kunci publik> MITM menghasilkan kunci privat palsu > Server menyimpan kunci privat, menghasilkan kunci publik ke klien> MITM menerima kunci publik dari server asli, sekarang, kami bebas untuk mengirim kunci publik palsu kami ke klien, dan setiap kali permintaan datang dari klien, kami akan mendekripsi data klien dengan kunci palsu, mengubah muatan (atau membacanya) dan mengenkripsi dengan kunci publik asli > MITM mengirimkan kunci publik palsu ke klien.
Itulah tujuan memiliki sertifikat CA tepercaya di TLS, dan begitulah cara Anda menerima pesan dari peringatan browser jika sertifikat tersebut tidak valid.
Menanggapi OP: menurut pendapat saya Anda tidak dapat melakukan itu, karena cepat atau lambat, seseorang akan ingin menyerang pengguna dari layanan Anda dan akan mencoba untuk melanggar protokol Anda.
Apa yang dapat Anda lakukan, bagaimanapun, adalah menerapkan 2FA untuk mencegah orang mencoba masuk dengan kata sandi yang sama. Waspadai serangan replay.
Saya tidak ahli dalam kriptografi, mohon koreksi jika saya salah.
sumber
Poster lainnya benar. Sekarang bahwa Anda menggunakan SSL untuk mengenkripsi transmisi dari password, pastikan Anda sedang hashing dengan algoritma yang baik dan garam sehingga itu dilindungi ketika itu saat istirahat , juga ...
sumber
Contoh @CodeDog memiliki masalah ..
Ya, saya yakin pengguna akan masuk ke kotak caffeteria. Jika Anda menangkap log dari caffeteria perusahaan, maka Anda adalah pelanggaran keamanan. Kotak caffeterias perusahaan harus dinonaktifkan, misalnya tanpa syarat, tidak ada pencatat, tidak ada akses jarak jauh, dll. Untuk mencegah Anda, peretas dalam.
Contohnya adalah keamanan akses komputer yang baik, dan tidak terlalu terkait dengan keamanan jaringan. Ini disediakan sebagai pembenaran untuk hashing sisi klien, tetapi jika Anda memiliki akses komputer, Anda bisa menggunakan pencatat penekanan tombol dan melewati itu. Hash sisi klien sekali lagi tidak relevan. Contoh oleh @CodeDog adalah peretasan akses komputer dan membutuhkan teknik yang berbeda dari peretasan lapisan jaringan.
Selain itu, peretasan komputer publik dilindungi dengan melumpuhkan sistem dari ancaman, seperti yang disebutkan di atas. misalnya menggunakan chromebook untuk komputer kafetaria publik. Tapi itu dilewati oleh peretasan fisik . Di luar jam kerja, pergi ke kafetaria dan siapkan kamera rahasia untuk merekam penekanan keyboard oleh pengguna. Maka tidak masalah jika komputer caffeteria lumpuh, ATAU jenis enkripsi apa yang digunakan.
lapisan fisik -> lapisan komputer -> lapisan klien -> lapisan jaringan -> lapisan server
Untuk jaringan, tidak masalah jika Anda hash di sisi klien karena lapisan https / ssl akan mengenkripsi passwd biasa. Jadi seperti yang disebutkan orang lain, hashing klien berlebihan jika TLS aman.
sumber