0
点赞
收藏
分享

微信扫一扫

通过post或ajax请求后response header 设置cookie未更新值


概述

有时间在做验证码校验时,服务端会存放当前浏览器用户的临时验证码信息,比如通过session、cookie等方式进行存放,在校验的时候也方便使用和更新等。

通过post或ajax请求后response header 设置cookie未更新值_X-Frame-Options

 

问题描述

系统是通过cookie进行存放到浏览器端,cookie的值是经过加密,用户是看不到未加密的数据,当用户第一次进入页面,图形验证码会生成一个code,同时往浏览器写入cookie;用户可以多次点击重新生成验证码,相应的cookie值也要进行更新替换,否则校验的时候无法通过。

前端是通过ajax请求进行更新图形验证码,服务端同时也会创建一个新的对象,cookie的key都是一样的,只是值不同。

用户反馈验证一直不通过,经过开发排查,发现每次post请求后,浏览器里的cookie值没有更新,一直是第一次的内容,除非是每次都刷新页面,cookie值才会更新。

开始怀疑是不是云盾做了安全策略,导致cookie未更新,毕竟云盾会做缓存机制。先排除云盾问题,通过host配置回源IP,发现还是没有变化,浏览器一直是使用的google浏览器,response headers返回的cookie已经变化了,就是无法写入到浏览器。

截图如下:

通过post或ajax请求后response header 设置cookie未更新值_X-Frame-Options_02

 

因为最近一直是没有更新代码,本地和测试环境都正常,线上有异常,查看cookie创建代码,把path的值设置“/”,结果还是一样不能更新。

通过post或ajax请求后response header 设置cookie未更新值_cookie_03

第二天突然脑袋想了一下,会不会是浏览器的问题,就换一个火狐测试看看,结果有2个cookie值,其中一个是会更新,另一个不会更新,如下图:

通过post或ajax请求后response header 设置cookie未更新值_cookie_04

解决方案

两个cookie对比,发现除了值不一样,剩下的就是path不同,但是代码已经设置一样了,结果返回的时候还是一样被强制加上:Path:"/   X-Frame-Options: deny"

想了一下,什么时候加上这个参数,应该是前段时间扫描漏洞和安全的时候,要求加上限制导致的,就在web.config里找一下配置,发现如下代码:

<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="deny" />
<remove name="Server" />
<remove name="X-AspNet-Version" />
<remove name="X-AspNetMvc-Version" />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>

在customHeaders里多加了一行配置:<add name="X-Frame-Options" value="deny" />

会强制把path附上值,导致不一致,因此在google浏览器等,不会覆盖之前的值,个别浏览器是可以看到会有2个cookie,容易排查问题。

删除<add name="X-Frame-Options" value="deny" />即可。

举报

相关推荐

0 条评论