


Adakah selamat untuk menyimpan data pengguna dalam localStorage?
Nov 20, 2024 pm 01:47 PMApabila 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) } }
Ideanya nampak mudah: simpan objek pengguna dalam localStorage untuk menggunakannya kemudian. Tetapi adakah pendekatan ini selamat?
Risiko Menggunakan LocalStorage
- 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'))
Mereka akan mempunyai akses kepada data yang disimpan, termasuk maklumat sensitif tentang pengguna.
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.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
- 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()
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.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) } }
- 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.
- 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'))
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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

Penangkapan dan gelembung acara adalah dua peringkat penyebaran acara di Dom. Tangkap adalah dari lapisan atas ke elemen sasaran, dan gelembung adalah dari elemen sasaran ke lapisan atas. 1. Penangkapan acara dilaksanakan dengan menetapkan parameter useCapture addeventlistener kepada benar; 2. Bubble acara adalah tingkah laku lalai, useCapture ditetapkan kepada palsu atau ditinggalkan; 3. Penyebaran acara boleh digunakan untuk mencegah penyebaran acara; 4. Acara menggelegak menyokong delegasi acara untuk meningkatkan kecekapan pemprosesan kandungan dinamik; 5. Penangkapan boleh digunakan untuk memintas peristiwa terlebih dahulu, seperti pemprosesan pembalakan atau ralat. Memahami kedua -dua fasa ini membantu mengawal masa dan bagaimana JavaScript bertindak balas terhadap operasi pengguna.

Perbezaan utama antara modul ES dan Commonjs adalah kaedah pemuatan dan senario penggunaan. 1.Commonjs dimuatkan secara serentak, sesuai untuk persekitaran sisi pelayan Node.js; 2. Modul tidak disengajakan, sesuai untuk persekitaran rangkaian seperti penyemak imbas; 3. Sintaks, modul ES menggunakan import/eksport dan mesti terletak di skop peringkat atas, manakala penggunaan CommonJS memerlukan/modul.exports, yang boleh dipanggil secara dinamik pada runtime; 4.Commonjs digunakan secara meluas dalam versi lama node.js dan perpustakaan yang bergantung kepadanya seperti Express, manakala modul ES sesuai untuk kerangka depan moden dan nod.jsv14; 5. Walaupun ia boleh dicampur, ia boleh menyebabkan masalah dengan mudah.

Mekanisme pengumpulan sampah JavaScript secara automatik menguruskan memori melalui algoritma pembersihan tag untuk mengurangkan risiko kebocoran ingatan. Enjin melintasi dan menandakan objek aktif dari objek akar, dan tidak bertanda dianggap sebagai sampah dan dibersihkan. Sebagai contoh, apabila objek tidak lagi dirujuk (seperti menetapkan pembolehubah kepada null), ia akan dikeluarkan dalam pusingan seterusnya kitar semula. Punca kebocoran memori yang biasa termasuk: ① Pemasa atau pendengar peristiwa yang tidak jelas; ② Rujukan kepada pembolehubah luaran dalam penutupan; ③ Pembolehubah global terus memegang sejumlah besar data. Enjin V8 mengoptimumkan kecekapan kitar semula melalui strategi seperti kitar semula generasi, penandaan tambahan, kitar semula selari/serentak, dan mengurangkan masa menyekat benang utama. Semasa pembangunan, rujukan global yang tidak perlu harus dielakkan dan persatuan objek harus dihiasi dengan segera untuk meningkatkan prestasi dan kestabilan.

Terdapat tiga cara biasa untuk memulakan permintaan HTTP dalam node.js: Gunakan modul terbina dalam, axios, dan nod-fetch. 1. Gunakan modul HTTP/HTTPS terbina dalam tanpa kebergantungan, yang sesuai untuk senario asas, tetapi memerlukan pemprosesan manual jahitan data dan pemantauan ralat, seperti menggunakan https.get () untuk mendapatkan data atau menghantar permintaan pos melalui .write (); 2.AXIOS adalah perpustakaan pihak ketiga berdasarkan janji. Ia mempunyai sintaks ringkas dan fungsi yang kuat, menyokong async/menunggu, penukaran JSON automatik, pemintas, dan lain -lain. Adalah disyorkan untuk memudahkan operasi permintaan tak segerak; 3.Node-Fetch menyediakan gaya yang serupa dengan pengambilan penyemak imbas, berdasarkan janji dan sintaks mudah

Perbezaan antara VAR, LET dan Const adalah skop, promosi dan pengisytiharan berulang. 1.VAR adalah skop fungsi, dengan promosi yang berubah -ubah, yang membolehkan pengisytiharan berulang; 2.Let adalah skop peringkat blok, dengan zon mati sementara, dan pengisytiharan berulang tidak dibenarkan; 3.const juga skop peringkat blok, dan mesti diberikan dengan segera, dan tidak boleh ditugaskan semula, tetapi nilai dalaman jenis rujukan boleh diubah suai. Gunakan const terlebih dahulu, gunakan biarkan apabila menukar pembolehubah, dan elakkan menggunakan var.

Jenis data JavaScript dibahagikan kepada jenis primitif dan jenis rujukan. Jenis primitif termasuk rentetan, nombor, boolean, null, undefined, dan simbol. Nilai -nilai tidak berubah dan salinan disalin apabila memberikan nilai, jadi mereka tidak mempengaruhi satu sama lain; Jenis rujukan seperti objek, tatasusunan dan fungsi menyimpan alamat memori, dan pembolehubah menunjuk objek yang sama akan mempengaruhi satu sama lain. Typeof dan Instanceof boleh digunakan untuk menentukan jenis, tetapi memberi perhatian kepada isu -isu sejarah TypeOfNull. Memahami kedua -dua jenis perbezaan ini dapat membantu menulis kod yang lebih stabil dan boleh dipercayai.

Dom Traversal adalah asas operasi elemen laman web. Kaedah umum termasuk: 1. Gunakan ParentNode untuk mendapatkan nod induk, dan boleh dirantai untuk menemuinya ke atas; 2. Kanak -kanak mengembalikan koleksi elemen kanak -kanak, mengakses unsur -unsur kanak -kanak pertama atau akhir melalui indeks; 3. NextElementsibling memperoleh elemen adik seterusnya, dan menggabungkan sebelum ini untuk merealisasikan navigasi peringkat yang sama. Aplikasi praktikal seperti struktur pengubahsuaian dinamik, kesan interaktif, dan lain -lain, seperti mengklik butang untuk menyerlahkan nod abang seterusnya. Selepas menguasai kaedah ini, operasi kompleks dapat dicapai melalui gabungan.
