Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
tough-cookie-patch-cve-2023-26136 — Libreria conforme a RFC6265 per il parsing dei cookie e la gestione di CookieJar per Node.js, con patch di sicurezza CVE-2023-26136. Supporta creazione, validazione, archiviazione e recupero di cookie per client HTTP. | Kitploit
Strumenti/GitHubGitHub/guy2610/tough-cookie-patch-cve-2023-26136
Utilità GenericheStrumenti di Crittografia/DecrittografiaAnalisi delle VulnerabilitàSicurezza WebAutenticazione
GitHubguy2610/tough-cookie-patch-cve-2023-26136

tough-cookie-patch-cve-2023-26136

Libreria conforme a RFC6265 per il parsing dei cookie e la gestione di CookieJar per Node.js, con patch di sicurezza CVE-2023-26136. Supporta creazione, validazione, archiviazione e recupero di cookie per client HTTP.

Vedi Repository
131 anno faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

RFC6265 Cookie e CookieJar per Node.js

npm package

Build Status

Sinossi``` javascript

var tough = require('tough-cookie'); var Cookie = tough.Cookie; var cookie = Cookie.parse(header); cookie.value = 'somethingdifferent'; header = cookie.toString();

var cookiejar = new tough.CookieJar(); cookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb); // ... cookiejar.getCookies('http://example.com/otherpath',function(err,cookies) { res.headers['cookie'] = cookies.join('; '); });

root@kitploit:~
## Installazione

È _così_ facile!

`npm install tough-cookie`

Perché il nome? I moduli NPM `cookie`, `cookies` e `cookiejar` erano già occupati.

## Supporto delle versioni

Il supporto per le versioni di node.js seguirà quello del modulo [request](https://www.npmjs.com/package/request).

# API

## tough

Funzioni sul modulo ottenuto con `require('tough-cookie')`. Tutte possono essere usate come funzioni pure e non necessitano di essere "legate".

**Nota**: prima della versione 1.0.x, diverse di queste funzioni accettavano un parametro `strict`. Questo è stato poi rimosso dall'API poiché non era più necessario.

### `parseDate(string)`

Analizza una stringa di data di cookie in un oggetto `Date`. Analizza secondo RFC6265 Sezione 5.1.1, non `Date.parse()`.

### `formatDate(date)`

Formatta un oggetto Date in una stringa RFC1123 (il formato raccomandato da RFC6265).

### `canonicalDomain(str)`

Trasforma un nome di dominio in un nome di dominio canonico. Il nome di dominio canonico è un nome di dominio tagliato, in minuscolo, senza il punto iniziale e opzionalmente codificato in punycode (Sezione 5.1.2 di RFC6265). Per la maggior parte, questa funzione è idempotente (può essere eseguita nuovamente sul suo output senza effetti negativi).

### `domainMatch(str,domStr[,canonicalize=true])`

Risponde "questo dominio reale corrisponde al dominio in un cookie?". `str` è il nome di dominio "corrente" e `domStr` è il nome di dominio "del cookie". Corrisponde secondo RFC6265 Sezione 5.1.3, ma è utile pensarla come una "corrispondenza di suffisso".

Il parametro `canonicalize` eseguirà o meno gli altri due parametri tramite `canonicalDomain`.

### `defaultPath(path)`

Dato un percorso corrente di richiesta/risposta, restituisce il Path appropriato per l'archiviazione in un cookie. Questo è fondamentalmente la "directory" di un "file" nel percorso, ma è specificato dalla Sezione 5.1.4 del RFC.

Il parametro `path` DEVE essere _solo_ la parte del pathname di un URI (cioè esclude il nome host, query, frammento, ecc.). Questa è la proprietà `.pathname` dell'output di `uri.parse()` di node.

### `pathMatch(reqPath,cookiePath)`

Risponde "il path della richiesta corrisponde al path del cookie?" secondo RFC6265 Sezione 5.1.4. Restituisce un valore booleano.

Questa è essenzialmente una corrispondenza di prefisso in cui `cookiePath` è un prefisso di `reqPath`.

### `parse(cookieString[, options])`

alias per `Cookie.parse(cookieString[, options])`

### `fromJSON(string)`

alias per `Cookie.fromJSON(string)`

### `getPublicSuffix(hostname)`

Restituisce il suffisso pubblico di questo nome host. Il suffisso pubblico è il nome di dominio più breve su cui può essere impostato un cookie. Restituisce `null` se non è possibile impostare cookie per quel nome host.

Ad esempio: `www.example.com` e `www.subdomain.example.com` hanno entrambi suffisso pubblico `example.com`.

Per ulteriori informazioni, vedere http://publicsuffix.org/. Questo modulo deriva la sua lista da quel sito. Questa chiamata è attualmente un wrapper attorno al [metodo get()](https://www.npmjs.com/package/psl#pslgetdomain) di [`psl`](https://www.npmjs.com/package/psl).

### `cookieCompare(a,b)`

Per l'uso con `.sort()`, ordina un elenco di cookie nell'ordine raccomandato dal RFC (Sezione 5.4 passo 2). L'algoritmo di ordinamento è, in ordine di precedenza:

* `.path` più lungo
* `.creation` più vecchio (che ha una precisione di 1ms, uguale a `Date`)
* `.creationIndex` più basso (per superare la precisione di 1ms)``` javascript
var cookies = [ /* unsorted array of Cookie objects */ ];
cookies = cookies.sort(cookieCompare);

