我在一台机器上运行了两个HTTP服务.我只是想知道他们是否共享他们的cookie或者浏览器是否区分了两个服务器套接字.
我在两个不同的域中有两个webapps WebApp1和WebApp2.
我知道这听起来很奇怪,因为cookie特定于某个域,我们无法从不同的域访问它们; 我听说过CROSS-DOMAIN cookie可以在多个webapps之间共享.如何使用CROSS-DOMAIN cookie实现此要求?
注意:我正在尝试使用J2EE webapps
我一定错过了一些关于cookie的基本知识.在本地主机上,当我设置在服务器端的cookie,并明确指定域为localhost(或.localhost).某些浏览器似乎没有接受cookie.
Firefox 3.5:我在Firebug中检查了HTTP请求.我看到的是:
Set-Cookie:
    name=value;
    domain=localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/
或者(当我将域设置为.localhost时):
Set-Cookie:
    name=value;
    domain=.localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/
在任何一种情况下,都不会存储cookie.
IE8:我没有使用任何额外的工具,但cookie似乎也没有存储,因为它不会在后续请求中发回.
Opera 9.64: localhost和.localhost都工作,但是当我检查Preferences中的cookie列表时,域名设置为localhost.local,即使它列在localhost下(在列表分组中).
Safari 4: localhost和.localhost都可以工作,但它们在Preferences中始终列为.localhost.另一方面,没有显式域的cookie,它显示为localhost(无点).
localhost有什么问题?由于存在这么多的不一致,必须有一些涉及localhost的特殊规则.另外,我不完全清楚为什么域名必须以点为前缀?RFC 2109明确声明:
Domain属性的值不包含嵌入点或不以点开头.
为什么?该文件表明它必须对安全做些什么.我不得不承认我没有阅读整个规范(稍后可能会这样做),但听起来有点奇怪.基于此,在localhost上设置cookie是不可能的.
从我到目前为止所学到的,令牌的目的是防止攻击者伪造表单提交.
例如,如果某个网站的表单中添加了添加到购物车中的商品,并且攻击者可能会使用您不想要的商品向您的购物车发送垃圾邮件.
这是有道理的,因为购物车表单可能有多个有效输入,攻击者必须做的就是知道网站正在销售的项目.
我理解令牌如何工作并在这种情况下增加安全性,因为它们确保用户实际填写并按下表格中的"提交"按钮以添加到购物车中的每个项目.
但是,令牌是否为用户登录表单添加了任何安全性,这需要用户名和密码?
由于用户名和密码非常独特,攻击者必须知道这两种情况才能使登录伪造工作(即使你没有设置令牌),如果攻击者已经知道这一点,他就可以登录网站本人.更不用说,使用户登录的CSRF攻击无论如何都没有任何实际意义.
我对CSRF攻击和令牌的理解是否正确?我怀疑它们对用户登录表单没用吗?
我正在使用Axios从客户端向Express.js服务器发送请求.
我在客户端设置了一个cookie,我想从所有Axios请求中读取该cookie,而不是手动添加它们来手动请求.
这是我的客户端请求示例:
axios.get(`some api url`).then(response => ...
我试图通过在Express.js服务器中使用这些属性来访问标头或cookie:
req.headers
req.cookies
它们都不包含任何cookie.我正在使用cookie解析器中间件:
app.use(cookieParser())
如何让Axios自动在请求中发送cookie?
编辑:
我在客户端设置cookie如下:
import cookieClient from 'react-cookie'
...
let cookie = cookieClient.load('cookie-name')
if(cookie === undefined){
      axios.get('path/to/my/cookie/api').then(response => {
        if(response.status == 200){
          cookieClient.save('cookie-name', response.data, {path:'/'})
        }
      })
    }
...
虽然它也使用Axios,但它与问题无关.一旦设置了cookie,我只想在我的所有请求中嵌入cookie.
根据带有凭据的请求,Firefox只会发送凭据以及跨域帖子
invocation.withCredentials = "true"; 
设置...但似乎jQuery的Ajax API没有为此提供任何机制.
有没有我错过的东西?还有其他方法可以做到吗?
我有通过快递设置cookie的问题.我正在使用Este.js dev stack,我尝试在API身份验证/login路由中设置cookie .这是我在/api/v1/auth/login路线中使用的代码
res.cookie('token', jwt.token, {expires: new Date(Date.now() + 9999999)});
res.status(200).send({user, token: jwt.token});
在src/server/main.js我已经注册cookie-parser为第一个中间件
app.use(cookieParser());
/api/v1/auth/login路由的响应头包含      
Set-Cookie:token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ.. 
但cookie没有保存在浏览器中(document.cookie是空的,Resources - Cookies在develepoers工具中的选项卡也是空的):(
编辑: 
我发现当我打电话给这个/api/v1/auth/login(没有电话res.send或res.json)
res.cookie('token', jwt.token, {expires: new Date(Date.now() + 9999999), httpOnly: false});
next();
然后设置cookie并且响应头已设置X-Powered-By:Este.js...这esteMiddleware在expres前端渲染部分中设置.
我用的时候 res.send
res.cookie('token', jwt.token, {expires: new Date(Date.now() + 9999999), httpOnly: false}).send({user, token: jwt.token});`
next();
然后我得到错误Can't set …
我刚开始反应,我有点迷失.我正在尝试创建登录页面并发出http post请求.现在我只是想让任何类型的HTTP请求工作,所以我正在使用请求bin,我在npm包的文档中找到了这个基本操作(https://www.npmjs.com/package/redux -react-fetch):
export function updateTicket(ticketId, type, value){
  return {
    type: 'updateArticle',
    url: `http://requestb.in/1l9aqbo1`,
    body: {
      article_id: ticketId,
      title: 'New Title'
    },
    then: 'updateTicketFinished'
  }
}
所以,在写完一个动作之后,我该怎么办?我如何实际让我的应用程序调用并使用该操作?npm包的文档提到了在我的商店中设置状态的东西,我需要先设置一些东西吗?
我使用 axios 从 ReactJS 客户端向 Node.js 服务器发送请求,如下所示。
import axios from 'axios';
const apiClient = axios.create({
  withCredentials: true,
  baseURL: 'http://localhost:8080'
});
async function(payload) {
  try {
    debugger;
    let result = await apiClient.post('/auth/signup/', payload);
    debugger;
    return result;
  } catch (error) {
    debugger;
    throw error;
  }
}
Node.js 端点在响应中设置一个 cookie,如下所示。
const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser')
const cors = require('cors');
const jwt = require('jsonwebtoken');
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));
router.use(cors({ origin: 'http://localhost:3000', credentials: true, exposedHeaders: ['Set-Cookie', 'Date', …如何设置withCredentials=true到   fetch其回报的承诺.以下是正确的:
fetch(url,{
   method:'post',
   headers,
   withCredentials: true
});
我认为MDN文档谈到了关于http请求的所有内容,除非这一点:withCredentials 
cookies ×6
cross-domain ×3
javascript ×3
node.js ×3
axios ×2
express ×2
reactjs ×2
csrf ×1
ecmascript-6 ×1
fetch-api ×1
http ×1
jquery ×1
jsx ×1
php ×1
react-redux ×1
redux ×1
security ×1
setcookie ×1
token ×1