Back to community

Comment vous gérez les events client→server sécurisés avec QBCore ?

69 rep250 views1 min read

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 :

  1. Une factory SafeEvent('bank:deposit', schema, handler) qui valide les types avant d'appeler le handler
  2. Un middleware central qui rejette tout event non whitelisté
  3. 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.

24 4 commentsSign in to vote

Comments (4)

Sign in to leave a comment.
  • J'utilise ox_lib lib.callback avec validation de schéma. Plus propre que les NetEvents bruts et tu peux faire du timeout natif.

    4 points
  • Approche 3 toujours. Le client ne devrait JAMAIS dicter une valeur monétaire. Pour la flexibilité, fais des actions discrètes (deposit_all, deposit_half, deposit_specific avec un montant calculé serveur depuis un transactionId que tu as toi-même posté).

    4 points
    • mathieu.dev

      Le transactionId posté par le serveur est intéressant, je vais creuser. Merci.

  • Tu peux aussi rate-limiter tes events — un dépôt par seconde max. Ça te sauve des exploits qui spamment 1000x/sec.

    2 points