Nota: Poiché Date in JavaScript ha una precisione di 1 ms, è del tutto possibile avere cookie nello stesso millisecondo. Questo è particolarmente vero quando si utilizza l'opzione now con .setCookie(). La proprietà .creationIndex è un contatore globale per processo, assegnato durante la costruzione con new Cookie(). Questo preserva lo spirito dell'ordinamento RFC: i cookie più vecchi vanno per primi. Funziona benissimo per MemoryCookieStore, poiché le intestazioni Set-Cookie vengono analizzate in ordine, ma potrebbe non essere altrettanto valido per sistemi distribuiti. I Store sofisticati potrebbero voler impostare questo valore su un altro orologio logico in modo tale che se i cookie A e B vengono creati nello stesso millisecondo, ma il cookie A viene creato prima del cookie B, allora A.creationIndex < B.creationIndex. Se si desidera alterare il contatore globale, cosa che probabilmente non si dovrebbe fare, è memorizzato in Cookie.cookiesCreated.

permuteDomain(domain)

Genera un elenco di tutti i possibili domini che soddisfano domainMatch() con il parametro. Può essere utile per implementare store di cookie.

permutePath(path)

Genera un elenco di tutti i possibili percorsi che soddisfano pathMatch() con il parametro. Può essere utile per implementare store di cookie.

Cookie

Esportato tramite tough.Cookie.

Cookie.parse(cookieString[, options])

Analizza una singola intestazione HTTP Cookie o Set-Cookie in un oggetto Cookie. Restituisce undefined se la stringa non può essere analizzata.

Il parametro options non è obbligatorio e attualmente ha una sola proprietà:

  • loose - booleano - se true abilita l'analisi di cookie senza chiave come =abc e =, che non sono conformi alla RFC.

Se options non è un oggetto, viene ignorato, il che significa che puoi usare Array#map con esso.

