HTTP 쿠키란?
쿠키는 일반적으로 두 개의 HTTP 요청이 동일한 브라우저/사용자로부터 오는지 알려주는 데 사용됩니다. 따라서 세션 관리, 추적 및 정도는 덜한 개인화를 위해
클라이언트의 일반 데이터 저장을 위해 더 현대적인 API가 있습니다.
서버와 클라이언트 간에 쿠키가 전송되는 방식
클라이언트(브라우저)와 서버가 HTTP 호출(GET, POST 등)과 통신할 때 호출에는 콘텐츠가 포함되거나 body 및 headers
헤더에는 현재 전송 중인 요청 또는 응답에 대한 많은 정보가 포함되어 있습니다. content type , cache control 및 user agent 과 같은 것입니다. 헤더는 클라이언트가 서버에 요청할 때와 서버가 응답할 때 모두 존재합니다.
쿠키는 또한 HTTP 헤더를 사용하여 설정되고 전송됩니다. 서버에서 쿠키 설정은 응답에 Set-Cookie header을 추가하여 수행됩니다. 그런 다음 브라우저는
Set-Cookie
헤더에서 서버가 보낸 값과 함께 Cookie 헤더를 동일한 도메인의 URL에 대해 수행할 모든 요청에 첨부합니다.Set-Cookie
에는 브라우저에서 쿠키를 처리하는 방법을 구성하는 데 사용할 수 있는 여러 선택적 속성이 있습니다. 여기에는 쿠키의 수명을 설정하는 데 사용할 수 있는 Max-Age
가 포함됩니다.Node.js 및 Express에서 쿠키 사용
Express.js에서 쿠키 설정은 cookie 에서 Response object 메서드를 호출하여 수행됩니다.
app.get('/', (req, res) => {
const value = "something";
res.cookie("somecookie", value, { maxAge: 1000 * 60 * 15 })
res.send('Hello World!')
});
cookies의 Request object 속성으로 쿠키를 읽을 수 있습니다. cookie-parser 미들웨어를 사용하면
cookies
는 브라우저에서 보낸 쿠키를 담고 있는 객체가 됩니다.var app = express()
app.use(cookieParser())
app.get('/', (req, res) => {
const value = req.cookies.somecookie;
res.send('Hello World!');
});
쿠키 보안
쿠키는 원래 쿠키를 설정한 도메인에 요청이 있을 때 브라우저에서 자동으로 전송됩니다. 이것은 정말 좋지만 보안 문제가 발생할 수 있습니다. 브라우저가 JavaScript에서 쿠키에 액세스하거나 안전하지 않은 연결을 통해 쿠키를 보내는 것을 허용하지 않습니다.
쿠키를 안전하게 만들려면
Set-Cookie
에 전달된 선택적 속성을 사용해야 합니다.Http만
Document.cookie
를 사용하여 쿠키에 대한 JavaScript 액세스를 금지합니다.안전한
HTTPS를 통해서만 쿠키를 보냅니다.
SameSite=엄격한 | 락스 | 없음
엄격: 동일한 사이트 요청에 대해서만 쿠키를 보냅니다.
Lax: 사이트 간 요청에 쿠키를 보내지 말고 링크를 사용하여 서버로 이동할 때 보냅니다.
없음: 항상 쿠키를 보냅니다.
만료=날짜
쿠키의 최대 수명을 HTTP 날짜 타임스탬프로 설정합니다.
클라이언트에서 JavaScript 액세스를 방지하기 위해 인증 토큰 또는 민감한 정보가 포함된 모든 쿠키에 대해 HttpOnly를 설정하는 것이 중요합니다.
SameSite는 일부Cross-Site Request Forgery 공격을 방지하는 데 사용할 수 있습니다. Strict로 설정하면 이상적이지 않을 수 있습니다. 그러면 사용자가 귀하의 사이트 링크에서 탐색하는 경우 유효한 세션이 있더라도 로그인해야 하기 때문입니다. Lax로 설정하면 쿠키만 전송됩니다when a user is navigating to your site SameSite는 설정되지 않은 경우 기본적으로 Lax로 설정됩니다.
Expires가 설정되어 있지 않으면 브라우저 세션이 종료될 때 쿠키가 삭제됩니다.
Express.js를 사용하면 Response 개체의
cookie
메서드에 전달된 옵션 개체를 사용하여 이를 설정할 수 있습니다.app.get('/', (req, res) => {
const value = "something";
res.cookie("somecookie", value, {
httpOnly: true,
secure: true,
sameSite: "strict",
expires: date
})
res.send('Hello World!')
});
쿠키를 사용하여 사용자 세션을 생성하는 경우 express-session과 같은 미들웨어 사용을 고려하십시오.
참고문헌
MDN on Cookies
Christina Branco에 Unsplash의 사진
Reference
이 문제에 관하여(HTTP 쿠키란?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/juhanakristian/what-are-http-cookies-5b3g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)