Table des matières
Exemple de démarrage : paramètres et analyse des cookies
Exemple avancé : signature et analyse des cookies
Analyse de la signature des cookies et mise en œuvre de la vérification
Le rôle de la signature des cookies
Les signatures garantiront-elles la sécurité ?
Résumé
Maison interface Web js tutoriel Maîtrise complète du middleware Express cookie-parser

Maîtrise complète du middleware Express cookie-parser

Feb 02, 2018 am 09:57 AM
express 中间件

Cookie-parser est le middleware d'Express, qui est utilisé pour analyser les cookies. Il s'agit de l'un des middleware intégrés à l'échafaudage officiel. Son utilisation est très simple, mais vous pouvez parfois rencontrer des problèmes lors de son utilisation. Cela est généralement dû à un manque de compréhension des mécanismes de signature et de vérification d'Express + cookie-parser. Cet article vous présente principalement l'exemple d'implémentation du middleware Express cookie-analyser. L'éditeur pense qu'il est assez bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil, j'espère que cela pourra aider tout le monde.

Exemple de démarrage : paramètres et analyse des cookies

Commençons par l'exemple le plus simple pour examiner l'utilisation de l'analyseur de cookies. La configuration par défaut est utilisée ici.

  1. Paramètres des cookies : utilisez la méthode intégrée res.cookie() d'Express.

  2. Analyse des cookies : utilisez le middleware d'analyse des cookies.

var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.use(function (req, res, next) {
 console.log(req.cookies.nick); // 第二次访问,输出chyingp
 next();
});

app.use(function (req, res, next) { 
 res.cookie('nick', 'chyingp');
 res.end('ok');
});
app.listen(3000);
Copier après la connexion

Dans le scénario actuel, le middleware d'analyseur de cookies est grossièrement implémenté comme suit :

app.use(function (req, res, next) {
 req.cookies = cookie.parse(req.headers.cookie);
 next();
});
Copier après la connexion

Exemple avancé : signature et analyse des cookies

Pour des raisons de sécurité, nous devons généralement signer les cookies.

L'exemple est réécrit comme suit, avec quelques points à noter :

  1. Lorsque cookieParser est initialisé, passer en secret comme clé de signature.

  2. Lors de la définition d'un cookie, définissez signé sur true pour signer le cookie qui est sur le point d'être défini.

  3. Lors de l'obtention de cookies, vous pouvez les obtenir via req.cookies ou req.signedCookies.

var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
// 初始化中间件,传入的第一个参数为singed secret
app.use(cookieParser('secret'));
app.use(function (req, res, next) {
 console.log(req.cookies.nick); // chyingp
 console.log(req.signedCookies.nick); // chyingp
 next();
});
app.use(function (req, res, next) { 
 // 传入第三个参数 {signed: true},表示要对cookie进行摘要计算
 res.cookie('nick', 'chyingp', {signed: true});
 res.end('ok');
});
app.listen(3000);
Copier après la connexion

La valeur du cookie avant la signature est chyingp, la valeur du cookie après la signature est s%3Achyingp.uVofnk6k%2B9mHQpdPlQeOfjM8B5oa6mppny9d%2BmG9rD0, et après décodage, elle est s:chyingp.uVofnk6k+ 9mHQpdPlQe OfjM8B5oa6mppny9d+ mG9rD0.

Analysons comment la signature et l'analyse des cookies sont mises en œuvre.

Analyse de la signature des cookies et mise en œuvre de la vérification

Express complète la signature des valeurs des cookies et cookie-parser implémente l'analyse des cookies signés. Les deux partagent la même clé secrète.

Signature des cookies

Les paramètres des cookies d'Express (y compris les signatures) sont tous implémentés via la méthode res.cookie().

Le code simplifié est le suivant :

res.cookie = function (name, value, options) { 
 var secret = this.req.secret;
 var signed = opts.signed;
 // 如果 options.signed 为true,则对cookie进行签名
 if (signed) {
  val = 's:' + sign(val, secret);
 }
 this.append('Set-Cookie', cookie.serialize(name, String(val), opts));
 return this;
};
Copier après la connexion

sign est la fonction signature. Le pseudo-code est le suivant, qui concatène en fait la valeur d'origine du cookie avec la valeur après hmac.

Point important au tableau : la valeur du cookie signé inclut la valeur d'origine.

function sign (val, secret) {
 return val + '.' + hmac(val, secret);
}
Copier après la connexion

D'où vient le secret ici ? Il est transmis lorsque l'analyseur de cookies est initialisé. Comme le montre le pseudo-code suivant :

var cookieParser = function (secret) {
 return function (req, res, next) {
  req.secret = secret;
  // ...
  next();
 };
};
app.use(cookieParser('secret'));
Copier après la connexion

Analyse des cookies signés

Après avoir connu le mécanisme de signature des cookies, il est clair comment "analyser" le cookie signé. A ce stade, le middleware fait principalement deux choses :

  1. Extraire la valeur d'origine correspondant au cookie signé

  2. Vérifier si le cookie signé est légal

Le code d'implémentation est le suivant :

