Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
tough-cookie-patch-cve-2023-26136 — RFC6265를 준수하는 쿠키 파싱 및 CookieJar 관리 라이브러리로, Node.js용이며 CVE-2023-26136 보안 패치가 적용되었습니다. HTTP 클라이언트를 위한 쿠키 생성, 검증, 저장 및 검색을 지원합니다. | Kitploit
도구/GitHubGitHub/guy2610/tough-cookie-patch-cve-2023-26136
General Purpose UtilitiesEncryption/Decryption ToolsVulnerability AnalysisWeb SecurityAuthentication
GitHubguy2610/tough-cookie-patch-cve-2023-26136

tough-cookie-patch-cve-2023-26136

RFC6265를 준수하는 쿠키 파싱 및 CookieJar 관리 라이브러리로, Node.js용이며 CVE-2023-26136 보안 패치가 적용되었습니다. HTTP 클라이언트를 위한 쿠키 생성, 검증, 저장 및 검색을 지원합니다.

저장소 보기

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
10년 전아직 검토되지 않음

RFC6265 Node.js용 쿠키 및 CookieJar

npm package

Build Status

개요``` 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:~
# 설치

정말 _쉽습니다_!

`npm install tough-cookie`

왜 이런 이름일까요? NPM 모듈 `cookie`, `cookies`, `cookiejar`는 이미 사용 중이었습니다.

## 버전 지원

node.js 버전 지원은 [request](https://www.npmjs.com/package/request) 모듈의 지원을 따릅니다.

# API

## tough

`require('tough-cookie')`로 가져오는 모듈의 함수들입니다. 모두 순수 함수로 사용할 수 있으며 "바인딩"할 필요가 없습니다.

**참고**: 1.0.x 이전에는 여러 함수들이 `strict` 매개변수를 받았습니다. 이후 더 이상 필요하지 않게 되어 API에서 제거되었습니다.

### `parseDate(string)`

쿠키 날짜 문자열을 `Date`로 파싱합니다. `Date.parse()`가 아닌 RFC6265 5.1.1절에 따라 파싱합니다.

### `formatDate(date)`

Date를 RFC1123 문자열로 포맷합니다 (RFC6265에서 권장하는 형식).

### `canonicalDomain(str)`

도메인 이름을 정식 도메인 이름으로 변환합니다. 정식 도메인 이름은 공백 제거, 소문자 변환, 선행 점 제거 및 선택적으로 punycode 인코딩된 도메인 이름입니다 (RFC6265 5.1.2절). 대부분의 경우 이 함수는 멱등적입니다 (출력에 다시 실행해도 부작용이 없습니다).

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

실제 도메인이 쿠키의 도메인과 일치하는지 여부를 답합니다. `str`은 "현재" 도메인 이름이고 `domStr`은 "쿠키" 도메인 이름입니다. RFC6265 5.1.3절에 따라 일치하지만, "접미사 일치"로 생각하면 도움이 됩니다.

`canonicalize` 매개변수는 다른 두 매개변수를 `canonicalDomain`에 통과시킬지 여부를 결정합니다.

### `defaultPath(path)`

현재 요청/응답 경로가 주어지면 쿠키에 저장하기 적합한 Path를 반환합니다. 기본적으로 경로에서 "파일"의 "디렉토리"이지만, RFC 5.1.4절에 의해 지정됩니다.

`path` 매개변수는 URI의 _경로명_ 부분만 있어야 합니다 (즉, 호스트명, 쿼리, 프래그먼트 등은 제외). 이는 node의 `uri.parse()` 출력의 `.pathname` 속성입니다.

### `pathMatch(reqPath,cookiePath)`

RFC6265 5.1.4절에 따라 요청 경로가 주어진 쿠키 경로와 경로 일치하는지 여부를 답합니다. 불리언을 반환합니다.

이는 기본적으로 `cookiePath`가 `reqPath`의 접두사인 접두사 일치입니다.

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

`Cookie.parse(cookieString[, options])`의 별칭입니다.

### `fromJSON(string)`

`Cookie.fromJSON(string)`의 별칭입니다.

### `getPublicSuffix(hostname)`

이 호스트명의 공개 접미사를 반환합니다. 공개 접미사는 쿠키를 설정할 수 있는 가장 짧은 도메인 이름입니다. 해당 호스트명에 쿠키를 설정할 수 없으면 `null`을 반환합니다.

예: `www.example.com`과 `www.subdomain.example.com` 모두 공개 접미사가 `example.com`입니다.

자세한 내용은 http://publicsuffix.org/를 참조하세요. 이 모듈은 해당 사이트에서 목록을 가져옵니다. 이 호출은 현재 [`psl`](https://www.npmjs.com/package/psl)의 [get() 메서드](https://www.npmjs.com/package/psl#pslgetdomain)를 래핑한 것입니다.

### `cookieCompare(a,b)`

`.sort()`와 함께 사용하여 쿠키 목록을 RFC에서 권장하는 순서(5.4절 2단계)로 정렬합니다. 정렬 알고리즘은 우선순위 순서대로 다음과 같습니다:

* 가장 긴 `.path`
* 가장 오래된 `.creation` (1ms 정밀도, `Date`와 동일)
* 가장 낮은 `.creationIndex` (1ms 정밀도를 넘어서기 위해)``` javascript
var cookies = [ /* unsorted array of Cookie objects */ ];
cookies = cookies.sort(cookieCompare);

