Inhaltsverzeichnis
Erste Schritte: Cookie-Einstellungen und Parsing
Erweitertes Beispiel: Cookie-Signatur und -Analyse
Analyse der Cookie-Signatur und Verifizierungsimplementierung
Die Rolle der Cookie-Signatur
Werden Signaturen Sicherheit garantieren?
Zusammenfassung
Heim Web-Frontend js-Tutorial Umfassende Beherrschung der Express-Cookie-Parser-Middleware

Umfassende Beherrschung der Express-Cookie-Parser-Middleware

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

Cookie-Parser ist die Middleware von Express, die zum Parsen von Cookies verwendet wird. Es handelt sich um eine der Middleware, die in das offizielle Gerüst integriert ist. Die Verwendung ist sehr einfach, es kann jedoch gelegentlich zu Problemen bei der Verwendung kommen. Dies wird normalerweise durch mangelndes Verständnis der Signatur- und Überprüfungsmechanismen von Express + Cookie-Parser verursacht. In diesem Artikel wird Ihnen hauptsächlich das Implementierungsbeispiel für die Express-Cookie-Parser-Middleware vorgestellt. Der Herausgeber findet es recht gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz geben. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.

Beginnen wir mit dem einfachsten Beispiel, um die Verwendung des Cookie-Parsers zu betrachten. Hier wird die Standardkonfiguration verwendet.

  1. Cookie-Einstellungen: Verwenden Sie die integrierte Methode res.cookie() von Express.

  2. Cookie-Parsing: Cookie-Parser-Middleware verwenden.

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);
Nach dem Login kopieren

Im aktuellen Szenario ist die Cookie-Parser-Middleware grob wie folgt implementiert:

app.use(function (req, res, next) {
 req.cookies = cookie.parse(req.headers.cookie);
 next();
});
Nach dem Login kopieren

Aus Sicherheitsgründen müssen wir Cookies normalerweise signieren.

Das Beispiel wird wie folgt umgeschrieben, wobei einige Punkte zu beachten sind:

  1. Wenn cookieParser initialisiert wird, übergeben Sie es im Geheimen als Signaturschlüssel.

  2. Wenn Sie ein Cookie setzen, setzen Sie „signed“ auf „true“, um das zu setzende Cookie zu signieren.

  3. Wenn Sie Cookies erhalten, können Sie diese über req.cookies oder req.signedCookies erhalten.

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);
Nach dem Login kopieren

Der Cookie-Wert vor dem Signieren ist chyingp, der Cookie-Wert nach dem Signieren ist s%3Achyingp.uVofnk6k%2B9mHQpdPlQeOfjM8B5oa6mppny9d%2BmG9rD0 und nach der Dekodierung ist er s:chyingp.uVofnk6k+ 9mHQpdPlQe OfjM8B5oa6mppny9d+ mG9rD0.

Lassen Sie uns analysieren, wie Cookie-Signatur und -Analyse implementiert werden.

Express vervollständigt die Signatur von Cookie-Werten und Cookie-Parser implementiert das Parsen signierter Cookies. Beide teilen den gleichen geheimen Schlüssel.

Cookie-Signatur

Die Cookie-Einstellungen von Express (einschließlich Signaturen) werden alle über die Methode res.cookie() implementiert.

Der vereinfachte Code lautet wie folgt:

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;
};
Nach dem Login kopieren

sign ist die Signaturfunktion. Der Pseudocode lautet wie folgt, der tatsächlich den ursprünglichen Wert des Cookies mit dem Wert nach hmac verkettet.

Wichtiger Punkt an der Tafel: Der signierte Cookie-Wert beinhaltet den Originalwert.

function sign (val, secret) {
 return val + '.' + hmac(val, secret);
}
Nach dem Login kopieren

Woher kommt das Geheimnis hier? Es wird übergeben, wenn der Cookie-Parser initialisiert wird. Wie im folgenden Pseudocode gezeigt:

var cookieParser = function (secret) {
 return function (req, res, next) {
  req.secret = secret;
  // ...
  next();
 };
};
app.use(cookieParser('secret'));
Nach dem Login kopieren

