Typefully

Securing Your Next.js Application: Best Practices

Avatar

Share

 • 

2 years ago

 • 

View on X

Comment sécuriser ton application Next.js afin d'éviter les problèmes... Sérieux, tu n'as pas le choix de le faire. Pour respecter tes utilisateurs et éviter les problèmes 👿 Voici comment faire :
1️⃣ Ne jamais faire confiance aux données que tu reçois TypeScript est uniquement actif dans ton IDE, au runtime (quand l'utilisateur va sur ton application), TypeScript n'existe plus. Il faut donc valider les données ! Par exemple ce code :
Tu penses que c'est sécurisé cette action du serveur car tu as mis le type `Post` ? PAS DU TOUT ! À tout moment, l'utilisateur peut envoyer ceci :
En gros, ici il passe la clé "user", ce qui lui permet de créer un nouvel utilisateur avec un plan premium. NE JAMAIS FAIRE CONFIANCE À L'UTILISATEUR. Pour cela, tu vas toujours valider les données, par exemple avec Zod, en créant un schéma qui limite les données en entrée.
2️⃣ Authentification Quand on appelle ton backend, tu dois toujours te demander : ▪ A-t-il le droit de faire cette action ? Par exemple, pour la suppression d'un post. Tu ne peux pas simplement créer une route API qui prend un ID et supprime cet ID.
Tu dois vérifier que l'utilisateur est le bon. Pour cela, tu viens récupérer l'utilisateur via une méthode et tu vas par exemple ajouter dans le filtre de la suppression le userId pour vérifier que le post lui appartient.
3️⃣ Autorisation En plus de te demander s'il a le droit d'accéder à une ressource, tu peux te demander s'il a le droit de faire une action. Par exemple, vérifier qu'il est administrateur pour pouvoir supprimer le post de quelqu'un d'autre, etc...
🔒 Sécurise ton app. Et pour m'assurer que cela soit bien fait, j'ai créé une boilerplate avec un cours complet pour tout t'expliquer afin que tu puisses créer des applications du niveau d'une entreprise à toi tout seul. Rends-toi ici nowts.app
Avatar

Melvyn • Builder

@melvynxdev

• Entrepreneur (+6 SaaS en 1 an) • CTO de Codeline • Formateur (+1500 devs formés)