Ecco come elaborare le intestazioni Set-Cookie in una risposta HTTP/HTTPS di Node:``` javascript if (res.headers['set-cookie'] instanceof Array) cookies = res.headers['set-cookie'].map(Cookie.parse); else cookies = [Cookie.parse(res.headers['set-cookie'])];

root@kitploit:~
_Note:_ nella versione 2.3.3, tough-cookie limitava il numero di spazi prima di `=` a 256 caratteri. Questa limitazione è stata successivamente rimossa.
Vedi [Issue 92](https://github.com/salesforce/tough-cookie/issues/92)

### Proprietà

Proprietà dell'oggetto Cookie:

  * _key_ - stringa - il nome o la chiave del cookie (predefinito "")
  * _value_ - stringa - il valore del cookie (predefinito "")
  * _expires_ - `Date` - se impostato, l'attributo `Expires=` del cookie (predefinito alla stringa `"Infinity"`). Vedi `setExpires()`
  * _maxAge_ - secondi - se impostato, l'attributo `Max-Age=` _in secondi_ del cookie. Può anche essere impostato alle stringhe `"Infinity"` e `"-Infinity"` rispettivamente per non scadenza e scadenza immediata. Vedi `setMaxAge()`
  * _domain_ - stringa - l'attributo `Domain=` del cookie
  * _path_ - stringa - il `Path=` del cookie
  * _secure_ - booleano - il flag `Secure` del cookie
  * _httpOnly_ - booleano - il flag `HttpOnly` del cookie
  * _extensions_ - `Array` - eventuali attributi del cookie non riconosciuti come stringhe (anche con segni di uguale all'interno)
  * _creation_ - `Date` - quando questo cookie è stato costruito
  * _creationIndex_ - numero - impostato in fase di costruzione, utilizzato per fornire una maggiore precisione nell'ordinamento (vedi `cookieCompare(a,b)` per una spiegazione completa)

Dopo che un cookie è stato passato attraverso `CookieJar.setCookie()`, avrà i seguenti attributi aggiuntivi:

  * _hostOnly_ - booleano - indica se questo è un cookie solo host (cioè nessun campo Domain è stato impostato, ma era implicito)
  * _pathIsDefault_ - booleano - se true, non c'era alcun campo Path sul cookie e `defaultPath()` è stato usato per derivarne uno.
  * _creation_ - `Date` - **modificato** dalla costruzione al momento in cui il cookie è stato aggiunto al jar
  * _lastAccessed_ - `Date` - ultima volta che il cookie è stato acceduto. Influirà sulla pulizia dei cookie una volta implementata. Usare `cookiejar.getCookies(...)` aggiornerà questo attributo.

### `Cookie([{properties}])`

Riceve un oggetto di opzioni che può contenere una qualsiasi delle proprietà di Cookie sopra elencate, utilizzando il valore predefinito per le proprietà non specificate.

### `.toString()`

codifica in un valore dell'intestazione Set-Cookie. Il campo Expires del cookie viene impostato usando `formatDate()`, ma viene omesso del tutto se `.expires` è `Infinity`.

### `.cookieString()`

codifica in un valore dell'intestazione Cookie (cioè le proprietà `.key` e `.value` unite con '=').

### `.setExpires(String)`

imposta la scadenza basandosi su una stringa di data passata attraverso `parseDate()`. Se parseDate restituisce `null` (cioè non riesce a interpretare questa stringa di data), `.expires` viene impostato a `"Infinity"` (una stringa).

### `.setMaxAge(number)`

imposta il maxAge in secondi. Converte `-Infinity` in `"-Infinity"` e `Infinity` in `"Infinity"` in modo che JSON serializzi correttamente.

### `.expiryTime([now=Date.now()])`

### `.expiryDate([now=Date.now()])`

expiryTime() calcola i millisecondi assoluti dall'epoca Unix in cui questo cookie scade. expiryDate() funziona in modo simile, tranne che restituisce un oggetto `Date`. Nota che in entrambi i casi il parametro `now` dovrebbe essere in millisecondi.

Max-Age ha la precedenza su Expires (come da RFC). L'attributo `.creation` -- o, per impostazione predefinita, il parametro `now` -- viene utilizzato per calcolare l'offset dell'attributo `.maxAge`.

Se Expires (`.expires`) è impostato, viene restituito quello.

Altrimenti, `expiryTime()` restituisce `Infinity` e `expiryDate()` restituisce un oggetto `Date` per "Tue, 19 Jan 2038 03:14:07 GMT" (la data più recente che può essere espressa da un `time_t` a 32 bit; il limite comune per la maggior parte degli user-agent).

### `.TTL([now=Date.now()])`

calcola il TTL relativo a `now` (millisecondi). Si applicano le stesse regole di precedenza di `expiryTime`/`expiryDate`.

Il "numero" `Infinity` viene restituito per i cookie senza una scadenza esplicita e `0` viene restituito se il cookie è scaduto. Altrimenti viene restituito un time-to-live in millisecondi.

### `.canonicalizedDomain()`

### `.cdomain()`

restituisce il campo `.domain` canonizzato. Viene convertito in minuscolo e codificato in punycode (RFC3490) se il dominio contiene caratteri non ASCII.

### `.toJSON()`

Per comodità nell'uso di `JSON.serialize(cookie)`. Restituisce un semplice `Object` che può essere serializzato in JSON.

Qualsiasi proprietà `Date` (cioè `.expires`, `.creation` e `.lastAccessed`) viene esportata in formato ISO (`.toISOString()`).

**NOTA**: Le proprietà personalizzate di `Cookie` verranno scartate. In tough-cookie 1.x, poiché non esisteva un metodo `.toJSON` esplicitamente definito, venivano catturate tutte le proprietà enumerabili. Se desideri che una proprietà venga serializzata, aggiungi il nome della proprietà all'Array `Cookie.serializableProperties`.

### `Cookie.fromJSON(strOrObj)`

Fa l'inverso di `cookie.toJSON()`. Se viene passata una stringa, la analizzerà prima con `JSON.parse()`.

Qualsiasi proprietà `Date` (cioè `.expires`, `.creation` e `.lastAccessed`) viene interpretata tramite `Date.parse()`, non tramite tough-cookie `parseDate`, poiché a questo livello si gestiscono timestamp JavaScript/JSON.

Restituisce `null` in caso di errore di parsing JSON.

### `.clone()`

Esegue una copia profonda di questo cookie, esattamente implementata come `Cookie.fromJSON(cookie.toJSON())`.

### `.validate()`

Stato: *IN CORSO*. Funziona per alcune cose, ma non è affatto completo.

convalida gli attributi del cookie per la correttezza semantica. Utile per il controllo "lint" di qualsiasi intestazione Set-Cookie generata. Per ora restituisce un booleano, ma in futuro potrebbe restituire una stringa di motivazione -- puoi prepararti al futuro con questa struttura:``` javascript
if (cookie.validate() === true) {
  // it's tasty
} else {
  // yuck!
}

