They are. But if you have sanity checks, you should be fine.
You could always check what arguments are passed through the event, or even check how fast the remotes are being sent.
If your items are important, keep them in server storage, and do sanity checks on the server with a remote. If not, you can keep them in replicated.
I’d just like to note that the way some (if not all) roblox exploits work is by running client-side code. So it’s just like code written in a localscript. This is what you have to keep in mind when tackling exploiters.
They can also see what code is being executed on the client from your localscripts.