참고: JavaScript의 Date는 1ms 정밀도로 제한되어 있으므로, 동일한 밀리초 내에 쿠키가 생성되는 것은 완전히 가능합니다. 이는 .setCookie()에 now 옵션을 사용할 때 특히 그렇습니다. .creationIndex 속성은 프로세스별 전역 카운터로, new Cookie()로 생성 시 할당됩니다. 이는 RFC 정렬의 정신을 유지합니다: 오래된 쿠키가 먼저 옵니다. 이는 MemoryCookieStore에서 잘 작동합니다. Set-Cookie 헤더가 순서대로 파싱되기 때문입니다. 하지만 분산 시스템에서는 그렇게 좋지 않을 수 있습니다. 정교한 Store는 다른 _논리적 시계_로 설정하여, 쿠키 A와 B가 같은 밀리초에 생성되었지만 쿠키 A가 쿠키 B보다 먼저 생성된 경우 A.creationIndex < B.creationIndex가 되도록 할 수 있습니다. 전역 카운터를 변경하려면(아마도 하지 말아야 할 일이지만), Cookie.cookiesCreated에 저장되어 있습니다.

permuteDomain(domain)

domainMatch() 매개변수와 일치하는 모든 가능한 도메인 목록을 생성합니다. 쿠키 저장소 구현에 유용할 수 있습니다.

permutePath(path)

pathMatch() 매개변수와 일치하는 모든 가능한 경로 목록을 생성합니다. 쿠키 저장소 구현에 유용할 수 있습니다.

Cookie

tough.Cookie를 통해 내보내집니다.

Cookie.parse(cookieString[, options])

단일 Cookie 또는 Set-Cookie HTTP 헤더를 파싱하여 Cookie 객체로 만듭니다. 문자열을 파싱할 수 없으면 undefined를 반환합니다.

options 매개변수는 필수가 아니며 현재 한 가지 속성만 있습니다:

  • loose - boolean - true이면 =abc 및 =와 같은 키 없는 쿠키의 파싱을 활성화합니다. 이는 RFC를 준수하지 않습니다.

options가 객체가 아니면 무시됩니다. 즉, Array#map과 함께 사용할 수 있습니다.