// str:签名后的cookie,比如 "s:chyingp.uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0"
// secret:秘钥,比如 "secret"
function signedCookie(str, secret) {

 // 检查是否 s: 开头,确保只对签过名的cookie进行解析
 if (str.substr(0, 2) !== 's:') {
  return str;
 }

 // 校验签名的值是否合法,如合法,返回true,否则,返回false
 var val = unsign(str.slice(2), secret);
 
 if (val !== false) {
  return val;
 }

 return false;
}
Copier après la connexion

Il est relativement simple de juger et d'extraire la valeur d'origine du cookie. C’est juste que le nom de la méthode unsign prête à confusion.

Généralement, seules les signatures seront légalement vérifiées, et il n'y a pas de soi-disant contre-signature.

Le code de la méthode de désignation est le suivant :

  1. Tout d'abord, extrayez la valeur d'origine A1 et la valeur de signature B1 de la valeur du cookie entrant.

  2. Deuxièmement, utilisez la même clé secrète pour signer A1 afin d'obtenir A2.

  3. Enfin, déterminez si la signature est légale en fonction du fait que A2 et B1 sont égaux.

exports.unsign = function(val, secret){

 var str = val.slice(0, val.lastIndexOf('.'))
  , mac = exports.sign(str, secret);
 
 return sha1(mac) == sha1(val) ? str : false;
};
Copier après la connexion

Le rôle de la signature des cookies

est principalement pour des raisons de sécurité d'empêcher Les cookies ont été falsifiés pour renforcer la sécurité.

Prenons un petit exemple pour voir comment la signature des cookies peut empêcher la falsification.

Développez en fonction de l'exemple précédent. Supposons que le site Web utilise le cookie pseudo pour distinguer qui est l'utilisateur actuellement connecté. Dans l'exemple précédent, dans le cookie de l'utilisateur connecté, la valeur correspondante de nick est la suivante : (après décodage)

s:chyingp.uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0

À ce moment-là, quelqu'un essaie de modifier la valeur de ce cookie pour atteindre l'objectif de forger une identité. Par exemple, remplacez-le par xiaoming :

s:xiaoming.uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0

Lorsque le site Web reçoit la demande, il analyse le cookie de signature et constate que la vérification de la signature échoue. On peut en déduire que le cookie est falsifié.

hmac("xiaoming", "secret") !== "uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0"

Les signatures garantiront-elles la sécurité ?

Bien sûr que non.

L'exemple de la section précédente utilise uniquement la valeur du cookie pseudo pour déterminer quel utilisateur est connecté. C'est une très mauvaise conception. Bien qu’il soit difficile de falsifier des cookies signés lorsque la clé secrète est inconnue. Mais lorsque le nom d’utilisateur est le même, la signature est également la même. Dans ce cas, il est en réalité très facile à falsifier.

De plus, les algorithmes des composants open source sont publics, donc la sécurité de la clé secrète devient la clé, et il faut s'assurer que la clé secrète ne soit pas divulguée.

Il y en a bien d’autres, je ne les détaillerai donc pas ici.

Résumé

Cet article fournit principalement une introduction relativement approfondie au mécanisme de signature et d'analyse d'Express + cookie-parser.

Dans de nombreux articles de synthèse similaires, la signature du cookie est décrite comme un cryptage. Il s'agit d'une erreur courante et les lecteurs doivent y prêter attention.

L'introduction de la partie signature implique un peu de connaissances simples en matière de sécurité. Les étudiants qui ne connaissent pas ce sujet peuvent laisser un message pour communiquer. Pour faciliter l’explication, certains paragraphes et formulations peuvent ne pas être assez rigoureux. S'il y a des erreurs ou des omissions, merci de les signaler.

Recommandations associées :

node crée sa propre instance de serveur en implémentant express

Node.js utilise l'instance Express.Router Explication détaillée

Utilisation de Session dans le framework Express pour implémenter l'authentification lors de la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quel est le principe du middleware Tomcat Quel est le principe du middleware Tomcat Dec 27, 2023 pm 04:40 PM

Le principe du middleware Tomcat est implémenté sur la base des spécifications Java Servlet et Java EE. En tant que conteneur de servlets, Tomcat est responsable du traitement des requêtes et des réponses HTTP et de la fourniture de l'environnement d'exécution des applications Web. Les principes du middleware Tomcat concernent principalement : 1. Le modèle de conteneur ; 2. L'architecture des composants ; 3. Le mécanisme de traitement des servlets ; 4. L'écoute des événements et les filtres ; 6. La sécurité. technologie 9. Mode intégré, etc.

Comment gérer la validation de formulaire à l'aide d'un middleware dans Laravel Comment gérer la validation de formulaire à l'aide d'un middleware dans Laravel Nov 02, 2023 pm 03:57 PM

Comment utiliser un middleware pour gérer la validation de formulaire dans Laravel, des exemples de code spécifiques sont requis Introduction : Dans Laravel, la validation de formulaire est une tâche très courante. Afin de garantir la validité et la sécurité des données saisies par les utilisateurs, nous vérifions généralement les données soumises dans le formulaire. Laravel fournit une fonction pratique de validation de formulaire et prend également en charge l'utilisation de middleware pour gérer la validation de formulaire. Cet article présentera en détail comment utiliser le middleware pour gérer la validation des formulaires dans Laravel et fournira des exemples de code spécifiques.

