In this article
Aider Gemini Code Assist à générer du code sécurisé
Google a lancé Gemini Code Assist, un assistant de programmation intégré à l’IDE que les développeurs peuvent utiliser au quotidien. Comment s’assurer que les LLM génèrent du code sécurisé ?
J’apprécie vraiment l’interface minimaliste de Gemini Code Assist. Elle est très intuitive, sans boutons d’interface superflus. Simple et efficace, elle optimise l’espace disponible et l’expérience de chat pour se concentrer sur les tâches de programmation agentique, tout en présentant clairement son raisonnement à chaque étape.
Confions une tâche de programmation à Gemini Code Assist pour voir comment fonctionne la génération de code par LLM et comment Snyk contribue à sécuriser le code généré par l’IA.
Prérequis pour ce tutoriel pas à pas sur la sécurisation du code généré par l’IA :
VS Code (gratuit !)
Gemini Code Assist de Google (gratuit !)
Pensez à activer le mode « Insiders » de Gemini Code Assist en ajoutant la directive suivante aux paramètres utilisateur de VS Code :
"geminicodeassist.updateChannel":"Insiders",
Snyk CLI (gratuit !)
Extension IDE Snyk pour VS Code (gratuit !)
Comment enregistrer de façon sécurisée des photos de profil utilisateur dans Node.js ?
J’ai déjà une application Node.js fonctionnelle, basée sur le framework web Express, connectée à une base de données MongoDB et utilisant le moteur de templates Handlebars.
Le fichier index.js dans routes/ contient un gestionnaire de route nommé save_account_details, qui enregistre déjà les informations du compte de l’utilisateur dans son profil et les affiche ensuite aux utilisateurs.
L’implémentation du code JavaScript sur le serveur Node.js se présente ainsi :
exports.save_account_details = function(req, res, next) {
// get the profile details from the JSON
const profile = req.body
// validate the input
if (validator.isEmail(profile.email, { allow_display_name: true })
// allow_display_name allows us to receive input as:
// Display Name <email-address>
// which we consider valid too
&& validator.isMobilePhone(profile.phone, 'he-IL')
&& validator.isAscii(profile.firstname)
&& validator.isAscii(profile.lastname)
&& validator.isAscii(profile.country)
) {
// trim any extra spaces on the right of the name
profile.firstname = validator.rtrim(profile.firstname)
profile.lastname = validator.rtrim(profile.lastname)
// render the view
return res.render('account.hbs', profile)
} else {
// if input validation fails, we just render the view as is
console.log('error in form details')
return res.render('account.hbs')
}
}Comme vous pouvez le constater, de nombreuses validations vérifient que les données du profil utilisateur, comme l’adresse e-mail et d’autres informations, respectent un schéma, grâce au package npm validator. Pour l’instant, le code n’enregistre pas encore les données dans la base de données, mais nous pourrons nous en occuper plus tard.
Et si nous voulions étendre cette fonctionnalité pour permettre aux utilisateurs de fournir l’URL de leur photo de profil, par exemple un avatar, puis de la télécharger et de l’enregistrer sur le disque afin d’améliorer leur expérience ?
Tâche de programmation GenAI : mettre à jour le profil avec l’avatar de l’utilisateur
Nous ne savons peut-être pas comment utiliser les requêtes réseau et l’API du système de fichiers de Node.js pour récupérer une URL distante et l’enregistrer sur le disque. Utilisons donc Gemini Code Assist pour cette tâche de programmation.
J’ouvre l’onglet des extensions dans VS Code et je saisis la demande suivante dans Gemini Code Assist :
Let's update the save_account_details function handler so that it takes the URL provided in the req.body.profile_picture_url property, downloads the file to the uploads/ directory and saves it to diskVoici une vidéo qui montre tout le processus de mise à jour du code par Gemini Code Assist :

Voici le code généré par le modèle. Qu’en pensez-vous ?
exports.save_account_details = function(req, res, next) {
// get the profile details from the JSON
const profile = req.body
// validate the input
if (validator.isEmail(profile.email, { allow_display_name: true })
// allow_display_name allows us to receive input as:
// Display Name <email-address>
// which we consider valid too
&& validator.isMobilePhone(profile.phone, 'he-IL')
&& validator.isAscii(profile.firstname)
&& validator.isAscii(profile.lastname)
&& validator.isAscii(profile.country)
) {
// trim any extra spaces on the right of the name
profile.firstname = validator.rtrim(profile.firstname)
profile.lastname = validator.rtrim(profile.lastname)
if (profile.profile_picture_url) {
const localPath = path.join(__dirname, '../public/uploads/');
if (!fs.existsSync(localPath)) {
fs.mkdirSync(localPath)
}
const localFile = fs.createWriteStream(path.join(localPath, path.basename(profile.profile_picture_url)));
const protocol = profile.profile_picture_url.startsWith('https') ? https : http;
protocol.get(profile.profile_picture_url, function(response) {
response.pipe(localFile);
localFile.on('finish', function() {
localFile.close();
// render the view
return res.render('account.hbs', profile)
});
}).on('error', function(err) {
fs.unlink(localPath);
console.log('error in form details')
return res.render('account.hbs')
});
} else {
// render the view
return res.render('account.hbs', profile)
}
} else {
// if input validation fails, we just render the view as is
console.log('error in form details')
return res.render('account.hbs')
}
}Le code JavaScript ci-dessus est peut-être un peu difficile à analyser sans une meilleure coloration syntaxique. Voici donc le même résultat tel qu’il s’affiche dans l’IDE. Repérez-vous des problèmes ? Combien de vulnérabilités avez-vous relevées ?