CookieJar

Esportato tramite tough.CookieJar.

CookieJar([store],[options])

Usa semplicemente new CookieJar(). Se desideri utilizzare un archivio personalizzato, passalo al costruttore, altrimenti verrà creato e utilizzato un MemoryCookieStore.

L'oggetto options può essere omesso e può avere le seguenti proprietà:

  • rejectPublicSuffixes - booleano - default true - rifiuta i cookie con domini come "com" e "co.uk"
  • looseMode - booleano - default false - accetta cookie malformati come bar e =bar, che hanno un nome vuoto implicito. Questo non è nello standard, ma viene talvolta utilizzato sul web ed è accettato dalla maggior parte dei browser.

Poiché alla fine questo modulo intende supportare CookieJar da database/remoto/ecc., per i metodi di CookieJar viene utilizzato lo stile di passaggio di continuazione.

.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))

Tenta di impostare il cookie nel jar dei cookie. Se l'operazione fallisce, un errore verrà passato al callback cb, altrimenti il cookie viene passato attraverso. Il cookie avrà aggiornate le proprietà .creation, .lastAccessed e .hostOnly.

L'oggetto options può essere omesso e può avere le seguenti proprietà:

  • http - booleano - default true - indica se questa è un'API HTTP o non HTTP. Influenza i cookie HttpOnly.
  • secure - booleano - rilevamento automatico dall'url - indica se questa è un'API "Secure". Se currentUrl inizia con https: o wss:, allora viene impostato di default a true, altrimenti false.
  • now - Date - default new Date() - cosa usare per il tempo di creazione/accesso dei cookie
  • ignoreError - booleano - default false - ignora silenziosamente cose come errori di parsing e domini non validi. Gli errori Store non vengono ignorati da questa opzione.

Secondo la RFC, la proprietà .hostOnly viene impostata se non c'era un parametro "Domain=" nella stringa del cookie (o .domain era nullo sull'oggetto Cookie). La proprietà .domain viene impostata al nome host completo di currentUrl in questo caso. Abbinare questo cookie richiede una corrispondenza esatta del nome host (non un domainMatch come al solito).

.setCookieSync(cookieOrString, currentUrl, [{options}])

Versione sincrona di setCookie; funziona solo con archivi sincroni (ad esempio il MemoryCookieStore predefinito).

.getCookies(currentUrl, [{options},] cb(err,cookies))

Recupera l'elenco dei cookie che possono essere inviati in un'intestazione Cookie per l'url corrente.

Se viene riscontrato un errore, questo viene passato come err al callback, altrimenti viene passato un Array di oggetti Cookie. L'array viene ordinato con cookieCompare() a meno che non venga fornita l'opzione {sort:false}.