다음은 Node HTTP/HTTPS 응답에서 Set-Cookie 헤더를 처리하는 방법입니다:``` 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:_ in version 2.3.3, tough-cookie limited the number of spaces before the `=` to 256 characters. This limitation has since been removed.
See [Issue 92](https://github.com/salesforce/tough-cookie/issues/92)

### 속성

Cookie 객체 속성:

  * _key_ - string - 쿠키의 이름 또는 키 (기본값 "")
  * _value_ - string - 쿠키의 값 (기본값 "")
  * _expires_ - `Date` - 설정된 경우 쿠키의 `Expires=` 속성 (기본값은 문자열 `"Infinity"`). `setExpires()` 참조
  * _maxAge_ - 초 - 설정된 경우 쿠키의 (초 단위) `Max-Age=` 속성. 만료 없음 및 즉시 만료를 위해 각각 문자열 `"Infinity"` 및 `"-Infinity"`로 설정할 수도 있습니다. `setMaxAge()` 참조
  * _domain_ - string - 쿠키의 `Domain=` 속성
  * _path_ - string - 쿠키의 `Path=` 속성
  * _secure_ - boolean - `Secure` 쿠키 플래그
  * _httpOnly_ - boolean - `HttpOnly` 쿠키 플래그
  * _extensions_ - `Array` - 인식되지 않은 쿠키 속성 (내부에 등호가 있어도 문자열)
  * _creation_ - `Date` - 이 쿠키가 생성된 시간
  * _creationIndex_ - 숫자 - 생성 시 설정되며, 더 정확한 정렬을 위해 사용됩니다 (자세한 설명은 `cookieCompare(a,b)` 참조)

`CookieJar.setCookie()`를 통해 쿠키가 전달된 후에는 다음과 같은 추가 속성이 생깁니다:

  * _hostOnly_ - boolean - 호스트 전용 쿠키인지 여부 (즉, Domain 필드가 설정되지 않았지만 암시됨)
  * _pathIsDefault_ - boolean - true인 경우 쿠키에 Path 필드가 없었고 `defaultPath()`를 사용하여 하나를 도출했습니다.
  * _creation_ - `Date` - 생성 시점에서 쿠키가 jar에 추가된 시점으로 **수정됨**
  * _lastAccessed_ - `Date` - 쿠키가 마지막으로 액세스된 시간. 구현되면 쿠키 정리에 영향을 미칩니다. `cookiejar.getCookies(...)`를 사용하면 이 속성이 업데이트됩니다.

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

속성 객체를 받아서 위의 Cookie 속성 중 어떤 것이든 포함할 수 있으며, 지정되지 않은 속성에는 기본값을 사용합니다.

### `.toString()`

Set-Cookie 헤더 값으로 인코딩합니다. Expires 쿠키 필드는 `formatDate()`를 사용하여 설정되지만 `.expires`가 `Infinity`인 경우 완전히 생략됩니다.

### `.cookieString()`

Cookie 헤더 값으로 인코딩합니다 (즉, `.key`와 `.value` 속성이 '='로 결합됨).

### `.setExpires(String)`

`parseDate()`를 통해 전달된 날짜 문자열을 기반으로 만료를 설정합니다. parseDate가 `null`을 반환하면 (즉, 이 날짜 문자열을 구문 분석할 수 없음) `.expires`가 `"Infinity"` (문자열)로 설정됩니다.

### `.setMaxAge(number)`

maxAge를 초 단위로 설정합니다. `-Infinity`를 `"-Infinity"`로, `Infinity`를 `"Infinity"`로 강제 변환하여 JSON 직렬화가 올바르게 작동하도록 합니다.

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

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

expiryTime()은 이 쿠키가 만료되는 절대 unix epoch 밀리초를 계산합니다. expiryDate()도 유사하게 작동하지만 `Date` 객체를 반환합니다. 두 경우 모두 `now` 매개변수는 밀리초여야 합니다.

Max-Age는 Expires보다 우선합니다 (RFC에 따라). `.creation` 속성 (또는 기본적으로 `now` 매개변수)이 `.maxAge` 속성을 오프셋하는 데 사용됩니다.

Expires (`.expires`)가 설정된 경우 해당 값이 반환됩니다.

그렇지 않으면 `expiryTime()`은 `Infinity`를 반환하고 `expiryDate()`는 "Tue, 19 Jan 2038 03:14:07 GMT"에 대한 `Date` 객체를 반환합니다 (32비트 `time_t`로 표현할 수 있는 가장 늦은 날짜; 대부분의 사용자 에이전트의 일반적인 제한).

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

`now` (밀리초)를 기준으로 TTL을 계산합니다. `expiryTime`/`expiryDate`와 동일한 우선 순위 규칙이 적용됩니다.

명시적인 만료가 없는 쿠키의 경우 "숫자" `Infinity`가 반환되고, 쿠키가 만료된 경우 `0`이 반환됩니다. 그렇지 않으면 밀리초 단위의 TTL이 반환됩니다.

### `.canonicalizedDomain()`

### `.cdomain()`

정규화된 `.domain` 필드를 반환합니다. 도메인에 ASCII가 아닌 문자가 있는 경우 소문자로 변환되고 punycode (RFC3490)로 인코딩됩니다.

### `.toJSON()`

`JSON.serialize(cookie)`를 사용할 때 편리합니다. JSON 직렬화할 수 있는 일반 `Object`를 반환합니다.

모든 `Date` 속성 (즉, `.expires`, `.creation`, `.lastAccessed`)은 ISO 형식 (`.toISOString()`)으로 내보내집니다.

**참고**: 사용자 정의 `Cookie` 속성은 버려집니다. tough-cookie 1.x에서는 `.toJSON` 메서드가 명시적으로 정의되지 않았기 때문에 열거 가능한 모든 속성이 캡처되었습니다. 속성을 직렬화하려면 속성 이름을 `Cookie.serializableProperties` 배열에 추가하세요.

### `Cookie.fromJSON(strOrObj)`

`cookie.toJSON()`의 역을 수행합니다. 문자열이 전달되면 먼저 `JSON.parse()`를 수행합니다.

모든 `Date` 속성 (즉, `.expires`, `.creation`, `.lastAccessed`)은 `Date.parse()`를 통해 구문 분석됩니다. tough-cookie의 `parseDate`가 아닙니다. 이 레이어에서는 JavaScript/JSON 스타일 타임스탬프가 처리되기 때문입니다.

JSON 구문 분석 오류가 발생하면 `null`을 반환합니다.

### `.clone()`

이 쿠키의 깊은 복제를 수행하며, 정확히 `Cookie.fromJSON(cookie.toJSON())`으로 구현됩니다.

### `.validate()`

상태: *진행 중*. 몇 가지에 대해 작동하지만 결코 포괄적이지는 않습니다.

쿠키 속성의 의미적 정확성을 검증합니다. 생성하는 Set-Cookie 헤더를 "lint" 검사하는 데 유용합니다. 현재는 부울 값을 반환하지만, 결국에는 이유 문자열을 반환할 수 있습니다 -- 다음 구문으로 미래 대비가 가능합니다:

```javascript
if (cookie.validate() === true) {
  // it's tasty
} else {
  // yuck!
}
`````` javascript
if (cookie.validate() === true) {
  // it's tasty
} else {
  // yuck!
}

