Saya mendapat pertanyaan hari ini dari manajer saya yang menanyakan pemikiran saya tentang apa yang dianggap sebagai desain yang dapat diterima untuk otentikasi aplikasi formulir web, terutama dalam hal sifat dari banyak browser populer untuk "Remember Password" untuk bidang login kata sandi nama pengguna Anda yang khas .
Saya mengalami masalah dengan jawaban yang saya rasa dapat diterima. Mengingat kelemahan keamanan Sony yang memalukan, saya benar-benar ingin berhati-hati, meskipun data yang disimpan pada orang-orang memiliki sensitivitas yang lebih rendah. Kami tidak menyimpan nomor jaminan sosial atau bahkan alamat, tetapi kami menyimpan nomor telepon, alamat email dan foto pengunjung.
Dia khawatir bahwa pengguna dapat dengan mudah mengingat kata sandi pada terminal publik, maka seseorang dapat langsung melompat pada terminal ini dan mulai melihat atau memodifikasi data dengan cara yang tidak sah. Namun saya cukup yakin bahwa setidaknya pada workstation Windows bahwa browser tidak akan "Ingat Kata Sandi" di seluruh akun pengguna Windows.
Di luar ini saya menerapkan enkripsi kata sandi satu arah di sisi server (menyimpan kata sandi terenkripsi dalam database, mengenkripsi kata sandi yang disediakan pengguna di server, dibandingkan dengan string terenkripsi dari database). Tidak ada rencana segera untuk memasukkan enkripsi SSL namun ini masih merupakan opsi.
Apakah ada kelemahan keamanan utama dengan pendekatan ini? Apakah Anda punya saran yang lebih baik?
sumber
Jawaban:
Beberapa tips tingkat tinggi:
Saran saya kepada Anda adalah untuk mendapatkan buku tentang pengamanan aplikasi Web. Ada terlalu banyak informasi untuk disampaikan dalam satu jawaban / blog / artikel. Topik enkripsi saja cukup besar.
sumber
Anda dapat mencoba untuk meningkatkan perilaku browser - beberapa saran bagus di sini:
/programming/32369/disable-browser-save-password-functionality
sumber
Saya katakan Anda harus baik-baik saja.
Sebagian besar pengguna akan cukup pintar untuk tidak menyimpan kata sandi mereka di terminal publik, dan kata sandi akan disimpan per profil. Ingatlah bahwa mereka dapat dengan mudah menuliskannya pada catatan tempel atau menggunakan kata sandi yang lemah.
Jika halaman login tidak dienkripsi melalui SSL, tidak akan terlalu sulit bagi penyerang untuk mengendus kata sandi itu saat melakukan perjalanan melalui jaringan. Namun, pekerjaan yang baik membuat kata sandi dalam database, yang akan mencegah penyerang potensial melihat kata sandi semua orang (yang dapat mereka gunakan dengan alamat email untuk mencoba masuk ke situs lain di mana pengguna mungkin berada.)
Jika Anda masih ingin, ada cara untuk menonaktifkan perilaku browser seperti yang ditunjukkan Chad. Saya hanya melihat ini sendiri di situs web bank saya dan sistem Microsoft Live.
sumber
Pada titik tertentu, Anda tidak dapat (dan tidak diwajibkan secara hukum untuk) melindungi pengguna dari diri mereka sendiri. Fungsionalitas "Ingat kata sandi" mungkin berisiko, tetapi itu risiko yang ditanggung oleh pengguna. Demikian juga, jika pengguna memutuskan untuk menggunakan kembali kata sandi mereka untuk beberapa layanan, mereka juga menanggung risiko itu. Anda juga tidak diharuskan memperingatkan mereka untuk tidak menuliskan kata sandi mereka pada catatan tempel dan menempelkannya ke monitor mereka, meskipun pengguna juga sering melakukannya.
Begitulah, sampai seseorang berhasil litigasi dan mengubah aturan. Lihat juga: "Peringatan: isinya mungkin panas".
sumber
Saya tidak berpikir Anda dapat mengontrol apakah browser mengingat kata sandi atau tidak. Itu hanya di luar tangan Anda apakah browser melakukan itu atau tidak. Itu juga bukan risiko keamanan yang besar bagi Anda . Anda harus selalu menganggap bahwa serangan dapat dilakukan dari login yang valid. Jangan berasumsi karena seseorang memiliki pengguna login yang sah / lulus bahwa mereka tidak akan berbuat baik. Bagaimanapun, ada banyak cara kata sandi dapat jatuh ke tangan yang salah.
Saya kira Yang bisa Anda lakukan adalah mengacak nama bidang dalam formulir login Anda setiap kali. Alih-alih
<input name="username"
, gunakan sesuatu seperti<input name="user658667587"
. Itu akan membuat nama pengguna yang di-cache cukup tidak berguna. Tapi saya tidak tahu apakah biaya overhead akan sepadan. Belum lagi merepotkan pengguna yang Arent pada mesin publik.Jika Anda berada dalam situasi yang sangat peka terhadap keamanan (perbankan, investasi), Anda bisa bertanya kepada orang-orang saat masuk apakah itu mesin publik. Anda juga dapat melakukan cache alamat IP yang diketahui ketika orang-orang masuk, dan jika mereka login dari lokasi yang berbeda memerlukan nomor pin yang tidak dapat diketik (mis, klik gambar) di samping pengguna / pass normal. Bank saya melakukan sesuatu yang mirip dengan itu.
sumber