Di situs kami, kami memberikan simulasi kepada pengguna berdasarkan informasi pribadi mereka (diberikan melalui formulir). Kami ingin mengizinkan mereka untuk kembali ke hasil simulasi nanti, tetapi tanpa memaksa mereka untuk membuat akun login / kata sandi.
Kami telah berpikir untuk mengirimi mereka email dengan tautan, dari mana mereka bisa mendapatkan kembali hasilnya. Tapi, tentu saja, kami harus mengamankan URL ini, karena data pribadi dipertaruhkan.
Jadi kami bermaksud untuk memberikan token (seperti kombinasi 40 karakter huruf dan angka, atau MD5 Hash) di URL dan menggunakan SSL.
Akhirnya, mereka akan menerima email seperti itu:
Hai,
Dapatkan kembali hasil Anda di https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn
Apa yang Anda pikirkan? Apakah itu cukup aman? Apa yang akan Anda sarankan kepada saya untuk pembuatan token? Bagaimana dengan menyampaikan parameter URL dalam permintaan https?
Jawaban:
SSL akan melindungi parameter kueri saat transit; namun, email itu sendiri tidak aman, dan email dapat memantul di sejumlah server berapa pun sebelum mencapai tujuannya.
Juga tergantung pada server web Anda, URL lengkap mungkin masuk ke file log-nya. Bergantung pada seberapa sensitif datanya, Anda mungkin tidak ingin orang-orang TI Anda memiliki akses ke semua token.
Selain itu, URL dengan string kueri akan disimpan dalam riwayat pengguna Anda, memungkinkan pengguna lain dari mesin yang sama untuk mengakses URL.
Terakhir dan yang membuatnya sangat tidak aman adalah, URL dikirim di header Referer dari semua permintaan untuk sumber daya apa pun, bahkan sumber daya pihak ketiga. Jadi jika Anda menggunakan Google Analytics misalnya, Anda akan mengirimkan token URL ke Google dan semuanya kepada mereka.
Menurut saya ini ide yang buruk.
sumber
Saya akan menggunakan cookie untuk itu. Alur kerja harus seperti ini:
Sekarang, pengguna ingin menggunakan browser yang berbeda di komputer yang berbeda. Dalam hal ini, tawarkan tombol "transfer". Saat pengguna mengklik tombol ini, dia akan mendapatkan "token". Dia dapat menggunakan token ini di komputer lain untuk menyetel ulang cookie. Dengan cara ini, pengguna memutuskan seberapa aman dia ingin mentransfer token.
sumber
SSL mengamankan konten data saat transit, tetapi saya tidak yakin tentang URL-nya.
Terlepas dari itu, salah satu cara untuk mengurangi penyerang yang menggunakan kembali token URL tersebut adalah dengan memastikan setiap token hanya dapat digunakan sekali. Anda bahkan dapat mengatur cookie sehingga pengguna yang sah dapat terus menggunakan tautan tersebut, tetapi setelah akses pertama itu hanya akan berfungsi untuk seseorang yang memiliki cookie.
Jika email pengguna disusupi dan penyerang mendapatkan tautannya terlebih dahulu, Anda sudah disemprot. Tetapi pengguna juga memiliki masalah yang lebih besar.
sumber
E-mail pada dasarnya tidak aman. Jika ada yang bisa mengklik tautan itu dan mendapatkan datanya, Anda tidak benar-benar melindunginya.
sumber
Token itu aman saat diteruskan melalui SSL. Masalah yang akan Anda hadapi adalah bahwa ini tersedia untuk orang-orang (mereka yang tidak dimaksudkan untuk itu) dengan dapat melihat URL-nya.
Jika itu informasi pribadi seperti SSN, saya rasa saya tidak akan mengirim URL melalui email. Saya ingin mereka membuat nama pengguna dan kata sandi untuk situs tersebut. Terlalu mudah untuk mengkompromikan email dengan informasi semacam itu yang dipertaruhkan untuk Anda dan mereka. Jika akun seseorang dikompromikan, itu akan menjadi pertanyaan siapa sebenarnya kesalahan itu. Semakin aman semakin baik Anda dari sudut pandang CYA yang ketat.
sumber
Saya benar-benar tidak akan menganggap itu cukup aman untuk situasi di mana ada masalah privasi yang serius. Fakta bahwa Anda mengirimkan URL dalam email (mungkin teks jelas) sejauh ini merupakan tautan terlemah. Setelah itu adalah risiko serangan brute force pada token, yang (tidak memiliki struktur mekanisme otentikasi yang sebenarnya) cenderung lebih rentan daripada penyiapan nama pengguna dan sandi yang dibuat dengan baik.
Tidak ada masalah sama sekali dengan parameter dalam permintaan https, kebetulan.
sumber
Memang, itu ide yang buruk. Anda akan menakut-nakuti keamanan dengan penggunaan yang mudah. Seperti yang dikatakan sebelumnya SSL hanya akan melindungi transfer informasi antara server dan browser klien dan hanya akan mencegah serangan perantara. Email sangat berisiko dan tidak aman.
Yang terbaik adalah otentikasi nama pengguna dan kata sandi untuk mengakses informasi.
Saya suka ide kue lebih atau kurang. Anda juga harus mengenkripsi informasi cookie. Anda juga harus membuat token dengan salt dan frase kunci ditambah $ _SERVER ['HTTP_USER_AGENT'] untuk membatasi kemungkinan serangan. Simpan sebanyak mungkin informasi tidak sensitif tentang klien di cookie untuk penggunaan verifikasi.
Frase kunci dapat disimpan dalam cookie untuk memudahkan penggunaan tetapi perlu diingat bahwa cookie juga dapat dicuri = (.
Lebih baik biarkan klien mengetikkan frase kunci yang dia berikan, yang juga disimpan di database bersama datanya.
Atau, kunci dapat digunakan jika orang tersebut menggunakan mesin lain yang berbeda dalam parameter $ _SERVER ['HTTP_USER_AGENT'] atau melewatkan cookie. Jadi cookie dapat ditransfer atau diatur.
Pastikan juga bahwa data sensitif dienkripsi dalam database. Kau tak pernah tahu ;)
sumber
Anda tahu bahwa jika ada peretas yang mendapatkan akses ke database Anda, banyak informasi pribadi yang dapat diberikan secara bebas?
Setelah itu saya akan mengatakan bahwa ini tidak buruk sebagai ide. Saya tidak akan menggunakan MD5 atau SHA1 karena tidak terlalu aman untuk hashing. Mereka dapat "didekripsi" (saya tahu ini bukan enkripsi) dengan mudah.
Kalau tidak, saya mungkin akan menggunakan informasi kedua yang tidak akan dikirim melalui email semacam kata sandi. Alasannya cukup sederhana, jika seseorang mendapatkan akses ke email pengguna (cukup mudah dengan hotmail jika Anda tidak mematikan sesi Anda) dia akan memiliki akses ke semua informasi yang telah dikirim pengguna.
Perhatikan bahwa HTTPS akan mengamankan dan menyembunyikan data yang dikirim dari situs Anda ke pengguna akhir. Tidak ada yang lain, anggap saja sebagai terowongan yang aman. Tidak lebih tidak kurang.
sumber
Dari apa yang saya pahami tentang ide Anda, secara teori seseorang dapat mengetikkan string 40 karakter acak atau hash MD5 dan mendapatkan detail orang lain. Meskipun hal ini mungkin sangat tidak mungkin, ini hanya perlu terjadi sekali.
Solusi yang lebih baik mungkin mengirimkan token kepada pengguna lalu meminta mereka memasukkan beberapa detail, seperti nama, kode pos, ssn, atau kombinasi keduanya.
sumber