BAGIAN I: Cara Masuk
Kami akan menganggap Anda sudah tahu cara membuat form HTML login + kata sandi yang POST nilainya ke skrip di sisi server untuk otentikasi. Bagian di bawah ini akan membahas pola autentikasi praktis yang baik, dan bagaimana cara menghindari perangkap keamanan yang paling umum.
Ke HTTPS atau tidak ke HTTPS?
Kecuali jika koneksi sudah aman (yaitu, diteruskan melalui HTTPS menggunakan SSL / TLS), nilai-nilai form login Anda akan dikirim dalam teks-jelas, yang memungkinkan siapa pun yang menguping di garis antara browser dan server web akan dapat membaca login saat mereka lewat melalui. Jenis penyadapan ini dilakukan secara rutin oleh pemerintah, tetapi secara umum, kami tidak akan membahas kabel 'milik' selain untuk mengatakan ini: Cukup gunakan HTTPS.
Pada dasarnya, satu-satunya cara praktis untuk melindungi terhadap penyadapan / paket mengendus saat login adalah dengan menggunakan HTTPS atau skema enkripsi berbasis sertifikat lain (misalnya, TLS ) atau skema respons tantangan yang teruji & teruji (misalnya, Diffie-Hellman berbasis SRP). Metode lain dapat dengan mudah dielakkan oleh penyerang menguping.
Tentu saja, jika Anda ingin sedikit tidak praktis, Anda juga dapat menggunakan beberapa bentuk skema otentikasi dua faktor (mis. Aplikasi Google Authenticator, codebook 'gaya perang dingin' fisik, atau dongle generator kunci RSA). Jika diterapkan dengan benar, ini dapat bekerja bahkan dengan koneksi yang tidak aman, tetapi sulit untuk membayangkan bahwa seorang dev akan bersedia untuk menerapkan dua faktor auth tetapi tidak SSL.
(Jangan) Gulung enkripsi / hashing JavaScript Anda sendiri
Mengingat biaya yang dirasakan (meskipun sekarang dapat dihindari ) dan kesulitan teknis dalam menyiapkan sertifikat SSL di situs web Anda, beberapa pengembang tergoda untuk menggulir skema hashing atau enkripsi dalam peramban mereka sendiri untuk menghindari melewati login teks jelas melalui kawat yang tidak aman.
Meskipun ini adalah pemikiran yang mulia, pada dasarnya tidak berguna (dan bisa menjadi kelemahan keamanan ) kecuali jika dikombinasikan dengan salah satu di atas - yaitu, mengamankan garis dengan enkripsi yang kuat atau menggunakan tantangan-respons yang dicoba dan diuji. mekanisme (jika Anda tidak tahu apa itu, hanya tahu bahwa itu adalah salah satu yang paling sulit untuk dibuktikan, paling sulit untuk dirancang, dan paling sulit untuk menerapkan konsep-konsep dalam keamanan digital).
Memang benar bahwa hashing kata sandi bisa efektif terhadap pengungkapan kata sandi , itu rentan terhadap serangan replay, serangan / pembajakan Man-In-The-Middle (jika penyerang dapat menyuntikkan beberapa byte ke halaman HTML tanpa jaminan Anda sebelum mencapai Anda browser, mereka hanya dapat mengomentari hashing dalam JavaScript), atau serangan brute-force (karena Anda menyerahkan penyerang baik nama pengguna, garam dan kata sandi hash).
CAPTCHAS melawan kemanusiaan
CAPTCHA dimaksudkan untuk menggagalkan satu kategori serangan spesifik: kamus-otomatis-percobaan-dan-kesalahan tanpa operator manusia. Tidak ada keraguan bahwa ini adalah ancaman nyata, namun, ada beberapa cara untuk mengatasinya dengan mulus yang tidak memerlukan CAPTCHA, yang dirancang secara khusus dengan baik melalui skema pelambatan login sisi server - kita akan membahasnya nanti.
Ketahuilah bahwa implementasi CAPTCHA tidak dibuat sama; mereka sering tidak dapat dipecahkan oleh manusia, kebanyakan dari mereka sebenarnya tidak efektif terhadap bot, semuanya tidak efektif terhadap tenaga kerja murah dunia ketiga (menurut OWASP , tingkat sweatshop saat ini adalah $ 12 per 500 tes), dan beberapa implementasi mungkin ilegal secara teknis di beberapa negara (lihat Lembar Curang Otentikasi OWASP ). Jika Anda harus menggunakan CAPTCHA, gunakan reCAPTCHA Google , karena ini merupakan definisi OCR-hard (karena menggunakan pemindaian buku yang sudah diklasifikasikan dengan OCR) dan berusaha sangat keras untuk menjadi ramah pengguna.
Secara pribadi, saya cenderung menganggap CAPTCHAS menyebalkan, dan menggunakannya hanya sebagai pilihan terakhir ketika seorang pengguna gagal masuk beberapa kali dan pembatasan pembatasan dipercepat. Ini akan terjadi jarang cukup untuk dapat diterima, dan itu memperkuat sistem secara keseluruhan.
Menyimpan Kata Sandi / Memverifikasi login
Ini mungkin akhirnya menjadi pengetahuan umum setelah semua peretasan yang dipublikasikan dan kebocoran data pengguna yang telah kita lihat dalam beberapa tahun terakhir, tetapi harus dikatakan: Jangan menyimpan kata sandi dalam teks yang jelas dalam database Anda. Basis data pengguna diretas, bocor, atau dikumpulkan secara rutin melalui injeksi SQL, dan jika Anda menyimpan kata sandi mentah, plaintext, itu adalah permainan instan untuk keamanan login Anda.
Jadi, jika Anda tidak dapat menyimpan kata sandi, bagaimana Anda memeriksa bahwa kombinasi login + kata sandi yang dikirim dari formulir login sudah benar? Jawabannya adalah hashing menggunakan fungsi derivasi kunci . Setiap kali pengguna baru dibuat atau kata sandi diubah, Anda mengambil kata sandi dan menjalankannya melalui KDF, seperti Argon2, bcrypt, scrypt atau PBKDF2, mengubah kata sandi cleartext ("correcthorsebatterystaple") menjadi string panjang, yang tampak acak. , yang jauh lebih aman untuk disimpan di basis data Anda. Untuk memverifikasi login, Anda menjalankan fungsi hash yang sama pada kata sandi yang dimasukkan, kali ini meneruskan garam dan membandingkan string hash yang dihasilkan dengan nilai yang disimpan dalam database Anda. Argon2, bcrypt dan scrypt menyimpan garam dengan hash. Lihat artikel ini di sec.stackexchange untuk informasi lebih rinci.
Alasan penggunaan garam adalah bahwa hashing itu sendiri tidak cukup - Anda akan ingin menambahkan apa yang disebut 'garam' untuk melindungi hash terhadap tabel pelangi . Garam secara efektif mencegah dua kata sandi yang sama sekali cocok agar tidak disimpan sebagai nilai hash yang sama, mencegah seluruh basis data dipindai dalam satu kali proses jika penyerang mengeksekusi serangan tebak kata sandi.
Hash kriptografi tidak boleh digunakan untuk penyimpanan kata sandi karena kata sandi yang dipilih pengguna tidak cukup kuat (yaitu biasanya tidak mengandung cukup entropi) dan serangan tebak kata sandi dapat diselesaikan dalam waktu yang relatif singkat oleh penyerang dengan akses ke hash. Inilah sebabnya mengapa KDF digunakan - ini secara efektif "meregangkan kunci" , yang berarti bahwa setiap tebakan kata sandi penyerang membuat beberapa pengulangan algoritma hash, misalnya 10.000 kali, yang menyebabkan penyerang menebak kata sandi 10.000 kali lebih lambat.
Data sesi - "Anda masuk sebagai Spiderman69"
Setelah server memverifikasi login dan kata sandi terhadap database pengguna Anda dan menemukan kecocokan, sistem perlu cara untuk mengingat bahwa browser telah diautentikasi. Fakta ini seharusnya hanya disimpan sisi server dalam data sesi.
Jika Anda tidak terbiasa dengan data sesi, inilah cara kerjanya: Satu string yang dihasilkan secara acak disimpan dalam cookie yang kedaluwarsa dan digunakan untuk referensi koleksi data - data sesi - yang disimpan di server. Jika Anda menggunakan kerangka kerja MVC, ini sudah pasti ditangani.
Jika memungkinkan, pastikan cookie sesi memiliki tanda aman dan hanya HTTP yang ditetapkan ketika dikirim ke browser. Bendera HttpOnly memberikan perlindungan terhadap cookie yang sedang dibaca melalui serangan XSS. Bendera aman memastikan bahwa cookie hanya dikirim kembali melalui HTTPS, dan karenanya melindungi terhadap serangan jaringan mengendus. Nilai cookie tidak dapat diprediksi. Di mana cookie yang merujuk pada sesi yang tidak ada disajikan, nilainya harus segera diganti untuk mencegah fiksasi sesi .
BAGIAN II: Cara Tetap Masuk - Kotak Centang "Remember Me" yang Terkenal
Cookie Login Persisten (fungsionalitas "ingat saya") adalah zona berbahaya; di satu sisi, mereka sepenuhnya aman seperti login konvensional ketika pengguna mengerti cara menanganinya; dan di sisi lain, mereka adalah risiko keamanan yang sangat besar di tangan pengguna yang ceroboh, yang mungkin menggunakannya di komputer umum dan lupa untuk logout, dan yang mungkin tidak tahu apa itu cookie browser atau bagaimana cara menghapusnya.
Secara pribadi, saya suka login terus-menerus untuk situs web yang saya kunjungi secara teratur, tetapi saya tahu cara menanganinya dengan aman. Jika Anda yakin bahwa pengguna Anda mengetahui hal yang sama, Anda dapat menggunakan login persisten dengan hati nurani yang bersih. Jika tidak - yah, maka Anda dapat berlangganan filosofi bahwa pengguna yang ceroboh dengan kredensial login mereka membawanya sendiri jika mereka diretas. Ini tidak seperti kita pergi ke rumah pengguna kita dan merobek semua catatan Post-It yang menimbulkan wajah dengan kata sandi yang telah mereka antre di ujung monitor mereka.
Tentu saja, beberapa sistem tidak mampu meretas akun apa pun ; untuk sistem seperti itu, tidak ada cara Anda dapat membenarkan memiliki login persisten.
Jika Anda memutuskan untuk menerapkan cookie login persisten, ini adalah bagaimana Anda melakukannya:
Pertama, luangkan waktu untuk membaca artikel Paragon Initiative tentang masalah ini. Anda harus melakukan banyak elemen dengan benar, dan artikel tersebut dapat menjelaskan masing-masing elemen dengan baik.
Dan hanya untuk mengulangi salah satu jebakan yang paling umum, JANGAN MENYIMPAN COOKIE LOGIN YANG TERTENTU (TOKEN) DI DATABASE ANDA, HANYA DENGAN HASH IT! Token masuk adalah Kata Sandi Setara, jadi jika penyerang mendapatkan tangan mereka di basis data Anda, mereka dapat menggunakan token untuk masuk ke akun apa pun, sama seperti jika itu adalah kombinasi kata sandi masuk-kata sandi yang jelas. Oleh karena itu, gunakan hashing (sesuai dengan https://security.stackexchange.com/a/63438/5002 hash yang lemah akan baik-baik saja untuk tujuan ini) ketika menyimpan token login persisten.
BAGIAN III: Menggunakan Pertanyaan Rahasia
Jangan laksanakan 'pertanyaan rahasia' . Fitur 'pertanyaan rahasia' adalah anti-pola keamanan. Baca kertas dari tautan nomor 4 dari daftar HARUS BACA. Anda bisa bertanya kepada Sarah Palin tentang yang itu, setelah dia Yahoo! akun email diretas selama kampanye presiden sebelumnya karena jawaban untuk pertanyaan keamanannya adalah ... "SMA Wasilla"!
Bahkan dengan pertanyaan yang ditentukan pengguna, sangat mungkin sebagian besar pengguna akan memilih:
Pertanyaan rahasia 'standar' seperti nama gadis ibu atau hewan peliharaan favorit
Sepotong hal-hal sepele yang bisa diambil siapa pun dari blog, profil LinkedIn, atau yang serupa
Setiap pertanyaan yang lebih mudah dijawab daripada menebak kata sandi mereka. Yang, untuk kata sandi yang layak, adalah setiap pertanyaan yang dapat Anda bayangkan
Sebagai kesimpulan, pertanyaan keamanan secara inheren tidak aman dalam hampir semua bentuk dan variasinya, dan tidak boleh digunakan dalam skema otentikasi karena alasan apa pun.
Alasan sebenarnya mengapa pertanyaan keamanan bahkan ada di alam liar adalah bahwa mereka dengan mudah menghemat biaya beberapa panggilan dukungan dari pengguna yang tidak dapat mengakses email mereka untuk mendapatkan kode pengaktifan kembali. Ini dengan mengorbankan keamanan dan reputasi Sarah Palin. Setimpal? Mungkin tidak.
BAGIAN IV: Fungsi Kata Sandi Lupa
Saya telah menyebutkan mengapa Anda tidak boleh menggunakan pertanyaan keamanan untuk menangani kata sandi pengguna yang terlupakan / hilang; tidak perlu dikatakan bahwa Anda tidak boleh mengirim email kepada pengguna kata sandi mereka yang sebenarnya. Setidaknya ada dua perangkap yang terlalu umum untuk dihindari dalam bidang ini:
Jangan setel ulang kata sandi yang dilupakan menjadi kata sandi kuat yang dibuat secara otomatis - kata sandi semacam itu sangat sulit diingat, yang berarti pengguna harus mengubahnya atau menuliskannya - katakanlah, pada Post-It kuning cerah di tepi monitor mereka. Alih-alih mengatur kata sandi baru, biarkan pengguna memilih yang baru segera - yang memang ingin mereka lakukan. (Pengecualian untuk hal ini adalah jika pengguna secara universal menggunakan pengelola kata sandi untuk menyimpan / mengelola kata sandi yang biasanya tidak mungkin untuk diingat tanpa menuliskannya).
Selalu hash kode sandi / token yang hilang dalam database. LAGI , kode ini adalah contoh lain dari Setara Kata Sandi, jadi HARUS di-hash seandainya penyerang mendapatkan tangan mereka di basis data Anda. Ketika kode kata sandi yang hilang diminta, kirim kode plaintext ke alamat email pengguna, lalu hash, simpan hash di basis data Anda - dan buang yang asli . Sama seperti kata sandi atau token login yang persisten.
Catatan terakhir: selalu pastikan antarmuka Anda untuk memasukkan 'kode kata sandi yang hilang' setidaknya seaman formulir login Anda sendiri, atau penyerang hanya akan menggunakan ini untuk mendapatkan akses sebagai gantinya. Memastikan Anda membuat 'kode kata sandi hilang' yang sangat lama (misalnya, 16 karakter alfanumerik peka huruf besar-kecil) adalah awal yang baik, tetapi pertimbangkan untuk menambahkan skema pembatasan yang sama yang Anda lakukan untuk formulir login itu sendiri.
BAGIAN V: Memeriksa Kekuatan Kata Sandi
Pertama, Anda ingin membaca artikel kecil ini untuk pemeriksaan realitas: 500 kata sandi paling umum
Oke, jadi mungkin daftar itu bukan daftar kata sandi paling umum yang kanonik pada sistem apa pun di mana pun , tetapi ini adalah indikasi yang baik tentang betapa buruknya orang akan memilih kata sandi mereka ketika tidak ada kebijakan yang diberlakukan. Selain itu, daftar ini terlihat sangat dekat dengan rumah ketika Anda membandingkannya dengan analisis yang tersedia untuk umum atas kata sandi yang baru saja dicuri.
Jadi: Tanpa persyaratan kekuatan kata sandi minimum, 2% pengguna menggunakan salah satu dari 20 kata sandi paling umum. Artinya: jika seorang penyerang hanya mendapat 20 upaya, 1 dari 50 akun di situs web Anda akan dapat di crack.
Untuk menggagalkan ini diperlukan menghitung entropi kata sandi dan kemudian menerapkan ambang batas. Publikasi Khusus Institut Standar dan Teknologi Nasional (NIST) 800-63 memiliki serangkaian saran yang sangat bagus. Bahwa, ketika dikombinasikan dengan analisis tata letak kamus dan keyboard (misalnya, 'qwertyuiop' adalah kata sandi yang buruk), dapat menolak 99% dari semua kata sandi yang dipilih dengan buruk pada level 18 bit entropi. Cukup menghitung kekuatan kata sandi dan menunjukkan pengukur kekuatan visual kepada pengguna adalah baik, tetapi tidak cukup. Kecuali jika diberlakukan, banyak pengguna kemungkinan besar akan mengabaikannya.
Dan untuk kenyamanan pengguna menggunakan kata sandi entropi yang tinggi, Kata Sandi xkcd dari Randall Munroe sangat disarankan.
Memanfaatkan Troy Hunt's Have I Been Pwned API untuk memeriksa kata sandi pengguna terhadap kata sandi yang dikompromikan dalam pelanggaran data publik.
BAGIAN VI: Banyak Lagi - Atau: Mencegah Upaya Masuk Cepat-Api
Pertama, lihat nomornya: Kecepatan Pemulihan Kata Sandi - Berapa lama kata sandi Anda akan bertahan
Jika Anda tidak punya waktu untuk melihat-lihat tabel di tautan itu, berikut daftarnya:
Dibutuhkan hampir tidak ada waktu untuk crack password yang lemah, bahkan jika Anda retak dengan sempoa
Dibutuhkan hampir tidak ada waktu untuk memecahkan sandi 9-karakter alfanumerik jika kasus tidak sensitif
Hampir tidak memerlukan waktu untuk memecahkan kata sandi atas dan simbol huruf dan angka yang rumit, huruf besar dan kecil jika panjangnya kurang dari 8 karakter (PC desktop dapat mencari seluruh ruang tombol hingga 7 karakter dalam suatu hal. hari atau bahkan berjam-jam)
Akan tetapi, ini akan memakan waktu terlalu banyak untuk memecahkan kata sandi 6-karakter, jika Anda dibatasi satu upaya per detik!
Jadi apa yang bisa kita pelajari dari angka-angka ini? Ya, banyak, tapi kita bisa fokus pada bagian terpenting: fakta bahwa mencegah sejumlah besar upaya login berurutan cepat (mis. Serangan brute force ) sebenarnya tidak terlalu sulit. Tetapi mencegahnya dengan benar tidak semudah kelihatannya.
Secara umum, Anda memiliki tiga pilihan yang semuanya efektif terhadap serangan brute-force (dan serangan kamus, tetapi karena Anda sudah menggunakan kebijakan kata sandi yang kuat, mereka seharusnya tidak menjadi masalah) :
Tunjukkan CAPTCHA setelah upaya yang gagal (menjengkelkan sekali dan seringkali tidak efektif - tapi saya mengulangi sendiri di sini)
Mengunci akun dan memerlukan verifikasi email setelah upaya N gagal (ini adalah serangan DoS yang menunggu untuk terjadi)
Dan akhirnya, masuknya pembatasan : yaitu, menetapkan penundaan waktu antara upaya setelah upaya N gagal (ya, serangan DoS masih mungkin, tetapi setidaknya mereka jauh lebih kecil kemungkinannya dan jauh lebih rumit untuk dilakukan).
Praktik terbaik # 1: Penundaan waktu singkat yang meningkat dengan jumlah upaya gagal, seperti:
- 1 percobaan gagal = tidak ada penundaan
- 2 percobaan gagal = 2 detik keterlambatan
- 3 upaya gagal = 4 detik penundaan
- 4 percobaan gagal = 8 detik keterlambatan
- 5 upaya gagal = 16 detik keterlambatan
- dll.
DoS menyerang skema ini akan sangat tidak praktis, karena waktu penguncian yang dihasilkan sedikit lebih besar dari jumlah waktu penguncian sebelumnya.
Untuk mengklarifikasi: Penundaan bukan penundaan sebelum mengembalikan respons ke browser. Ini lebih seperti batas waktu atau periode refraktori di mana upaya masuk ke akun tertentu atau dari alamat IP tertentu tidak akan diterima atau dievaluasi sama sekali. Artinya, kredensial yang benar tidak akan kembali dalam login yang berhasil, dan kredensial yang salah tidak akan memicu peningkatan keterlambatan.
Praktik terbaik # 2: Penundaan waktu menengah yang mulai berlaku setelah N gagal dilakukan, seperti:
- 1-4 usaha yang gagal = tidak ada penundaan
- 5 percobaan gagal = 15-30 menit keterlambatan
DoS menyerang skema ini akan sangat tidak praktis, tetapi tentu bisa dilakukan. Juga, mungkin relevan untuk dicatat bahwa penundaan yang lama dapat sangat mengganggu bagi pengguna yang sah. Pengguna yang pelupa akan membenci Anda.
Praktik terbaik # 3: Menggabungkan dua pendekatan - baik penundaan waktu tetap, yang berlaku setelah N gagal upaya, seperti:
- 1-4 usaha yang gagal = tidak ada penundaan
- 5+ upaya gagal = 20 detik keterlambatan
Atau, penundaan yang meningkat dengan batas atas tetap, seperti:
- 1 percobaan gagal = 5 detik penundaan
- 2 percobaan gagal = 15 detik keterlambatan
- 3+ upaya gagal = penundaan 45 detik
Skema akhir ini diambil dari saran praktik terbaik OWASP (tautan 1 dari daftar HARUS-BACA) dan harus dianggap praktik terbaik, meskipun diakui di sisi restriktif.
Sebagai aturan praktis, saya akan mengatakan: semakin kuat kebijakan kata sandi Anda, semakin sedikit Anda harus mengganggu pengguna dengan penundaan. Jika Anda memerlukan 9+ kata sandi karakter yang kuat (alfanumerik peka + angka yang diperlukan), Anda dapat memberikan pengguna 2-4 upaya kata sandi yang tidak tertunda sebelum mengaktifkan pembatasan.
DoS yang menyerang skema pembatasan masuk akhir ini akan sangat tidak praktis. Dan sebagai sentuhan terakhir, selalu izinkan login persisten (cookie) (dan / atau formulir login yang diverifikasi CAPTCHA) untuk dilewati, sehingga pengguna yang sah bahkan tidak akan tertunda saat serangan sedang berlangsung . Dengan begitu, serangan DoS yang sangat tidak praktis menjadi serangan yang sangat tidak praktis.
Selain itu, masuk akal untuk melakukan pelambatan yang lebih agresif pada akun admin, karena itu adalah titik masuk paling menarik
BAGIAN VII: Serangan Brute Force Terdistribusi
Selain itu, penyerang yang lebih maju akan mencoba untuk menghindari pembatasan masuk dengan 'menyebarkan aktivitas mereka':
Mendistribusikan upaya pada botnet untuk mencegah penandaan alamat IP
Alih-alih memilih satu pengguna dan mencoba 50.000 kata sandi paling umum (yang tidak dapat mereka lakukan, karena pelambatan kami), mereka akan memilih kata sandi yang paling umum dan mencobanya terhadap 50.000 pengguna. Dengan begitu, mereka tidak hanya menyiasati upaya upaya maksimum seperti CAPTCHA dan pembatasan masuk, peluang mereka untuk sukses juga meningkat, karena kata sandi paling umum nomor 1 jauh lebih mungkin daripada angka 49,995
Menempatkan permintaan login untuk setiap akun pengguna, katakanlah, terpisah 30 detik, untuk menyelinap di bawah radar
Di sini, praktik terbaik adalah mencatat jumlah login gagal, sistem keseluruhan , dan menggunakan rata-rata berjalan dari frekuensi login buruk situs Anda sebagai dasar untuk batas atas yang kemudian Anda terapkan pada semua pengguna.
Terlalu abstrak? Biarkan saya ulangi:
Katakanlah situs Anda memiliki rata-rata 120 login buruk per hari selama 3 bulan terakhir. Menggunakan itu (rata-rata berjalan), sistem Anda mungkin menetapkan batas global menjadi 3 kali lipatnya - yaitu. 360 upaya gagal selama periode 24 jam. Kemudian, jika jumlah total upaya gagal di semua akun melebihi jumlah itu dalam satu hari (atau bahkan lebih baik, pantau laju akselerasi dan pemicu pada ambang yang dihitung), itu akan mengaktifkan pembatasan masuk sistem-lebar - artinya penundaan singkat untuk SEMUA pengguna (masih, dengan pengecualian login cookie dan / atau login CAPTCHA cadangan).
Saya juga memposting pertanyaan dengan lebih detail dan diskusi yang sangat bagus tentang bagaimana menghindari pitfals yang rumit dalam menangkis serangan brute force terdistribusi
BAGIAN VIII: Penyedia Otentikasi Dua-Faktor dan Otentikasi
Kredensial dapat dikompromikan, apakah dengan eksploitasi, kata sandi yang ditulis dan hilang, laptop dengan kunci dicuri, atau pengguna yang masuk ke situs phishing. Login dapat lebih jauh dilindungi dengan otentikasi dua faktor, yang menggunakan faktor out-of-band seperti kode sekali pakai yang diterima dari panggilan telepon, pesan SMS, aplikasi, atau dongle. Beberapa penyedia menawarkan layanan otentikasi dua faktor.
Otentikasi dapat sepenuhnya didelegasikan ke layanan akses masuk tunggal, tempat penyedia lain menangani pengumpulan kredensial. Ini mendorong masalah ke pihak ketiga yang tepercaya. Google dan Twitter keduanya menyediakan layanan SSO berbasis standar, sementara Facebook menyediakan solusi eksklusif yang serupa.
TAUTAN HARUS BACA Tentang Otentikasi Web
- OWASP Guide To Authentication / OWASP Authentication Sheet Cheat
- Dos dan Larangan Otentikasi Klien di Web (makalah penelitian MIT yang sangat mudah dibaca)
- Wikipedia: Cookie HTTP
- Pertanyaan pengetahuan pribadi untuk otentikasi fallback: Pertanyaan keamanan di era Facebook (makalah penelitian Berkeley yang sangat mudah dibaca)