Petit débat que j'aimerais ouvrir.
J'ai un script de banque où le client trigger bank:deposit avec un montant en argument. Évidemment je valide côté serveur que le joueur a l'argent, mais récemment j'ai eu un cas où un cheat envoyait des montants négatifs et duplicatait l'argent (bug de validation de mon côté).
Ma question : vous validez comment vos events ? J'ai testé 3 approches :
- Une factory
SafeEvent('bank:deposit', schema, handler)qui valide les types avant d'appeler le handler - Un middleware central qui rejette tout event non whitelisté
- Refus catégorique de prendre le montant du client — je récupère juste un
amount: 'deposit_all'et je calcule serveur
Honnêtement la 3 est la plus safe mais ça contraint vachement l'UX. Vos retours ?
-- Ce que je fais actuellement
RegisterNetEvent('bank:deposit', function(amount)
local src = source
if type(amount) ~= 'number' or amount <= 0 or amount > 1000000 then return end
-- ... reste de la logique
end)
Le amount > 1000000 me semble fragile si demain quelqu'un dépose réellement plus.