CookieJar

tough.CookieJar를 통해 내보냅니다.

CookieJar([store],[options])

간단히 new CookieJar()를 사용합니다. 사용자 정의 저장소를 사용하려면 생성자에 전달하고, 그렇지 않으면 MemoryCookieStore가 생성되어 사용됩니다.

options 객체는 생략할 수 있으며 다음과 같은 속성을 가질 수 있습니다:

  • rejectPublicSuffixes - boolean - 기본값 true - "com" 및 "co.uk"와 같은 도메인의 쿠키를 거부합니다.
  • looseMode - boolean - 기본값 false - bar 및 =bar와 같은 잘못된 형식의 쿠키를 허용하며, 이는 암시적으로 빈 이름을 가집니다. 표준에는 없지만 웹에서 가끔 사용되며 (대부분의) 브라우저에서 허용됩니다.

이 모듈은 궁극적으로 데이터베이스/원격 등 CookieJar를 지원하려고 하므로, CookieJar 메서드에는 continuation passing 스타일이 사용됩니다.

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

쿠키 항아리에 쿠키를 설정하려고 시도합니다. 작업이 실패하면 오류가 콜백 cb에 전달되고, 그렇지 않으면 쿠키가 전달됩니다. 쿠키는 업데이트된 .creation, .lastAccessed 및 .hostOnly 속성을 갖게 됩니다.

options 객체는 생략할 수 있으며 다음과 같은 속성을 가질 수 있습니다:

  • http - boolean - 기본값 true - HTTP인지 비HTTP API인지 나타냅니다. HttpOnly 쿠키에 영향을 미칩니다.
  • secure - boolean - url에서 자동 감지 - "Secure" API인지 나타냅니다. currentUrl이 https: 또는 wss:로 시작하면 기본값은 true이고, 그렇지 않으면 false입니다.
  • now - Date - 기본값 new Date() - 쿠키의 생성/액세스 시간에 사용할 값입니다.
  • ignoreError - boolean - 기본값 false - 구문 분석 오류 및 잘못된 도메인과 같은 것을 조용히 무시합니다. Store 오류는 이 옵션으로 무시되지 않습니다.

RFC에 따라, 쿠키 문자열에 "Domain=" 매개변수가 없거나 (Cookie 객체에서 .domain이 null인 경우) .hostOnly 속성이 설정됩니다. 이 경우 .domain 속성은 currentUrl의 정규화된 호스트 이름으로 설정됩니다. 이 쿠키를 일치시키려면 정확한 호스트 이름 일치가 필요합니다 (일반적인 domainMatch가 아님).

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

