Aller au contenu principal
ShadowAcademy

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