可以在节点客户端中访问HttpOnly cookie吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可以在节点客户端中访问HttpOnly cookie吗?相关的知识,希望对你有一定的参考价值。

我是节点的新手并经历了一些教程。我有一个运行此代码的简单节点服务器:

// SERVER CODE
const http = require('http');
const Cookies = require('cookies');
const port = 3000;

const requestHandler = (request, response) => {
  cookies = new Cookies(request, response);
  cookies.set("foo", "bar", { httpOnly: true });

  response.end('Hello Node.js Server!');
}

const server = http.createServer(requestHandler);

server.listen(port, (err) => {
  if (err) {
    return console.log('something bad happened', err);
  }

  console.log(`server is listening on ${port}`);
})

我有另一个试图访问此服务器的.js文件:

//CLIENT CODE
const http = require('http')

http.get('http://machine_name:3000', (
    console.log(res.headers['set-cookie']);
});

根据我的理解,客户端javascript无法提供httponly cookie。当我运行客户端代码时,我得到:

[ 'foo=bar; path=/; httponly' ]

这是正确的吗?我没有正确设置吗?我觉得这是一个错误,因为httponly属性意味着我不能通过Javascript访问它。

答案

你正在做的是以正确的方式做到这一点,你可以尝试使用浏览器。

如果您有一个包含以下内容的索引文件:

// index.js file
const http = require('http');
const Cookies = require('cookies');
const port = 3000;

const requestHandler = (request, response) => {
  cookies = new Cookies(request, response);
  cookies.set("foo", "bar", { httpOnly: true });

  response.end('Hello Node.js Server!');
}

const server = http.createServer(requestHandler);

server.listen(port, (err) => {
  if (err) {
    return console.log('something bad happened', err);
  }

  console.log(`server is listening on ${port}`);
})

执行命令时

node index.js

然后打开浏览器,打开控制台并执行以下操作

console.log( document.cookie ) // this not return your cookies

但是如果你有{httpOnly:false},你可以得到以下信息:

“其他饼干; foo =酒吧”

这是因为JavaScript在浏览器中使用的cookie多于在控制台中使用的cookie,如果激活了httpOnly标志,则可以100%确定没有JS脚本可以使用它。

Read more about cookies

以上是关于可以在节点客户端中访问HttpOnly cookie吗?的主要内容,如果未能解决你的问题,请参考以下文章

HttpOnly Cookie 怎么讲

Tomcat为Cookie设置HttpOnly属性

Javascript React 可以将 HttpOnly cookie 发送到服务器吗?

HttpOnly 与cookie安全

基于反应和节点 js 的应用程序中的 httponly cookie

从 HttpURLConnection 保存 Cookie(包括 !httponly 标志)和会话