服务端修改Cookie——跨域cookie发送机——通信加密——异或加密

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了服务端修改Cookie——跨域cookie发送机——通信加密——异或加密相关的知识,希望对你有一定的参考价值。

服务端修改Cookie

请求头xhr.setRequestHeader 设置发送给服务器一个cookie,在服务端修改后,在通过响应头自定义内容写入后返回。
此过程需要注意的是,这个发送cookie是以URI编码形式发送,所以要转码之后发送。

 xhr.setRequestHeader("Set-Cookie","niuniu")

这样服务器通过req.headers方法得到一个对象也就会收到这个请求头里的这一项,是一个数组类型

服务端修改Cookie机器

具体步骤:

  1. 请求头设置一个Set-Cookie:niuniu牛,注意这里有个汉字
  2. 也就是先把这个汉字转成url var str = encodeURIComponent("niuniu牛")
  3. niuniu%E7%89%9B
  4. 然后写入请求头 xhr.setRequestHeader("Set-Cookie",str)
  5. 在服务器中通过req.headers获取整个请求头的内容
  6. 在请求头对象中有了'set-cookie': [ 'niuniu%E7%89%9B' ]
  7. 在服务端通过对象的['set-cookie]获取这个值之后转码
  8. var str = decodeURIComponent(req.headers["set-cookie"]);
  9. 服务端不能直接修改设置Set-Cookie,可以通过自定义来实现;
"X-Set-Cookie": encodeURIComponent(str+"=阿牛"),
"Access-Control-Expose-Headers": ["X-Set-Cookie"]
  1. 在客户端单独获取到这个xhr.getResponseHeader("x-set-cookie")是个URL码
  2. 在转一下 console.log(decodeURIComponent(xhr.getResponseHeader("x-set-cookie")));
  3. 得到一个niuniu牛=阿牛
  4. 然后将这个手动插入:
var stry = decodeURIComponent(xhr.getResponseHeader("x-set-cookie"));
document.cookie = stry;

通信加密 send发送数据,会被截获


英文可以通过:二进制流数 ArrayBuffer来加密

var str = "ilove you";

/*客户端*/
//Uint8Array
var arr = str.split("").map(item=>item.charCodeAt(0)^255);
arr = new Uint8Array(arr)
xhr.send(arr);


/*服务器*/
data = ''
req.on("data", (_chunk) => 
	for(var i=0;i<_chunk.length;i++)
		data += String.fromCharCode(Number(_chunk[i])^255)
	
);

汉字加密服务端

function getData(req) 
    return new Promise(function (resolve, reject) 
        data = ''
        req.on("data", (_chunk) => 
            console.log(_chunk);
            for(var i=0;i<_chunk.length;i+=2)
            //16进制四个字节,字节倒序,前置补零
                var str="0x"+ _chunk[i+1].toString(16).padStart(2,0)+_chunk[i].toString(16).padStart(2,0);
                var num=parseInt(str,16)^0xFFFF;
                data+=String.fromCharCode(num);
            
        );
        req.on("end", () => 
            resolve(data)
        )
    )

汉字加密客户端Uint16Array

var str="我 爱 你"
var arr= str.split("").map(item=>item.charCodeAt(0)^0xFFFF);
arr=new Uint16Array(arr)
xhr.send(arr);

Blob 大二进制流数据
字符串
文档(html ,XML)
FormData

以上是关于服务端修改Cookie——跨域cookie发送机——通信加密——异或加密的主要内容,如果未能解决你的问题,请参考以下文章

简单设置,解决使用webpack前后端跨域发送cookie的问题

跨域身份验证

cookie机制&跨域问题

跨域请求cookie获取与设置问题

跨域后cookie怎么不能传递到客户端的浏览器

HTTP请求中token和cookie 区别