HTTP 쿠키란?

HTTP 쿠키는 서버가 사용자의 웹 브라우저에 보내는 작은 데이터 조각입니다. 그런 다음 브라우저는 쿠키를 저장하고 이후 요청과 함께 동일한 서버로 다시 보낼 수 있습니다.

쿠키는 일반적으로 두 개의 HTTP 요청이 동일한 브라우저/사용자로부터 오는지 알려주는 데 사용됩니다. 따라서 세션 관리, 추적 및 정도는 덜한 개인화를 위해

클라이언트의 일반 데이터 저장을 위해 더 현대적인 API가 있습니다.

서버와 클라이언트 간에 쿠키가 전송되는 방식



클라이언트(브라우저)와 서버가 HTTP 호출(GET, POST 등)과 통신할 때 호출에는 콘텐츠가 포함되거나 bodyheaders

헤더에는 현재 전송 중인 요청 또는 응답에 대한 많은 정보가 포함되어 있습니다. content type , cache controluser 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!')
});


cookiesRequest 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 BrancoUnsplash의 사진

좋은 웹페이지 즐겨찾기