setCookie의 동기 버전입니다. 동기 저장소(예: 기본 MemoryCookieStore)에서만 작동합니다.

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

현재 url에 대한 Cookie 헤더로 보낼 수 있는 쿠키 목록을 검색합니다.

오류가 발생하면 err로 콜백에 전달되고, 그렇지 않으면 Cookie 객체의 Array가 전달됩니다. 배열은 {sort:false} 옵션이 제공되지 않는 한 cookieCompare()로 정렬됩니다.

options 객체는 생략할 수 있으며 다음과 같은 속성을 가질 수 있습니다:

  • http - boolean - 기본값 true - HTTP인지 비HTTP API인지 나타냅니다. HttpOnly 쿠키에 영향을 미칩니다.
  • secure - boolean - url에서 자동 감지 - "Secure" API인지 나타냅니다. currentUrl이 https: 또는 wss:로 시작하면 기본값은 true이고, 그렇지 않으면 false입니다.
  • now - Date - 기본값 new Date() - 쿠키의 생성/액세스 시간에 사용할 값입니다.
  • expire - boolean - 기본값 true - 쿠키의 만료 시간 확인을 수행하고 만료된 쿠키를 저장소에서 비동기적으로 제거합니다. false를 사용하면 만료된 쿠키를 반환하고 저장소에서 제거하지 않습니다 (잠재적으로 Set-Cookie 헤더를 재생하는 데 유용함).
  • allPaths - boolean - 기본값 false - true인 경우 경로별로 쿠키를 범위 지정하지 않습니다. 기본값은 RFC 호환 경로 범위 지정을 사용합니다. 참고: 기본 저장소(기본 MemoryCookieStore는 지원함)에서 지원되지 않을 수 있습니다.

반환된 쿠키의 .lastAccessed 속성이 업데이트됩니다.

.getCookiesSync(currentUrl, [{options}])

getCookies의 동기 버전입니다. 동기 저장소(예: 기본 MemoryCookieStore)에서만 작동합니다.

.getCookieString(...)

.getCookies()와 동일한 옵션을 허용하지만 배열 대신 Cookie 헤더에 적합한 문자열을 콜백에 전달합니다. 단순히 Cookie 배열을 .cookieString()으로 매핑합니다.

.getCookieStringSync(...)

getCookieString의 동기 버전입니다. 동기 저장소(예: 기본 MemoryCookieStore)에서만 작동합니다.

.getSetCookieStrings(...)

Set-Cookie 헤더에 적합한 문자열 배열을 반환합니다. .getCookies()와 동일한 옵션을 허용합니다. 단순히 쿠키 배열을 .toString()으로 매핑합니다.

.getSetCookieStringsSync(...)

getSetCookieStrings의 동기 버전입니다. 동기 저장소(예: 기본 MemoryCookieStore)에서만 작동합니다.

.serialize(cb(err,serializedObject))

기본 저장소가 .getAllCookies를 지원하는 경우 Jar를 직렬화합니다.

참고: 사용자 정의 Cookie 속성은 폐기됩니다. 속성을 직렬화하려면 속성 이름을 Cookie.serializableProperties 배열에 추가하세요.

[직렬화 형식]을 참조하십시오.

.serializeSync()

.serialize의 동기 버전

.toJSON()

JSON.stringify(cookiejar)의 편의를 위한 .serializeSync()의 별칭입니다.

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

새로운 Jar가 생성되고 직렬화된 쿠키가 기본 저장소에 추가됩니다. 각 Cookie는 직렬화에 나타나는 순서대로 store.putCookie를 통해 추가됩니다.

store 인수는 선택 사항이지만 Store의 인스턴스여야 합니다. 기본적으로 MemoryCookieStore의 새 인스턴스가 생성됩니다.

편의상 serialized가 문자열인 경우 먼저 JSON.parse를 통해 전달됩니다. 이로 인해 오류가 발생하면 콜백에 전달됩니다.

CookieJar.deserializeSync(serialized, [store])

.deserialize의 동기 버전입니다. 참고: 이 기능이 작동하려면 store가 동기식이어야 합니다.

CookieJar.fromJSON(string)

Cookie.fromJSON()과의 일관성을 위한 .deserializeSync의 별칭입니다.

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

이 jar의 깊은 복제본을 생성합니다. 원본을 수정해도 복제본에 영향을 미치지 않으며 그 반대도 마찬가지입니다.

