Les langages Sécurité FiveM Le client ment
Qui envoie le message ?
Un serveur FiveM et ses joueurs se parlent par événements. Côté client, un script appelle :
TriggerServerEvent('banque:solde')
et côté serveur, un gestionnaire le reçoit :
RegisterNetEvent('banque:solde', function()
-- ...
end)
Le client appartient au joueur
Le jeu tourne sur l'ordinateur du joueur. Avec un menu de triche -- il en
circule des dizaines -- il peut exécuter son propre Lua côté client, et donc
appeler TriggerServerEvent avec n'importe quel nom d'événement et
n'importe quels arguments. Ton interface n'y est pour rien : il ne passe pas
par elle.
Conséquence : un gestionnaire serveur doit se comporter correctement pour tout ce qu'on peut lui envoyer, pas seulement pour ce que ton interface envoie.
Ce qu'on peut croire : source
Dans un gestionnaire d'événement réseau, la variable source contient le
numéro du joueur qui a envoyé le message. Elle est remplie par le serveur, à
partir de la connexion : le joueur ne peut pas la choisir.
RegisterNetEvent('banque:solde', function(joueurId)
-- joueurId : choisi par le client, donc par l'attaquant
-- source : fixé par le serveur, fiable
end)
La faille la plus répandue consiste à faire confiance à un identifiant envoyé
par le client (« donne-moi le solde du joueur n°… ») au lieu d'utiliser
source.
Un piège de plus : source ne dure pas
source n'est valable qu'au début du gestionnaire. Après le premier
Wait -- ou le premier appel qui attend, comme une requête à la base --
d'autres événements ont pu être traités, et source ne désigne plus
l'expéditeur. D'où l'habitude, à prendre dès la première ligne :
RegisterNetEvent('banque:solde', function()
local src = source
-- à partir d'ici, on n'utilise plus que src
end)
RegisterNetEvent n'est pas une formalité
Un événement enregistré avec AddEventHandler seul ne peut pas être
déclenché depuis un client : le serveur le refuse. RegisterNetEvent est ce
qui l'ouvre au réseau. N'ouvre donc que ce qui doit l'être.
1 exercice pour cette lecon
Les exercices demandent un compte : il faut bien enregistrer votre progression quelque part. La lecture, elle, reste libre. Creer un compte
-
Mon solde, pas celui des autres facile lecon a valider