L'oggetto options può essere omesso e può avere le seguenti proprietà:

  • http - booleano - default true - indica se questa è un'API HTTP o non HTTP. Influenza i cookie HttpOnly.
  • secure - booleano - rilevamento automatico dall'url - indica se questa è un'API "Secure". Se currentUrl inizia con https: o wss:, allora viene impostato di default a true, altrimenti false.
  • now - Date - default new Date() - cosa usare per il tempo di creazione/accesso dei cookie
  • expire - booleano - default true - esegue il controllo del tempo di scadenza dei cookie e rimuove in modo asincrono i cookie scaduti dall'archivio. Usare false restituirà i cookie scaduti e non li rimuoverà dall'archivio (il che è potenzialmente utile per riprodurre le intestazioni Set-Cookie).
  • allPaths - booleano - default false - se true, non limitare i cookie per percorso. L'impostazione predefinita utilizza l'ambito del percorso conforme alla RFC. Nota: potrebbe non essere supportato dall'archivio sottostante (il MemoryCookieStore predefinito lo supporta).

La proprietà .lastAccessed dei cookie restituiti sarà stata aggiornata.

.getCookiesSync(currentUrl, [{options}])

Versione sincrona di getCookies; funziona solo con archivi sincroni (ad esempio il MemoryCookieStore predefinito).

.getCookieString(...)

Accetta le stesse opzioni di .getCookies() ma passa una stringa adatta per un'intestazione Cookie invece di un array al callback. Semplicemente mappa l'array di Cookie tramite .cookieString().

.getCookieStringSync(...)

Versione sincrona di getCookieString; funziona solo con archivi sincroni (ad esempio il MemoryCookieStore predefinito).

.getSetCookieStrings(...)

Restituisce un array di stringhe adatte per le intestazioni Set-Cookie. Accetta le stesse opzioni di .getCookies(). Semplicemente mappa l'array di cookie tramite .toString().

.getSetCookieStringsSync(...)

Versione sincrona di getSetCookieStrings; funziona solo con archivi sincroni (ad esempio il MemoryCookieStore predefinito).

.serialize(cb(err,serializedObject))

Serializza il Jar se l'archivio sottostante supporta .getAllCookies.

NOTA: Le proprietà personalizzate di Cookie verranno scartate. Se desideri che una proprietà venga serializzata, aggiungi il nome della proprietà all'array Cookie.serializableProperties.

Vedi [Serialization Format].

.serializeSync()

Versione sincrona di .serialize

.toJSON()

Alias di .serializeSync() per comodità di JSON.stringify(cookiejar).

CookieJar.deserialize(serialized, [store], cb(err,object))

Viene creato un nuovo Jar e i Cookie serializzati vengono aggiunti all'archivio sottostante. Ogni Cookie viene aggiunto tramite store.putCookie nell'ordine in cui appaiono nella serializzazione.

L'argomento store è opzionale, ma dovrebbe essere un'istanza di Store. Per impostazione predefinita, viene creata una nuova istanza di MemoryCookieStore.

Come comodità, se serialized è una stringa, viene prima passata attraverso JSON.parse. Se questo genera un errore, viene passato al callback.

CookieJar.deserializeSync(serialized, [store])

Versione sincrona di .deserialize. Nota che store deve essere sincrono per funzionare.

CookieJar.fromJSON(string)

Alias di .deserializeSync per fornire coerenza con Cookie.fromJSON().

.clone([store,]cb(err,newJar))

Produce una copia profonda di questo jar. Le modifiche all'originale non influenzeranno la copia, e viceversa.

L'argomento store è opzionale, ma dovrebbe essere un'istanza di Store. Per impostazione predefinita, viene creata una nuova istanza di MemoryCookieStore. Il trasferimento tra tipi di archivio è supportato fintanto che la sorgente implementa .getAllCookies() e la destinazione implementa .putCookie().

.cloneSync([store])

Versione sincrona di .clone, che restituisce una nuova istanza di CookieJar.

L'argomento store è opzionale, ma deve essere un'istanza sincrona di Store se specificato. Se non passato, viene utilizzata una nuova istanza di MemoryCookieStore.

La sorgente e la destinazione devono essere entrambi Store sincroni. Se uno o entrambi gli archivi sono asincroni, usa .clone invece. Ricorda che MemoryCookieStore supporta chiamate API sia sincrone che asincrone.