store 인수는 선택 사항이지만 Store의 인스턴스여야 합니다. 기본적으로 MemoryCookieStore의 새 인스턴스가 생성됩니다. 소스가 .getAllCookies()를 구현하고 대상이 .putCookie()를 구현하는 한 저장소 유형 간 전송이 지원됩니다.

.cloneSync([store])

.clone의 동기 버전으로, 새로운 CookieJar 인스턴스를 반환합니다.

store 인수는 선택 사항이지만 지정된 경우 동기 Store 인스턴스여야 합니다. 전달되지 않으면 MemoryCookieStore의 새 인스턴스가 사용됩니다.

_소스_와 _대상_은 모두 동기 Store여야 합니다. 하나 또는 둘 다 비동기 저장소인 경우 대신 .clone을 사용하십시오. MemoryCookieStore는 동기식 및 비동기식 API 호출을 모두 지원합니다.

.removeAllCookies(cb(err))

Jar에서 모든 쿠키를 제거합니다.

이는 tough-cookie 버전 2.5의 새로운 하위 호환 기능이므로 모든 Store가 이를 효율적으로 구현하는 것은 아닙니다. removeAllCookies를 구현하지 않는 Store의 경우 대체 방법은 getAllCookies 후에 removeCookie를 호출하는 것입니다. getAllCookies가 실패하거나 Store에 구현되지 않은 경우 해당 오류가 반환됩니다. 하나 이상의 removeCookie 호출이 실패하면 첫 번째 오류만 반환됩니다.

.removeAllCookiesSync()

.removeAllCookies()의 동기 버전

Store

CookieJar 저장소의 기본 클래스입니다. tough.Store로 사용 가능합니다.

Store API

각 CookieJar 인스턴스의 저장 모델은 사용자 정의 구현으로 대체될 수 있습니다. 기본값은 lib/memstore.js 파일에서 찾을 수 있는 MemoryCookieStore입니다. API는 비동기 저장소를 허용하기 위해 continuation-passing 스타일을 사용합니다.

Store는 기본 Store 클래스에서 상속해야 하며, 이는 require('tough-cookie').Store로 사용할 수 있습니다.