Signiertes Cookie-Parsen

Nachdem man den Mechanismus der Cookie-Signatur kennt, ist klar, wie man das signierte Cookie „analysiert“. In dieser Phase führt die Middleware hauptsächlich zwei Dinge aus:

  1. Extrahieren Sie den ursprünglichen Wert, der dem signierten Cookie entspricht.

  2. Überprüfen Sie, ob es sich um ein signiertes Cookie handelt legal

Der Implementierungscode lautet wie folgt:

// 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;
}
Nach dem Login kopieren

Es ist relativ einfach, den ursprünglichen Wert des Cookies zu beurteilen und zu extrahieren. Es ist nur so, dass der Name der Unsign-Methode verwirrend ist.

Grundsätzlich werden nur Unterschriften rechtsgültig beglaubigt, eine sogenannte Gegenzeichnung gibt es nicht.

Der Code der Unsign-Methode lautet wie folgt:

  1. Extrahieren Sie zunächst den Originalwert A1 und den Signaturwert B1 aus dem eingehenden Cookie-Wert.

  2. Zweitens verwenden Sie denselben geheimen Schlüssel, um A1 zu signieren, um A2 zu erhalten.

  3. Bestimmen Sie abschließend anhand der Gleichheit von A2 und B1, ob die Signatur zulässig ist.

exports.unsign = function(val, Secret){

 var str = val.slice(0, val.lastIndexOf('.'))
  , mac = exports.sign(str, secret);
 
 return sha1(mac) == sha1(val) ? str : false;
};
Nach dem Login kopieren

dient hauptsächlich der Vermeidung von Sicherheitsgründen Zur Erhöhung der Sicherheit wurden Cookies manipuliert.

Nehmen wir ein kleines Beispiel, um zu sehen, wie die Cookie-Signatur Manipulationen verhindern kann.

Erweitern Sie basierend auf dem vorherigen Beispiel. Gehen Sie davon aus, dass die Website das Nick-Cookie verwendet, um zu unterscheiden, wer der aktuell angemeldete Benutzer ist. Im vorherigen Beispiel lautet der entsprechende Wert von Nick im Cookie des angemeldeten Benutzers wie folgt: (nach der Dekodierung)

s:chyingp.uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0

Zu diesem Zeitpunkt versucht jemand, diesen Cookie-Wert zu ändern, um den Zweck der Identitätsfälschung zu erreichen. Ändern Sie es beispielsweise in „xiong“:

s:xiaoming.uVofnk6k+9mHQpdPlQeOfjM8B5oa6mppny9d+mG9rD0

Wenn die Website die Anfrage empfängt, analysiert sie das Signatur-Cookie und stellt fest, dass die Signatur überprüft wurde scheitert. Daraus kann geschlossen werden, dass das Cookie gefälscht ist.

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

Werden Signaturen Sicherheit garantieren?

Natürlich nicht.

Das Beispiel im vorherigen Abschnitt verwendet nur den Wert des Nick-Cookies, um zu bestimmen, welcher Benutzer angemeldet ist. Dies ist ein sehr schlechtes Design. Allerdings ist es schwierig, signierte Cookies zu fälschen, wenn der geheime Schlüssel unbekannt ist. Aber wenn der Benutzername derselbe ist, ist auch die Signatur gleich. In diesem Fall ist es tatsächlich sehr leicht zu fälschen.

Darüber hinaus sind die Algorithmen von Open-Source-Komponenten öffentlich, sodass die Sicherheit des geheimen Schlüssels zum Schlüssel wird und sichergestellt werden muss, dass der geheime Schlüssel nicht durchgesickert ist.

Es gibt noch viele weitere, daher werde ich hier nicht näher darauf eingehen.

Zusammenfassung

Dieser Artikel bietet hauptsächlich eine relativ ausführliche Einführung in den Signatur- und Analysemechanismus von Express + Cookie-Parser.

In vielen ähnlichen zusammenfassenden Artikeln wird die Cookie-Signatur als Verschlüsselung beschrieben. Dies ist ein häufiger Fehler und die Leser müssen darauf achten.