.removeAllCookies(cb(err))

Rimuove tutti i cookie dal jar.

Questa è una nuova funzionalità retrocompatibile di tough-cookie versione 2.5, quindi non tutti gli Store la implementeranno in modo efficiente. Per gli Store che non implementano removeAllCookies, il fallback è chiamare removeCookie dopo getAllCookies. Se getAllCookies fallisce o non è implementato nello Store, viene restituito quell'errore. Se una o più chiamate removeCookie falliscono, viene restituito solo il primo errore.

.removeAllCookiesSync()

Versione sincrona di .removeAllCookies()

Store

Classe base per gli store di CookieJar. Disponibile come tough.Store.

Store API

Il modello di archiviazione per ogni istanza di CookieJar può essere sostituito con un'implementazione personalizzata. Il predefinito è MemoryCookieStore che si trova nel file lib/memstore.js. L'API utilizza lo stile di passaggio di continuazione per consentire store asincroni.

Gli Store dovrebbero ereditare dalla classe base Store, disponibile come require('tough-cookie').Store.

Gli Store sono asincroni per impostazione predefinita, ma se store.synchronous è impostato a true, allora i metodi *Sync sul CookieJar contenitore possono essere usati (tuttavia, lo stile di passaggio di continuazione

Tutti i parametri domain saranno stati normalizzati prima della chiamata.

L'archivio dei cookie deve avere tutti i seguenti metodi.

store.findCookie(domain, path, key, cb(err,cookie))

Recupera un cookie con il dato dominio, percorso e chiave (ovvero nome). La RFC sostiene che esattamente uno di questi cookie dovrebbe esistere in un archivio. Se l'archivio utilizza il versioning, ciò significa che il cookie più recente/nuovo dovrebbe essere restituito.

Il callback riceve un errore e l'oggetto Cookie risultante. Se non viene trovato alcun cookie, allora deve essere passato null (cioè non un errore).

store.findCookies(domain, path, cb(err,cookies))

Trova i cookie che corrispondono al dato dominio e percorso. Questo viene spesso chiamato nel contesto di cookiejar.getCookies() sopra.

Se non vengono trovati cookie, al callback deve essere passato un array vuoto.

La lista risultante verrà controllata per l'applicabilità alla richiesta corrente secondo la RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, ecc.), quindi va bene usare un algoritmo di ricerca ottimistico quando si implementa questo metodo. Tuttavia, l'algoritmo di ricerca utilizzato DOVREBBE cercare di trovare cookie che domainMatch() il dominio e pathMatch() il percorso per limitare la quantità di controlli da fare.

A partire dalla versione 0.9.12, l'opzione allPaths di cookiejar.getCookies() sopra farà sì che il percorso qui sia null. Se il percorso è null, la corrispondenza del percorso NON DEVE essere eseguita (cioè solo corrispondenza del dominio).

store.putCookie(cookie, cb(err))

Aggiunge un nuovo cookie all'archivio. L'implementazione DOVREBBE sostituire qualsiasi cookie esistente con le stesse proprietà .domain, .path e .key -- a seconda della natura dell'implementazione, è possibile che tra la chiamata a fetchCookie e putCookie possa verificarsi un putCookie duplicato.

L'oggetto cookie NON DEVE essere modificato; il chiamante avrà già aggiornato le proprietà .creation e .lastAccessed.

Passa un errore se il cookie non può essere memorizzato.

store.updateCookie(oldCookie, newCookie, cb(err))

Aggiorna un cookie esistente. L'implementazione DEVE aggiornare il .value per un cookie con lo stesso domain, .path e .key. L'implementazione DOVREBBE verificare che il vecchio valore nell'archivio sia equivalente a oldCookie - come viene risolto il conflitto dipende dall'archivio.

La proprietà .lastAccessed sarà sempre diversa tra i due oggetti (con la precisione possibile tramite il clock di JavaScript). Sia .creation che .creationIndex sono garantiti essere gli stessi. Gli Store POSSONO ignorare o differire la modifica di .lastAccessed a costo di influenzare come i cookie vengono selezionati per la cancellazione automatica (ad esempio, meno recentemente usati, che spetta all'archivio implementare).

Gli Store potrebbero desiderare di ottimizzare la modifica del .value del cookie nell'archivio rispetto alla memorizzazione di un nuovo cookie. Se l'implementazione non definisce questo metodo, verrà aggiunto all'oggetto store uno stub che chiama putCookie(newCookie,cb).

Gli oggetti newCookie e oldCookie NON DEVONO essere modificati.

Passa un errore se newCookie non può essere memorizzato.

store.removeCookie(domain, path, key, cb(err))

Rimuove un cookie dall'archivio (vedi note su findCookie riguardo al vincolo di unicità).

L'implementazione NON DEVE passare un errore se il cookie non esiste; passa un errore solo per il fallimento nella rimozione di un cookie esistente.

store.removeCookies(domain, path, cb(err))

Rimuove i cookie corrispondenti dall'archivio. Il parametro path è opzionale, e se mancante significa che tutti i percorsi in un dominio devono essere rimossi.

Passa un errore SOLO se la rimozione di alcuni cookie esistenti è fallita.

store.removeAllCookies(cb(err))

Opzionale. Rimuove tutti i cookie dall'archivio.

Passa un errore se uno o più cookie non possono essere rimossi.

Nota: Nuovo metodo a partire dalla versione 2.5 di tough-cookie, quindi non tutti gli Store lo implementeranno, inoltre alcuni store potrebbero scegliere di non implementarlo.

store.getAllCookies(cb(err, cookies))

Opzionale. Produce un Array di tutti i cookie durante jar.serialize(). Gli elementi nell'array possono essere oggetti Cookie reali o generici Object con la struttura dati del [Formato di serializzazione].

I cookie DOVREBBERO essere restituiti in ordine di creazione per preservare l'ordinamento tramite compareCookies(). Per riferimento, MemoryCookieStore ordinerà per .creationIndex poiché usa internamente oggetti Cookie reali. Se non restituisci i cookie in ordine di creazione, saranno comunque ordinati per tempo di creazione, ma questo ha una precisione di 1ms. Vedi compareCookies per maggiori dettagli.

Passa un errore se il recupero fallisce.

Nota: non tutti gli Store possono implementarlo a causa di limitazioni tecniche, quindi è opzionale.

MemoryCookieStore

Eredita da Store.

Un'implementazione di archivio sincrono CookieJar solo in memoria, usata per impostazione predefinita. Nonostante sia un'implementazione sincrona, è utilizzabile con entrambe le forme sincrone e asincrone dell'API CookieJar. Supporta la serializzazione, getAllCookies e removeAllCookies.

Community Cookie Stores

Queste sono alcune implementazioni di Store create e mantenute dalla community. Non sono ufficiali e non ne garantiamo il funzionamento, ma potresti essere interessato a dare un'occhiata:

  • db-cookie-store: SQL inclusi database basati su SQLite
  • file-cookie-store: formato file cookie Netscape su disco
  • redis-cookie-store: Redis
  • tough-cookie-filestore: JSON su disco
  • tough-cookie-web-storage-store: DOM localStorage e sessionStorage

Formato di serializzazione

NOTA: se desideri che le proprietà personalizzate di Cookie vengano serializzate, aggiungi il nome della proprietà a Cookie.serializableProperties.```js { // The version of tough-cookie that serialized this jar. version: '[email protected]',

root@kitploit:~
// add the store type, to make humans happy:
storeType: 'MemoryCookieStore',

// CookieJar configuration:
rejectPublicSuffixes: true,
// ... future items go here

// Gets filled from jar.store.getAllCookies():
cookies: [
  {
    key: 'string',
    value: 'string',
    // ...
    /* other Cookie.serializableProperties go here */
  }
]

}

root@kitploit:~
# Copyright e Licenza

BSD-3-Clause:```text
 Copyright (c) 2015, Salesforce.com, Inc.
 All rights reserved.

 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:

 1. Redistributions of source code must retain the above copyright notice,
 this list of conditions and the following disclaimer.

 2. Redistributions in binary form must reproduce the above copyright notice,
 this list of conditions and the following disclaimer in the documentation
 and/or other materials provided with the distribution.

 3. Neither the name of Salesforce.com nor the names of its contributors may
 be used to endorse or promote products derived from this software without
 specific prior written permission.

 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGE.
Scarica lo strumento