Store는 기본적으로 비동기식이지만, store.synchronous가 true로 설정된 경우 포함된 CookieJar의 *Sync 메서드를 사용할 수 있습니다 (그러나 continuation-passing 스타일

모든 domain 매개변수는 호출 전에 정규화됩니다.

쿠키 저장소는 다음 메서드를 모두 가지고 있어야 합니다.

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

지정된 도메인, 경로 및 키(일명 이름)로 쿠키를 검색합니다. RFC는 정확히 하나의 이러한 쿠키가 저장소에 존재해야 한다고 명시합니다. 저장소가 버전 관리를 사용하는 경우 최신/최신 쿠키가 반환되어야 함을 의미합니다.

콜백은 오류와 결과 Cookie 객체를 받습니다. 쿠키가 없으면 null이 전달되어야 합니다 (즉, 오류가 아님).

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

지정된 도메인 및 경로와 일치하는 쿠키를 찾습니다. 이것은 대부분 위의 cookiejar.getCookies() 컨텍스트에서 호출됩니다.

쿠키가 없으면 콜백에 빈 배열이 전달되어야 합니다.

결과 목록은 RFC(domain-match, path-match, http-only-flag, secure-flag, expiry 등)에 따라 현재 요청에 대한 적용 가능성이 확인되므로 이 메서드를 구현할 때 낙관적 검색 알고리즘을 사용해도 괜찮습니다. 그러나 사용된 검색 알고리즘은 확인해야 할 양을 제한하기 위해 domainMatch() 도메인과 pathMatch() 경로를 수행하는 쿠키를 찾으려고 시도해야 합니다.

버전 0.9.12부터 위의 cookiejar.getCookies()에 대한 allPaths 옵션은 여기서 경로가 null이 되도록 합니다. 경로가 null인 경우 path-matching을 수행해서는 안 됩니다 (즉, domain-matching만).

store.putCookie(cookie, cb(err))

저장소에 새 쿠키를 추가합니다. 구현은 동일한 .domain, .path 및 .key 속성을 가진 기존 쿠키를 대체해야 합니다. 구현의 특성에 따라 fetchCookie와 putCookie 호출 사이에 중복 putCookie가 발생할 수 있습니다.

cookie 객체는 수정되어서는 안 됩니다. 호출자는 이미 .creation 및 .lastAccessed 속성을 업데이트했습니다.

쿠키를 저장할 수 없으면 오류를 전달하십시오.

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

기존 쿠키를 업데이트합니다. 구현은 동일한 domain, .path 및 .key를 가진 쿠키에 대해 .value를 업데이트해야 합니다. 구현은 저장소의 이전 값이 oldCookie와 동일한지 확인해야 합니다. 충돌을 해결하는 방법은 저장소에 달려 있습니다.

.lastAccessed 속성은 두 객체 간에 항상 다릅니다 (JavaScript의 시계로 가능한 정밀도까지). .creation과 .creationIndex는 모두 동일함이 보장됩니다. Store는 자동 삭제를 위해 쿠키가 선택되는 방식(예: 가장 최근에 사용되지 않음, 이는 Store가 구현해야 함)에 영향을 미치는 비용으로 .lastAccessed 변경을 무시하거나 연기할 수 있습니다.

Store는 새 쿠키를 저장하는 대신 저장소에서 쿠키의 .value를 변경하는 것을 최적화하려고 할 수 있습니다. 구현이 이 메서드를 정의하지 않으면 putCookie(newCookie,cb)를 호출하는 스텁이 store 객체에 추가됩니다.

newCookie와 oldCookie 객체는 수정되어서는 안 됩니다.

newCookie를 저장할 수 없으면 오류를 전달하십시오.

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

저장소에서 쿠키를 제거합니다 (고유성 제약 조건에 대한 findCookie 메모 참조).

쿠키가 존재하지 않으면 구현은 오류를 전달해서는 안 됩니다. 기존 쿠키를 제거하지 못한 경우에만 오류를 전달하십시오.

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

저장소에서 일치하는 쿠키를 제거합니다. path 매개변수는 선택 사항이며, 누락된 경우 도메인의 모든 경로를 제거해야 함을 의미합니다.

기존 쿠키 제거에 실패한 경우에만 오류를 전달하십시오.

store.removeAllCookies(cb(err))

선택 사항. 저장소에서 모든 쿠키를 제거합니다.

하나 이상의 쿠키를 제거할 수 없으면 오류를 전달하십시오.

참고: tough-cookie 버전 2.5의 새로운 메서드이므로 모든 Store가 이를 구현하는 것은 아니며, 일부 Store는 구현하지 않기로 선택할 수 있습니다.

store.getAllCookies(cb(err, cookies))

선택 사항. jar.serialize() 중에 모든 쿠키의 Array를 생성합니다. 배열의 항목은 실제 Cookie 객체이거나 [직렬화 형식] 데이터 구조를 가진 일반 Object일 수 있습니다.

쿠키는 compareCookies()를 통해 정렬을 유지하기 위해 생성 순서대로 반환되어야 합니다. 참고로 MemoryCookieStore는 내부적으로 실제 Cookie 객체를 사용하므로 .creationIndex로 정렬합니다. 쿠키를 생성 순서대로 반환하지 않으면 생성 시간별로 정렬되지만 정밀도는 1ms에 불과합니다. 자세한 내용은 compareCookies를 참조하십시오.

검색이 실패하면 오류를 전달하십시오.

참고: 기술적 한계로 인해 모든 Store가 이를 구현할 수 있는 것은 아니므로 선택 사항입니다.

MemoryCookieStore

Store에서 상속됩니다.

기본적으로 사용되는 메모리 내 CookieJar 동기 저장소 구현입니다. 동기 구현임에도 불구하고 CookieJar API의 동기 및 비동기 형식 모두에서 사용할 수 있습니다. 직렬화, getAllCookies 및 removeAllCookies를 지원합니다.

커뮤니티 쿠키 저장소

커뮤니티에서 작성 및 유지 관리하는 일부 Store 구현입니다. 공식적이지 않으며 보증하지 않지만 살펴보는 데 관심이 있을 수 있습니다:

  • db-cookie-store: SQLite 기반 데이터베이스를 포함한 SQL
  • file-cookie-store: 디스크의 Netscape 쿠키 파일 형식
  • redis-cookie-store: Redis
  • tough-cookie-filestore: 디스크의 JSON
  • tough-cookie-web-storage-store: DOM localStorage 및 sessionStorage

직렬화 형식

참고: 사용자 정의 Cookie 속성을 직렬화하려면 속성 이름을 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:~
# 저작권 및 라이선스

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.
도구 다운로드