Die Einführung in den Signaturteil beinhaltet ein wenig einfaches Sicherheitswissen. Schüler, die mit diesem Thema nicht vertraut sind, können eine Nachricht hinterlassen, um zu kommunizieren. Der Einfachheit halber sind einige Absätze und Formulierungen möglicherweise nicht streng genug. Sollten Fehler oder Auslassungen vorliegen, weisen Sie bitte darauf hin.

Verwandte Empfehlungen:

Knoten erstellt seine eigene Serverinstanz durch Implementierung von Express

Node.js verwendet die Express.Router-Instanz Ausführliche Erklärung

Verwendung von Session im Express-Framework zur Implementierung der Authentifizierung bei der Anmeldung

Das obige ist der detaillierte Inhalt vonUmfassende Beherrschung der Express-Cookie-Parser-Middleware. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist das Prinzip der Tomcat-Middleware? Was ist das Prinzip der Tomcat-Middleware? Dec 27, 2023 pm 04:40 PM

Das Prinzip der Tomcat-Middleware wird basierend auf Java Servlet- und Java EE-Spezifikationen implementiert. Als Servlet-Container ist Tomcat für die Verarbeitung von HTTP-Anfragen und -Antworten und die Bereitstellung der Laufumgebung für Webanwendungen verantwortlich. Die Prinzipien der Tomcat-Middleware umfassen hauptsächlich: 1. Container-Modell; 3. Servlet-Verarbeitungsmechanismus; Technologie; 9. Eingebetteter Modus usw.

So handhaben Sie die Formularvalidierung mithilfe von Middleware in Laravel So handhaben Sie die Formularvalidierung mithilfe von Middleware in Laravel Nov 02, 2023 pm 03:57 PM

Für die Verwendung von Middleware zur Formularvalidierung in Laravel sind spezifische Codebeispiele erforderlich. Einführung: In Laravel ist die Formularvalidierung eine sehr häufige Aufgabe. Um die Gültigkeit und Sicherheit der von den Nutzern eingegebenen Daten zu gewährleisten, überprüfen wir in der Regel die im Formular übermittelten Daten. Laravel bietet eine praktische Formularvalidierungsfunktion und unterstützt auch die Verwendung von Middleware zur Formularvalidierung. In diesem Artikel wird detailliert beschrieben, wie Middleware für die Formularvalidierung in Laravel verwendet wird, und es werden spezifische Codebeispiele bereitgestellt.

So verwenden Sie Middleware zur Datenbeschleunigung in Laravel So verwenden Sie Middleware zur Datenbeschleunigung in Laravel Nov 02, 2023 am 09:40 AM

Verwendung von Middleware zur Datenbeschleunigung in Laravel Einführung: Bei der Entwicklung von Webanwendungen mit dem Laravel-Framework ist die Datenbeschleunigung der Schlüssel zur Verbesserung der Anwendungsleistung. Middleware ist eine wichtige Funktion von Laravel, die Anfragen verarbeitet, bevor sie den Controller erreichen oder bevor die Antwort zurückgegeben wird. Dieser Artikel konzentriert sich auf die Verwendung von Middleware zur Datenbeschleunigung in Laravel und stellt spezifische Codebeispiele bereit. 1. Was ist Middleware? Middleware ist ein Mechanismus, der im Laravel-Framework verwendet wird

So verwenden Sie Middleware für die Antworttransformation in Laravel So verwenden Sie Middleware für die Antworttransformation in Laravel Nov 03, 2023 am 09:57 AM

So verwenden Sie Middleware für die Antwortkonvertierung in Laravel Middleware ist eine der sehr leistungsstarken und praktischen Funktionen im Laravel-Framework. Es ermöglicht uns, Anfragen und Antworten zu verarbeiten, bevor die Anfrage in den Controller gelangt oder bevor die Antwort an den Kunden gesendet wird. In diesem Artikel werde ich zeigen, wie man Middleware für die Antworttransformation in Laravel verwendet. Stellen Sie vor dem Start sicher, dass Sie Laravel installiert und ein neues Projekt erstellt haben. Jetzt folgen wir diesen Schritten: Erstellen Sie eine neue Middleware. Öffnen Sie

