Table des matières
Introduction à l'article" >Introduction à l'article
Exemple de démarrage : paramètres et analyse des cookies " >Exemple de démarrage : paramètres et analyse des cookies
Exemple avancé : cookie signature Avec l'analyse " >Exemple avancé : cookie signature Avec l'analyse
Analyse de la signature des cookies et mise en œuvre de la vérification" >Analyse de la signature des cookies et mise en œuvre de la vérification
Le rôle de la signature des cookies" >Le rôle de la signature des cookies
Une signature garantit-elle la sécurité " >Une signature garantit-elle la sécurité
Maison interface Web js tutoriel Comment utiliser le middleware d'analyse de cookies dans Express

Comment utiliser le middleware d'analyse de cookies dans Express

Jun 08, 2018 pm 02:54 PM
express

Cet article présente principalement une analyse approfondie de l'exemple d'implémentation du middleware Express cookie-analyser. Maintenant, je le partage avec vous et lui donne une référence.

Introduction à l'article

cookie-parser est le middleware d'Express, utilisé pour analyser les cookies, et est l'un des middleware intégrés à celui de l'échafaudage officiel .

Il est très simple à utiliser, mais vous pouvez occasionnellement 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 explique en profondeur le mécanisme de mise en œuvre de la signature et de la vérification d'Express + cookie-parser, et comment la signature des cookies améliore la sécurité du site Web.

La synchronisation du texte est incluse dans la série de thèmes GitHub « Nodejs Learning Notes »

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

Examinons d'abord l'utilisation de cookie-parser à partir de l'exemple le plus simple. 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 cookie-analyser 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

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+9mHQpdPlQeOfjM8B5oa6mppny9d+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 lors de l'initialisation cookie-parser . 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 signé biscuit. 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 originale 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

unsign 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

Principalement pour des raisons de sécurité, pour empêcher la falsification des cookies et 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 correspondant au pseudo est la suivante : (après décodage)

s:chyingp.uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0

A ce moment, quelqu'un a tenté de modifier la valeur du cookie pour atteindre l'objectif de falsification d'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"

Une signature garantit-elle 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.

Ce qui précède est ce que j'ai compilé pour vous. J'espère que cela vous sera utile à l'avenir.

Articles associés :

Communication du composant Vue (tutoriel détaillé)

Analyse détaillée du code source de Vue Socket.io

Utilisez JavaScript natif pour obtenir l'effet loupe

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

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)

Comment utiliser Express pour gérer le téléchargement de fichiers dans un projet de nœud Comment utiliser Express pour gérer le téléchargement de fichiers dans un projet de nœud Mar 28, 2023 pm 07:28 PM

Comment gérer le téléchargement de fichiers ? L'article suivant vous expliquera comment utiliser Express pour gérer les téléchargements de fichiers dans le projet de nœud. J'espère qu'il vous sera utile !

Analyse comparative d'Express et Laravel : Choisissez le framework qui vous convient le mieux Analyse comparative d'Express et Laravel : Choisissez le framework qui vous convient le mieux Mar 10, 2024 pm 10:15 PM

Express et Laravel sont deux frameworks web très populaires, représentant respectivement les excellents frameworks des deux principaux langages de développement JavaScript et PHP. Cet article procédera à une analyse comparative de ces deux frameworks pour aider les développeurs à choisir un framework plus adapté aux besoins de leur projet. 1. Introduction au framework Express est un framework d'application Web basé sur la plateforme Node.js. Il fournit une série de fonctions et d'outils puissants qui permettent aux développeurs de créer rapidement des applications Web hautes performances. Exprimer

Comparaison approfondie d'Express et de Laravel : Comment choisir le meilleur framework ? Comparaison approfondie d'Express et de Laravel : Comment choisir le meilleur framework ? Mar 09, 2024 pm 01:33 PM

Comparaison approfondie d'Express et de Laravel : Comment choisir le meilleur framework ? Lorsque vous choisissez un framework back-end adapté à votre projet, Express et Laravel sont sans aucun doute deux choix populaires parmi les développeurs. Express est un framework léger basé sur Node.js, tandis que Laravel est un framework populaire basé sur PHP. Cet article fournira une comparaison approfondie des avantages et des inconvénients de ces deux frameworks et fournira des exemples de code spécifiques pour aider les développeurs à choisir le framework qui correspond le mieux à leurs besoins. Performances et évolutivitéExpr

Express vs Laravel : en comparant les avantages et les inconvénients, lequel choisirez-vous ? Express vs Laravel : en comparant les avantages et les inconvénients, lequel choisirez-vous ? Mar 10, 2024 am 08:39 AM

Express vs Laravel : en comparant les avantages et les inconvénients, lequel choisirez-vous ? Dans le domaine du développement web, Express et Laravel sont deux frameworks qui ont beaucoup retenu l'attention. Express est un framework d'application Web flexible et léger basé sur Node.js, tandis que Laravel est un framework de développement Web élégant et riche en fonctionnalités basé sur PHP. Cet article comparera les avantages et les inconvénients d'Express et de Laravel en termes de fonctionnalités, de facilité d'utilisation, d'évolutivité et de support communautaire, et combinera

Parlons de la façon dont node+express gère les cookies Parlons de la façon dont node+express gère les cookies Jun 22, 2022 am 10:01 AM

Comment node+express gère-t-il les cookies ? L'article suivant vous présentera comment utiliser le nœud pour gérer les cookies. J'espère qu'il vous sera utile !

Express ou Laravel ? Choisissez le framework backend qui vous convient le mieux Express ou Laravel ? Choisissez le framework backend qui vous convient le mieux Mar 10, 2024 pm 06:06 PM

Lorsqu'il s'agit de choisir un framework backend, Express et Laravel sont des choix très populaires. Express est un framework de développement d'applications Web basé sur Node.js, tandis que Laravel est un framework de développement d'applications Web basé sur PHP. Les deux ont leurs propres avantages, et choisir le cadre qui vous convient le mieux nécessite de prendre en compte de nombreux facteurs. Les points forts du framework Express sont sa flexibilité et sa courbe d’apprentissage facile. L'idée de base d'Express est "assez petite et suffisamment flexible", et elle fournit un grand nombre de middleware

Lequel est le meilleur, express ou laravel ? Lequel est le meilleur, express ou laravel ? Jul 05, 2023 pm 01:16 PM

Laravel est bon pour les raisons suivantes : 1. Laravel utilise le langage PHP, a une syntaxe élégante et intuitive et fournit un grand nombre de fonctions et d'outils ; 2. Laravel propose une variété de packages d'extension, de plug-ins et de solutions ; dispose d'une documentation officielle très complète et facile à comprendre ;4. Laravel fournit un bon support pour la sécurité des données et l'authentification des utilisateurs ;5. Laravel peut séparer efficacement la logique métier et la couche d'affichage ;6.Laravel a une communauté vaste et active ; aux dernières technologies.

Comment créer un système de blog simple à l'aide de Node.js Comment créer un système de blog simple à l'aide de Node.js Nov 08, 2023 pm 06:45 PM

Comment utiliser Node.js pour créer un système de blog simple Node.js est un environnement d'exécution JavaScript basé sur le moteur ChromeV8, qui peut rendre JavaScript plus efficace. Avec l'aide de Node.js, nous pouvons créer de puissantes applications côté serveur à l'aide de JavaScript, y compris des systèmes de blogs. Cet article vous expliquera comment utiliser Node.js pour créer un système de blog simple et vous fournira des exemples de code spécifiques. Veuillez appuyer sur

See all articles