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


    服务端修改Cookie

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

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

    这样服务器通过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
    • 2
    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;
    
    • 1
    • 2

    在这里插入图片描述

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

    在这里插入图片描述
    英文可以通过:二进制流数 ArrayBuffer来加密

    var str = "ilove you";
    
    • 1

    /*客户端*/
    //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)
    	}
    });
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    汉字加密服务端

    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)
            })
        })
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    汉字加密客户端Uint16Array

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

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

  • 相关阅读:
    WPF项目-按着键盘方向键,移动格子盒子效果
    数据中心典型测试场景浅析
    postgres创建递归视图
    域名解析中的A记录和CNAME什么意思
    动手学习深度学习——锚框
    v-model 简单理解
    灰狼优化算法(Matlab完整代码实现)
    一款适用于勒索病毒应急演练加解密工具
    Java中的值传递与引用传递 含面试题
    【Python】PaddleOCR文字识别国产之光 从安装到pycharm中测试 (保姆级图文)
  • 原文地址:https://blog.csdn.net/m0_46672781/article/details/126234878