Aturan Firebase melindungi penghitung kenaikan otomatis?

Saya memiliki penghitung di firebase saya untuk menghitung suka di setiap postingan.

var databaseRef = firebase.database().ref('/posts/').child(pid).child('likes');
            databaseRef.transaction(function(count) {

jadi ini akan menambah +1 di setiap like di postingan/suka setelah saya masukkan di likes/postid/userid json. Untuk menghitung suka.

Saya membuat aturan untuk ini, untuk mengizinkan penghitungan +1 suka per waktu:

   "likes": {
     ".write": "newData.isNumber() && 
     ((!data.exists() && newData.val() === 1) || newData.val() === data.val()+1)"
   },

itu menghindari seseorang untuk menaruh 1000 suka dalam sebuah kiriman sekaligus, tetapi tidak melindungi seseorang untuk menjalankan skrip yang memasukkan +1 suka setiap detik... ada solusi untuk ini? bagaimana cara melindungi penghitung dalam aturan firebase?


person RGS    schedule 07.05.2020    source sumber
comment
Lihat jawaban saya di sini: stackoverflow.com/questions/37954217/   -  person Frank van Puffelen    schedule 07.05.2020
comment
Apakah benar untuk berasumsi bahwa masalah Anda, apakah Anda takut pengguna menyukai postingan yang sama berkali-kali, dengan membuat permintaan secara bersamaan?   -  person EdwinS95    schedule 07.05.2020


Jawaban (1)


Jika Anda menjalankan kenaikan node penghitung dari front-end, Anda perlu menetapkan hak akses tulis kepada pengguna. Tidak ada cara untuk menghindari beberapa pengguna jahat untuk meningkatkannya.

Salah satu solusinya adalah dengan mengimplementasikan counter update di Cloud Function. Cloud Functions dijalankan di back-end dan mengabaikan semua aturan keamanan (karena dijalankan di back-end, maka dianggap sebagai "lingkungan istimewa"). Sehingga Anda dapat menolak akses tulis apa pun ke node penghitung.

Anda harus menggunakan Cloud Function yang dipicu ketika post diperbarui, lihat https://firebase.google.com/docs/functions/database-events

person Renaud Tarnec    schedule 07.05.2020
comment
Oh terima kasih atas jawabanmu. Saya akan mencoba fungsi cloud, terima kasih! - person RGS; 07.05.2020