Snyk AI Trust porte bien son nom et sécurise Gemini Code Assist
Tous ces LLM et workflows agentiques déjà adoptés dans nos activités quotidiennes peuvent engendrer différents types de risques de sécurité.
Parmi ces risques, les assistants de programmation GenAI peuvent générer du code non sécurisé que des attaquants peuvent exploiter contre nous. La démonstration ci-dessus illustre parfaitement les vulnérabilités qui peuvent se cacher derrière une confiance aveugle dans l’IA. Snyk est là pour atténuer ces risques, surveiller les lignes de code générées et les corriger.
Lorsque j’ai enregistré le fichier après les modifications apportées par Gemini Code Assist, l’extension Snyk Security, déjà installée dans mon IDE VS Code, s’est déclenchée pour analyser le fichier et détecter le code vulnérable. Elle l’a signalé par le trait ondulé rouge bien connu qui alerte les développeurs :

Une seule ligne de code suffit à introduire deux types de vulnérabilités :
Nous récupérons l’URL fournie par l’utilisateur, ce qui peut ouvrir une connexion à un point de terminaison HTTP distant (et non HTTPS). Snyk nous avertit donc de l’utilisation d’un protocole non sécurisé, qui pourrait entraîner la transmission en clair d’informations sensibles. Pour en savoir plus sur ce risque, consultez la leçon de Snyk Learn sur le stockage en clair d’informations sensibles dans un cookie, qui l’explique à travers l’exemple d’un cookie.
Nous envoyons aussi aveuglément une requête HTTP à une URL contrôlée par l’utilisateur, sans la valider. Et si cette soi-disant URL d’image pointait en réalité vers une ressource interne, comme http://127.0.0.1:8080/admin_get_resources sur un réseau d’entreprise ou une machine locale de développeur ? Il s’agirait alors d’une vulnérabilité SSRF. Vous pouvez aussi consulter une courte leçon Snyk Learn sur le sujet pour approfondir les risques et les mesures d’atténuation : falsification de requête côté serveur (SSRF)
D’accord, mais pouvons-nous améliorer l’utilisation des assistants de programmation IA pour qu’ils génèrent directement du code sécurisé ? Voyons cela !
Associer Gemini Code Assist à Snyk via MCP pour des workflows agentiques sécurisés
Gemini Code Assist prend en charge le Model Context Protocol (MCP) en mode agentique. Il peut donc envoyer des requêtes à des outils MCP d’autres intégrations, qui enrichissent la réponse générée par le modèle. Celui-ci peut ensuite adapter sa production en fonction de la réponse des outils.
Snyk prend également en charge MCP et met à disposition des outils pour les LLM, comme l’analyse de vos dépendances open source et la détection du code non sécurisé généré par les LLM. Découvrez cette présentation détaillée de Snyk MCP.
Mettons à jour la configuration MCP de Gemini Code Assist pour exécuter Snyk. Créez le fichier .gemini/settings.json et ajoutez ceci :
{
"mcpServers": {
"snyk": {
"command": "snyk",
"args": [
"mcp",
"-t",
"stdio",
"--experimental"
]
}
}
}Si ce n’est pas déjà fait, installez Snyk CLI :
npm install -g snyk@latestAuthentifiez-vous ensuite en exécutant la commande suivante, puis suivez les instructions pour vous connecter :
snyk authPour vérifier que tout fonctionne, nous pouvons poser une question simple à Gemini :

Nous savons maintenant que nous pouvons associer Gemini Code Assist et Snyk, puis évaluer le code généré pour exactement la même tâche qu’au départ : enregistrer sur le disque l’image fournie par l’utilisateur à partir de l’URL de son choix.
Voici la demande. Nous sommes prêts à commencer.

Pendant la génération de code par Gemini Code Assist, celui-ci fait appel au serveur MCP de Snyk pour tester le code à chaque nouvelle génération ou modification par le LLM et s’assurer qu’il ne présente aucune vulnérabilité.

La session de programmation a duré près de 10 minutes, avec plusieurs échanges entre Gemini Code Assist et Snyk. Elle montre à quel point il peut être complexe d’écrire du code sécurisé. Voici la démonstration complète :

Snyk AI Trust pour le code GenAI
Si vous souhaitez en savoir plus sur la sécurisation du code GenAI, je vous recommande vivement les ressources suivantes :
Vous faites du vibe coding ? Le code non sécurisé devrait vous préoccuper. Découvrez mon exemple concret : Le vibe coding d’une API d’envoi de fichiers Node.js entraîne une vulnérabilité de sécurité
Vous découvrez MCP ? Guide de démarrage pour comprendre visuellement l’architecture MCP
Une introduction à la sécurité MCP ? Découvrez mon article Sécurité MCP – Le retour de vieilles menaces
Fiche pratique sur la préparation à l’IA
Inspirez confiance dans l’IA
Obtenez un guide pratique et structuré pour aider votre équipe à adopter l’IA sans prendre de risques incontrôlés.