Comment utiliser un middleware pour l'accélération des données dans Laravel Comment utiliser un middleware pour l'accélération des données dans Laravel Nov 02, 2023 am 09:40 AM

Comment utiliser le middleware pour l'accélération des données dans Laravel Introduction : Lors du développement d'applications Web à l'aide du framework Laravel, l'accélération des données est la clé pour améliorer les performances des applications. Le middleware est une fonctionnalité importante fournie par Laravel qui gère les requêtes avant qu'elles n'atteignent le contrôleur ou avant que la réponse ne soit renvoyée. Cet article se concentrera sur la façon d'utiliser le middleware pour obtenir une accélération des données dans Laravel et fournira des exemples de code spécifiques. 1. Qu'est-ce qu'un middleware ? Le middleware est un mécanisme dans le framework Laravel.

Comment utiliser le middleware pour la transformation des réponses dans Laravel Comment utiliser le middleware pour la transformation des réponses dans Laravel Nov 03, 2023 am 09:57 AM

Comment utiliser le middleware pour la conversion des réponses dans Laravel Middleware est l'une des fonctionnalités très puissantes et pratiques du framework Laravel. Il nous permet de traiter les demandes et les réponses avant que la demande n'entre dans le contrôleur ou avant que la réponse ne soit envoyée au client. Dans cet article, je vais montrer comment utiliser le middleware pour la transformation des réponses dans Laravel. Avant de commencer, assurez-vous que Laravel est installé et qu'un nouveau projet est créé. Nous allons maintenant suivre ces étapes : Créer un nouveau middleware Ouvrir

Comment utiliser un middleware pour la récupération de données dans Laravel Comment utiliser un middleware pour la récupération de données dans Laravel Nov 02, 2023 pm 02:12 PM

Laravel est un framework d'application Web PHP populaire qui offre de nombreux moyens rapides et simples de créer des applications Web efficaces, sécurisées et évolutives. Lors du développement d'applications Laravel, nous devons souvent considérer la question de la récupération des données, c'est-à-dire comment récupérer les données et assurer le fonctionnement normal de l'application en cas de perte ou de dommage de données. Dans cet article, nous présenterons comment utiliser le middleware Laravel pour implémenter des fonctions de récupération de données et fournirons des exemples de code spécifiques. 1. Qu'est-ce que Lara ?

Comment utiliser un middleware pour configurer le partage de ressources entre domaines (CORS) dans le framework Slim Comment utiliser un middleware pour configurer le partage de ressources entre domaines (CORS) dans le framework Slim Jul 30, 2023 pm 08:34 PM

Comment configurer le partage de ressources Cross-Origin (CORS) à l'aide d'un middleware dans le framework Slim Le partage de ressources Cross-Origin (CORS) est un mécanisme qui permet au serveur de définir des informations supplémentaires dans l'en-tête de réponse HTTP pour indiquer au navigateur si Autoriser le partage de ressources Cross-Origin. -demandes de domaine. Dans certains projets avec séparation front-end et back-end, le mécanisme CORS peut être utilisé pour réaliser la requête inter-domaines du front-end pour l'interface back-end. Lors de l'utilisation du framework Slim pour développer l'API REST, nous pouvons utiliser un middleware (Middleware)

Comment utiliser un middleware pour la planification de tâches planifiées dans Laravel Comment utiliser un middleware pour la planification de tâches planifiées dans Laravel Nov 02, 2023 pm 02:26 PM

Comment utiliser un middleware pour la planification de tâches planifiées dans Laravel Introduction : Laravel est un framework open source PHP populaire qui fournit des outils pratiques et puissants pour développer des applications Web. L'une des fonctionnalités importantes concerne les tâches planifiées, qui permettent aux développeurs d'exécuter des tâches spécifiques à des intervalles spécifiés. Dans cet article, nous présenterons comment utiliser le middleware pour implémenter la planification des tâches planifiées de Laravel et fournirons des exemples de code spécifiques. Préparation de l'environnement Avant de commencer, nous devons nous assurer

Middleware CodeIgniter : fournit des fonctions sécurisées de téléchargement et de téléchargement de fichiers Middleware CodeIgniter : fournit des fonctions sécurisées de téléchargement et de téléchargement de fichiers Aug 01, 2023 pm 03:01 PM

Middleware CodeIgniter : fournit des fonctions sécurisées de téléchargement et de téléchargement de fichiers. Introduction : Le téléchargement et le téléchargement de fichiers sont des fonctions très courantes lors du développement d'applications Web. Cependant, pour des raisons de sécurité, la gestion des téléchargements et des téléchargements de fichiers nécessite souvent des mesures de sécurité supplémentaires. CodeIgniter est un framework PHP populaire qui fournit une multitude d'outils et de bibliothèques pour aider les développeurs à créer des applications Web sécurisées et fiables. Cet article explique comment utiliser le middleware CodeIgniter pour implémenter des fichiers sécurisés.

See all articles