Adakah selamat untuk menyimpan data pengguna dalam localStorage?

Mary-Kate Olsen
Lepaskan: 2024-11-20 13:47:14
asal
588 orang telah melayarinya

É seguro guardar dados do usuário no localStorage?

Apabila membangunkan aplikasi web, keperluan sering timbul untuk menyimpan data pengguna dalam penyemak imbas untuk meningkatkan pengalaman atau mengekalkan kegigihan keadaan. Tetapi adakah selamat untuk menggunakan localStorage untuk ini? Mari terokai risiko, amalan terbaik dan alternatif yang selamat.

Apakah itu LocalStorage?
localStorage ialah API penyemak imbas yang membolehkan anda menyimpan data secara ringkas dan berterusan di sisi pelanggan. Tidak seperti sessionStorage, data yang disimpan dalam localStorage kekal boleh diakses walaupun selepas pengguna menutup dan membuka semula penyemak imbas.

Walaupun ia adalah alat yang praktikal, kesederhanaannya disertakan dengan beberapa had keselamatan.

Senario: Pengesahan Pengguna
Bayangkan anda mempunyai aplikasi yang menggunakan Supabase untuk mengesahkan pengguna. Selepas log masuk, anda ingin menyimpan maklumat pengguna dalam penyemak imbas, seperti contoh ini:

async function checkAuth() {
  try {
    const { data, error } = await supabase.auth.getUser()
    if (error) throw error

    if (data.user) {
      user.value = data.user
      localStorage.setItem('user', JSON.stringify(data.user)) // Armazenando o usuário
      console.log('Usuário autenticado:', data.user)
    } else {
      localStorage.removeItem('user')
    }
  } catch (error) {
    console.error('Erro ao verificar autenticação:', (error as Error).message)
  }
}
Salin selepas log masuk
Salin selepas log masuk

Ideanya nampak mudah: simpan objek pengguna dalam localStorage untuk menggunakannya kemudian. Tetapi adakah pendekatan ini selamat?

Risiko Menggunakan LocalStorage

  1. Pendedahan kepada Skrip Hasad (XSS) Isu keselamatan terbesar apabila menggunakan localStorage ialah ia boleh diakses oleh mana-mana skrip yang berjalan pada halaman. Ini termasuk skrip berniat jahat yang boleh disuntik ke dalam tapak web melalui serangan XSS (Cross-Site Scripting).

Sebagai contoh, jika penyerang berjaya menyuntik kod berikut ke dalam halaman anda:

console.log(localStorage.getItem('user'))
Salin selepas log masuk
Salin selepas log masuk

Mereka akan mempunyai akses kepada data yang disimpan, termasuk maklumat sensitif tentang pengguna.

  1. Data tidak disulitkan
    localStorage menyimpan data sebagai teks biasa. Ini bermakna sesiapa sahaja yang mempunyai akses kepada peranti pengguna boleh membuka konsol penyemak imbas dan terus melihat maklumat yang disimpan.

  2. Tiada Tamat Tempoh Automatik
    Tidak seperti kuki, localStorage tidak mempunyai mekanisme terbina dalam untuk tamat tempoh data secara automatik. Ini boleh menyebabkan penyimpanan maklumat lama atau lapuk yang tidak diperlukan.

Alternatif Lebih Selamat

  1. Percayai Sesi Supabase Supabase sudah menguruskan sesi pengesahan melalui kuki selamat dan token JWT. Tidak perlu menyimpan objek pengguna ke localStorage.

Anda boleh menyemak sesi pengguna pada bila-bila masa menggunakan kaedah:

const { data, error } = await supabase.auth.getUser()
Salin selepas log masuk
  1. Gunakan sessionStorage
    Jika anda perlu menyimpan data dalam penyemak imbas, pertimbangkan untuk menggunakan sessionStorage. Ia menyimpan data hanya selagi tab atau tetingkap penyemak imbas dibuka. Ini mengurangkan risiko pendedahan jika peranti dicuri secara fizikal, tetapi tidak melindungi daripada XSS.

  2. Hanya Simpan Data Tidak Sensitif
    Jika anda memerlukan ketekunan dalam localStorage, elakkan menyimpan maklumat sensitif seperti token akses atau data peribadi. Simpan maklumat generik sahaja, seperti pengecam pengguna:

async function checkAuth() {
  try {
    const { data, error } = await supabase.auth.getUser()
    if (error) throw error

    if (data.user) {
      user.value = data.user
      localStorage.setItem('user', JSON.stringify(data.user)) // Armazenando o usuário
      console.log('Usuário autenticado:', data.user)
    } else {
      localStorage.removeItem('user')
    }
  } catch (error) {
    console.error('Erro ao verificar autenticação:', (error as Error).message)
  }
}
Salin selepas log masuk
Salin selepas log masuk
  1. Melaksanakan Perlindungan Terhadap XSS Untuk mengurangkan risiko XSS, laksanakan amalan keselamatan berikut:

Gunakan Dasar Keselamatan Kandungan (CSP) yang ketat untuk menghalang skrip yang tidak dibenarkan.
Sahkan dan bersihkan semua input pengguna.
Pastikan kebergantungan dan perpustakaan sentiasa dikemas kini.

  1. Sulitkan Data Jika penting untuk menggunakan localStorage, anda boleh menyulitkan data sebelum menyimpannya. Ini menambahkan lapisan keselamatan tambahan, walaupun ia tidak menghapuskan risiko sepenuhnya.

Contoh dengan CryptoJS:

console.log(localStorage.getItem('user'))
Salin selepas log masuk
Salin selepas log masuk

Awas: Pastikan anda melindungi kunci penyulitan, seolah-olah ia terdedah, keselamatan akan terjejas.

Kesimpulan
Walaupun localStorage ialah alat praktikal untuk menyimpan data dalam penyemak imbas, ia tidak sesuai untuk data sensitif. Berikut adalah cadangan utama:

Sesi amanah yang diuruskan oleh Supabase.
Elakkan menyimpan maklumat sensitif ke localStorage.
Laksanakan amalan keselamatan yang baik seperti perlindungan XSS.
Dengan amalan ini, anda boleh memastikan pengalaman pengguna adalah lancar sambil melindungi data anda daripada serangan.

Apa pendapat anda? Adakah anda menggunakan localStorage dalam projek anda? Kongsi pengalaman anda dalam komen!

Atas ialah kandungan terperinci Adakah selamat untuk menyimpan data pengguna dalam localStorage?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan