cookie中出现重名的键

问题

Http请求中出现了两个同名Cookie,导致服务端获取到的错误的信息

原理

Cookie不仅仅有名字和值两个属性,还有域(domain)、路径(path)等属性。其中,不同的域、不同的路径下可以存在同样名字的cookie。一般我们设置cookie的方法是用一个同样名字、一个值。这时就一定要搞清楚你要设置的cookie的域和路径,否则就会产生问题中的情况。

再次复习一下Cookie的属性

属性 描述
name Cookie的名称,Cookie一旦创建,名称便不可更改
value Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码
maxAge Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为-1。
secure 该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false。
path Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。
domain 可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”。
comment 该Cookie的用处说明,浏览器显示Cookie信息的时候显示该说明。
version Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范

Cookie的有效期

Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。

如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。下面代码中的Cookie信息将永远有效。

如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写到Cookie文件中。Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为-1。

如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除,

response对象提供的Cookie操作方法只有一个添加操作add(Cookie cookie)。

要想修改Cookie只能使用一个同名的Cookie来覆盖原来的Cookie,达到修改的目的。删除时只需要把maxAge修改为0即可。

从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期。

Cookie的修改、删除

Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。

如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。

注意:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。

Cookie的域名

Cookie是不可跨域名的。域名www.google.com颁发的Cookie不会被提交到域名www.baidu.com去。这是由Cookie的隐私安全机制决定的。隐私安全机制能够禁止网站非法获取其他网站的Cookie。

正常情况下,同一个一级域名下的两个二级域名如www.baidu.com和images.baidu.com也不能交互使用Cookie,因为二者的域名并不严格相同。如果想所有baidu.com名下的二级域名都可以使用该Cookie,需要设置Cookie的domain参数为.baidu.com

读者可以修改本机C:\WINDOWS\system32\drivers\etc下的hosts文件来配置多个临时域名来验证domain属性。

注意:domain参数必须以点(".")开始。另外,name相同但domain不同的两个Cookie是两个不同的Cookie。如果想要两个域名完全不同的网站共有Cookie,可以生成两个Cookie,domain属性分别为两个域名,输出到客户端。

Cookie的路径

domain属性决定运行访问Cookie的域名,而path属性决定允许访问Cookie的路径(ContextPath)。例如,如果只允许/sessionWeb/下的程序使用Cookie,可以这么写cookie.setPath("/session/")。

设置为“/”时允许所有路径使用Cookie。path属性需要使用符号“/”结尾。name相同但domain相同的两个Cookie也是两个不同的Cookie。

页面只能获取它属于的Path的Cookie。例如/session/test/a.jsp不能获取到路径为/session/abc/的Cookie。

Cookie的安全属性

HTTP协议不仅是无状态的,而且是不安全的。使用HTTP协议的数据不经过任何加密就直接在网络上传播,有被截获的可能。使用HTTP协议传输很机密的内容是一种隐患。如果不希望Cookie在HTTP等非安全协议中传输,可以设置Cookie的secure属性为true。浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie。设置secure属性为true的代码是cookie.setSecure(true);

secure属性并不能对Cookie内容加密,因而不能保证绝对的安全性。如果需要高安全性,需要在程序中对Cookie内容加密、解密,以防泄密。

JavaScript操作Cookie

Cookie是保存在浏览器端的,因此浏览器具有操作Cookie的先决条件。浏览器可以使用脚本程序如JavaScript或者VBScript等操作Cookie。这里以JavaScript为例介绍常用的Cookie操作。例如下面的代码会输出本页面所有的Cookie。

由于JavaScript能够任意地读写Cookie,给网站带来安全隐患,W3C标准的浏览器会阻止JavaScript读写任何不属于自己网站的Cookie。换句话说,A网站的JavaScript程序读写B网站的Cookie不会有任何结果。

部分浏览器支持设置HttpOnly属性,如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《JavaScript基础教程(第8版)》循序渐进地讲述了JavaScript及相关的CSS、DOM、Ajax、jQuery等技术。书从JavaScript语言基础开始,分别讨论了图像、框架、浏览器窗口、表单、正则表达式、用户事件和cookie,并在上一版的基础上新增了两章,讲述jQuery框架的基础知识。本书不仅介绍了基础知识和使用方法,也深入探讨了JavaScript应用示例。  《JavaScript基础教程(第8版)》适合有志于从事Web开发和Web设计的初学者阅读,也是高校相关课程理想的教材。 第1章 了解JavaScript 1 1.1 JavaScript是什么 1 1.2 JavaScript不是Java 2 1.3 JavaScript的起源 3 1.4 JavaScript可以做什么 3 1.5 JavaScript不能做什么 3 1.6 Ajax是什么 4 1.7 组合式(snap-together)语言 5 1.7.1 对象 5 1.7.2 属性 6 1.7.3 方法 6 1.7.4 将对象、属性和方法组合在一起 6 1.7.5 DOM简介 7 1.8 处理事件 7 1.9 值和变量 8 1.9.1 操作符 8 1.9.2 赋值和比较 9 1.9.3 比较 9 1.10 编写对JavaScript友好的HTML 10 1.10.1 结构、表现和行为 10 1.10.2 div和span 10 1.10.3 class和id 11 1.11 要使用什么工具 12 第2章 开始 13 2.1 将脚本放在哪 13 2.2 关于函数 14 2.3 使用外部脚本 15 2.4 在脚本添加注释 17 2.5 向用户发出警告 18 2.6 确认用户的选择 19 2.7 提示用户 21 2.8 用链接对用户进行重定向 22 2.9 使用JavaScript改进链接 25 2.10 使用多级条件 28 2.11 处理错误 30 第3章 第一个Web应用程序 33 3.1 用循环进行重复操作 33 3.2 将值传递给函数 37 3.3 探测对象 39 3.4 处理数组 40 3.5 处理有返回值的函数 42 3.6 更新数组 43 3.7 使用do/while循环 44 3.8 以多种方式调用脚本 46 3.9 组合使用JavaScript和CSS 47 3.10 检查状态 50 3.11 处理字符串数组 55 第4章 处理图像 59 4.1 创建翻转器 59 4.2 创建更有效的翻转器 61 4.3 构建三状态翻转器 64 4.4 由链接触发翻转器 66 4.5 让多个链接触发一个翻转器 68 4.6 处理多个翻转器 71 4.7 创建循环的广告条 74 4.8 在循环广告条添加链接 76 4.9 建立循环式幻灯片 78 4.10 显示随机图像 80 4.11 随机开始循环显示图像 81 第5章 窗口与框架 83 5.1 防止页面显示在框架 83 5.2 设置目标 84 5.3 用JavaScript加载iframe 86 5.4 Iframes的使用 87 5.5 创建动态iframe 89 5.6 在文档之间共享函数 90 5.7 打开新窗口 92 5.8 为窗口加载不同的内容 96 第6章 表单处理 98 6.1 选择并转移导航菜单 99 6.2 动态地改变菜单 102 6.3 建立必须填写的字段 104 6.4 根据其他字段对字段进行检查 109 6.5 标识有问题的字段 111 6.6 准备进行表单验证 113 6.7 处理单选按钮 117 6.8 用一个字段设置另一个字段 119 6.9 检验Zip编码 122 6.10 验证电子邮件地址 126 第7章 表单和正则表达式 131 7.1 用正则表达式验证电子邮件地址 131 7.2 验证文件名 136 7.3 提取字符串 139 7.4 格式化字符串 141 7.5 对字符串进行格式化和排序 144 7.6 对字符串进行格式化和验证 146 7.7 使用正则表达式替换元素 148 第8章 处理事件 151 8.1 处理窗口事件 151 8.1.1 onload1事件 151 8.1.2 onunload事件 154 8.1.3 onresize事件 154 8.1.4 onmove事件 156 8.1.5 onabort事件 156 8.1.6 onerror事件 156 8.1.7 onfocus事件 156 8.1.8 onblur事件 157 8.2 处理鼠标事件 158 8.2.1 onmousedown事件 158 8.2.2 onmouseup事件 161 8.2.3 onmousemove事件 161 8.2.4 onmouseover事件 163 8.2.5 onmouseout事件 163 8.2.6 ondblclick事件 164 8.2.7 onclick事件 165 8.3 表单事件处理 165 8.3.1 onsubmit事件 165 8.3.2 onreset事件 165 8.3.3 onchange事件 166 8.3.4 onselect事件 166 8.3.5 onclick事件 166 8.3.6 onblur事件 166 8.3.7 onfocus事件 168 8.4 事件处理 169 8.4.1 onkeydown事件 169 8.4.2 onkeyup事件 172 8.4.3 onkeypress事件 172 第9章 JavaScript和cookie 173 9.1 建立第一个cookie 173 9.2 读取cookie 176 9.3 显示cookie 177 9.4 使用cookie作为计数器 178 9.5 删除cookie 180 9.6 处理多个cookie 182 9.7 显示新内容提醒信息 184 第10章 对象和DOM 189 10.1 关于节点操纵 189 10.1.1 DOM 2和W3C 189 10.1.2 DOM 2术语 189 10.1.3 DOM 3 190 10.2 添加节点 191 10.3 删除节点 192 10.4 删除特定的节点 194 10.5 插入节点 197 10.6 替换节点 199 10.7 用对象字面值编写代码 202 第11章 建立动态页面 206 11.1 在网页上显示当前日期 206 11.2 处理周的日期 208 11.3 根据时间对消息进行定制 209 11.4 根据时区显示日期 210 11.5 把24小时制转换为12小时制 213 11.6 创建倒数计数器 216 11.7 隐藏和显示层 219 11.8 移动文档的对象 221 11.9 日期方法 223 第12章 JavaScript应用示例 225 12.1 使用可折叠菜单 225 12.2 添加下拉菜单 228 12.3 改进下拉菜单 230 12.4 带说明的幻灯片 233 12.5 一个无聊的姓名生成器 236 12.6 柱状图生成器 240 12.7 样式表切换器 246 第13章 Ajax简介 253 13.1 Ajax的定义 253 13.2 读取服务器数据 255 13.3 解析服务器数据 261 13.4 刷新服务器数据 266 13.5 从服务器获得数据 267 13.6 用Ajax预览链接 270 13.7 自动补全表单字段 273 第14章 工具包、框架和库 279 14.1 添加jQuery 280 14.2 使用jQuery更新页面 282 14.3 使用jQuery交互 282 14.4 交互与更新 284 14.5 自动完成字段 287 第15章 用jQuery设计页面 289 15.1 突出显示新元素 289 15.2 创建可折叠菜单 292 15.3 创建更漂亮的对话框 294 15.4 条纹表格 298 15.5 表格排序 301 第16章 基于jQuery的应用 306 16.1 以jQuery为基础 306 16.2 使用ThemeRoller定制外观 307 16.3 在页面添加日历 309 16.4 拖放元素 313 16.5 使用jQuery处理外部数据 316 16.6 使用jQuery插件 322 第17章 bookmarklet 328 17.1 第一个bookmarklet 328 17.2 改变页面的背景颜色 333 17.3 改变页面样式 334 17.4 查询单词 335 17.5 查看图像 337 17.6 显示ISO Latin字符 339 17.7 将RGB值转换为十六进制 340 17.8 对值进行转换 341 17.9 bookmarklet计算器 342 17.10 缩短URL 344 17.11 检验页面 344 17.12 通过电子邮件发送页面 345 17.13 改变页面大小 346
COOKIE出现SQL注入是一种安全漏洞,攻击者通过在COOKIE注入恶意的SQL代码来获取、修改或删除数据库的数据。注入的原理与其他SQL注入类型相似,只是参数是通过COOKIE方式提交的。一旦成功注入,攻击者可以执行任意的SQL查询或命令。 为了防范COOKIE的SQL注入攻击,有以下几点建议: 1. 不要在COOKIE保存敏感信息,尤其是没有经过加密的或容易被解密的信息。 2. 对从客户端获取的COOKIE信息进行严格校验,确保其合法性。 3. 记录非法的COOKIE信息,并进行分析,以便对系统进行进一步的攻击防范。 4. 使用SSL/TLS来传递COOKIE信息,确保信息的安全传输。 5. 指明数据提交方式,并对通过COOKIE方式提交的数据进行过滤和防注入处理。 需要注意的是,以上措施只是一些基本的防范方法,对于COOKIE的SQL注入还需要综合考虑其他的安全措施,如输入验证、参数化查询等。123 #### 引用[.reference_title] - *1* [SQL注入-cookie注入](https://blog.csdn.net/LJH1999ZN/article/details/122884176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* *3* [SQL注入Cookie注入](https://blog.csdn.net/weixin_43765321/article/details/123250398)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值