I'm writing a voting system in NodeJS and Express on the backend and React on the frontend.
What I'm currently doing is:
- Save all user votes in localStorage
- Generate Browser Fingerprint
- On vote I check if the user has already voted through localStorage
On the backend side:
- Save Browser Fingerprint and IP Address to a database
- On vote I check if the combination of Fingerprint and IP Address already exists in the database and if not the vote counts. If yes, the vote is simply ignored.
Additionally I use express-brute to prevent brute force attacks
I'm aware that this is not secure at all and that a user can vote multiple times through multiple devices or networks.
My question is, how much effort does a user with malicious intentions need to put in to spam my application with votes? How would it work?
My customer wants to take the risk of users voting multiple times as long as its only easy for very tech savvy people.
Edit:
It doesn't really matter if a user votes 10-20 times as long as its not huge amounts. I'm just trying to secure my application from huge amounts of votes.