So verwenden Sie Middleware zur Datenwiederherstellung in Laravel So verwenden Sie Middleware zur Datenwiederherstellung in Laravel Nov 02, 2023 pm 02:12 PM

Laravel ist ein beliebtes PHP-Webanwendungs-Framework, das viele schnelle und einfache Möglichkeiten zum Erstellen effizienter, sicherer und skalierbarer Webanwendungen bietet. Bei der Entwicklung von Laravel-Anwendungen müssen wir häufig die Frage der Datenwiederherstellung berücksichtigen, d. h. wie wir Daten wiederherstellen und den normalen Betrieb der Anwendung im Falle eines Datenverlusts oder einer Beschädigung sicherstellen können. In diesem Artikel stellen wir die Verwendung der Laravel-Middleware zur Implementierung von Datenwiederherstellungsfunktionen vor und stellen spezifische Codebeispiele bereit. 1. Was ist Lara?

So verwenden Sie Middleware für die geplante Aufgabenplanung in Laravel So verwenden Sie Middleware für die geplante Aufgabenplanung in Laravel Nov 02, 2023 pm 02:26 PM

So verwenden Sie Middleware für die geplante Aufgabenplanung in Laravel. Einführung: Laravel ist ein beliebtes PHP-Open-Source-Framework, das praktische und leistungsstarke Tools zum Entwickeln von Webanwendungen bereitstellt. Eine der wichtigen Funktionen sind geplante Aufgaben, die es Entwicklern ermöglichen, bestimmte Aufgaben in bestimmten Intervallen auszuführen. In diesem Artikel stellen wir vor, wie Sie Middleware verwenden, um die geplante Aufgabenplanung von Laravel zu implementieren, und stellen spezifische Codebeispiele bereit. Vorbereitung der Umgebung Bevor wir beginnen, müssen wir uns vergewissern

So verwenden Sie Middleware zum Einrichten der domänenübergreifenden Ressourcenfreigabe (CORS) im Slim-Framework So verwenden Sie Middleware zum Einrichten der domänenübergreifenden Ressourcenfreigabe (CORS) im Slim-Framework Jul 30, 2023 pm 08:34 PM

So richten Sie Cross-Origin Resource Sharing (CORS) mithilfe von Middleware im Slim-Framework ein. Cross-Origin Resource Sharing (CORS) ist ein Mechanismus, der es dem Server ermöglicht, einige zusätzliche Informationen im HTTP-Antwortheader festzulegen, um dem Browser mitzuteilen, ob Cross erlaubt ist -Domain-Anfragen. In einigen Projekten mit Front-End- und Back-End-Trennung kann der CORS-Mechanismus verwendet werden, um die domänenübergreifende Anforderung des Front-Ends für die Back-End-Schnittstelle zu realisieren. Wenn wir das Slim-Framework zum Entwickeln der REST-API verwenden, können wir Middleware (Middleware) verwenden.

CodeIgniter-Middleware: Bietet sichere Funktionen zum Hoch- und Herunterladen von Dateien CodeIgniter-Middleware: Bietet sichere Funktionen zum Hoch- und Herunterladen von Dateien Aug 01, 2023 pm 03:01 PM

CodeIgniter-Middleware: Bietet sichere Funktionen zum Hochladen und Herunterladen von Dateien. Einführung: Das Hochladen und Herunterladen von Dateien sind sehr häufige Funktionen bei der Entwicklung von Webanwendungen. Aus Sicherheitsgründen erfordert der Umgang mit Datei-Uploads und -Downloads jedoch häufig zusätzliche Sicherheitsmaßnahmen. CodeIgniter ist ein beliebtes PHP-Framework, das eine Fülle von Tools und Bibliotheken bereitstellt, um Entwickler beim Erstellen sicherer und zuverlässiger Webanwendungen zu unterstützen. In diesem Artikel wird erläutert, wie Sie die CodeIgniter-Middleware zum Implementieren sicherer Dateien verwenden

See all articles