记录一个今天在练习nodejs的时候遇到的一个跨域无法存取cookie的问题 我想实现的功能就是:在登录页面输值进行登录之后可以把用户的信息存入到cookie中,判断用户是否在登录状态。...image.png 然后输入数据发送请求后,在浏览器Network响应头信息中也能明显的找到对应请求中设置了cookie信息。...image.png 于是纠结了大半天,最后找出原因是因为跨域而造成的,这是浏览器的同源策略导致的问题:不允许JS访问跨域的Cookie,所以我们没办法存取值。...crossDomain: true:跨域请求为true如果你想强制跨域请求(如JSONP形式)同一域,设置crossDomain为true。...","http://localhost:8089/"); 以上两步是大多数博客的解决方案:最好的还是自己再本机地址访问,避免跨域存取cookie值,就不会出现这么棘手的问题了。
0x01 介绍 跨子域: 因为浏览器同源策略的关系,只有同协议、域名、端口的页面才能进行交互,否则会被浏览器拒绝。...现有两个页面,分别为111.example.com和example.com,两个页面是不同的域名,不能进行交互,但是可以在111.example.com使用以下代码设置同域,这样即可实现一个跨子域的交互...document.domain="example.com" HttpOnly: 简单来说就是给Cookie增加一层保护,document.cookie不会返回设置了HttpOnly的Cookie。...0x02 漏洞细节 首先通过F12查看得知关键的Cookie sscode设置了HttpOnly。 ? 那么这个sscode肯定是登录之后服务器下发给客户端的,那么走一遍登录流程看看有没有缺陷。...后面用document.domain查看登录成功页面所属于的域为example.com,那就意味着可以通过任意一个子域的Xss来跨子域获取受HttpOnly保护的sscode。
最简单的方法是服务端将响就头设置成Access-Control-Allow-Origin:域名,如果客户端发送请求时,不需要携带cookie等信息,可以设置成Access-Control-Allow-Origin...但是一般的网站,都需要向后端发送cookie来进行身份验证,此时,服务器还需向响应头设置Access-Control-Allow-Credentials:true,表示跨域时,允许cookie添加到请求中...设置Access-Control-Allow-Credentials:true后,要将Access-Control-Allow-Origin指定到具体的域,否则cookie不会带到客户端,例如设置成Access-Control-Allow-Origin...我在项目中,引用了fetch的polyfill,直接用fetch来发送ajax请求,需要将credentials设置成include,表示允许跨越传递cookie,不要将credentials设置成same-origin...,如果设置成same-origin,只会在同源的时候发送cookie。
前言 在正式开始分享我的内容前,我要极力推荐大家去看下Linus Särud和Bo0oM发表的两篇,关于Safari特殊字符处理被滥用,导致XSS或Cookie注入的研究文章。...Safari就不同,如果我们尝试加载相同的域,它实际上会发送请求并加载页面: 我们可以使用各种字符,甚至是不可打印字符: ? CORS配置 设置浏览器允许访问的服务器的头信息的白名单。...与示例1相同 - 即允许从xxe.sh和任意子域进行跨域访问。 这个正则表达式与示例1非常相似,但其极易被攻击者利用并窃取数据。 而问题的根本就出在.*.? 分解: ?...实现从xxe.sh,所有子域以及这些域上的任何端口进行跨域访问。 下面是正则表达式的分解: ? 这个API无法访问前面例子中的域,并且其他常见的绕过方法也无济于事。.... - a-z A-Z 0-9的域名都是不会被信任的,但是,在字符串“xxe.sh”之后有空格的域名的情况又如何呢? ? 我们看到它是被信任的,但是任何普通浏览器都不支持这样的域。
Cookie safari bugs 因为 mac os(safari,iphone(h5),ipad 等) 安全策略的问题,在设置安全 cookie 的时候,在验证图形验证码的时候,会出现储存不了 cookie...通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。...Cookie主要用于以下三个方面: 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置、主题等) 浏览器行为跟踪(如跟踪分析用户行为等) cookie 的作用域...例如,如果设置 Domain=mozilla.org,则Cookie也包含在子域名中(如developer.mozilla.org)。...相同站点cookie允许服务器通过断言特定cookie应仅与同一可注册域发起的请求一起发送来减轻CSRF和信息泄漏攻击的风险。
简而言之,正常的 Cookie 规范说,如果为特定域设置了 Cookie,它将在浏览器发出的每个请求时带上Cookie发送到该域。...为此,当浏览器位于您自己的域中时,它引入了同站点 cookie 的概念,而当浏览器在不同域中导航但向您的域发送请求时,它引入了跨站点 cookie 的概念。...为了向后兼容,相同站点 cookie 的默认设置并没有改变以前的行为。您必须选择加入该新功能并明确设置您的 cookie SameSite=Lax 或 SameSite=Strict 使其更安全。...登录 IdP 时,它会为您的用户设置一个会话 cookie,该 cookie 来自 IdP 域。在身份验证流程结束时,来自不同域的应用程序会收到某种访问令牌,这些令牌通常不会很长时间。...当 Safari 遇到无效值时,它会将 SameSite=Strict 当作已指定的设置,并且不会将会话 cookie 发送到 IdP。
也就是说如果文件1来自http://kalan.com,而文件2来自于 https://kalan.com 他们就不算是同源。那如果是子域名呢?...有些跨来源请求不会发生 preflight,而有些请求则会,MDN上写的清清楚楚: 必须是 GET,HEAD,POST 中的一种方法 除了 user-agent 自动设置的 header 和特定的...附带身份验证的请求 cookie 并不能跨域传递,也就是说不同 origin 来的 cookie 没办法互相传递及存取,不然就天下大乱了。...服务器回传Set-Cookie 服务器回传Set-Cookie ? 没有写入到浏览器中 没有写入浏览器中 在一般情况下如果再使用 b 域的 API,cookie 是不会自动被送出去的。...在Safari 中有时会开启“阻止所有Cookie”这一选项,这在调试时会让你尝到不少苦头。
如果您已将该cookie_samesite属性设置为disabled,请警告您的 Grafana 用户避免使用尚未默认设置Lax为SameSitecookie 属性的浏览器(最值得注意的是Safari)...如果该cookie_samesite属性设置为lax(默认)或strict,您应该仔细检查子域的安全性。...现在将 HTTP 服务器绑定到不同的端口(此处为 8081)localhost ,以便为相同的恶意页面提供服务。...如果你这样做了,你会对数量之多的组织感到惊讶——甚至是那些有积极的漏洞赏金计划的组织——它们非常满足于忍受一些 XSS 漏洞或潜在的子域接管一些晦涩难懂的东西——而且可能不——范围——子域。...因为我们是在 Grafana 实例的 Web 源上下文中执行攻击,所以攻击是成功的,但我们知道,如果从不同(即使是同一站点)源执行相同的攻击,事情就不会那么简单了. 为什么?
整个Web体系建立在同源策略之上,浏览器是这一策略的具体实现。该策略禁止来自不同域的JavaScript脚本与另一个域的资源进行交互。...二、非同源的限制 由于浏览器的同源策略限制,存在以下跨域问题: 无法访问来自不同源网页的Cookie、LocalStorage和IndexedDB。这意味着不同源的网页之间不能共享存储数据。...因为浏览器是通过document.domain属性来检查两个页面是否同源,因此只要通过设置相同的document.domain,两个页面就可以共享Cookie(此方案仅限主域相同,子域不同的跨域应用场景..., 'http://test1.com'); 4.父窗口接收来自子窗口的消息: // 在父窗口中监听来自子窗口的消息 window.addEventListener('message', function...cookie }, crossDomain: true, // 会让请求头中包含跨域的额外信息,但不会含cookie }); 3、Vue-resource Vue.http.options.credentials
众所周知,HTTP 协议是无状态的协议,如果你在同一个客户端向服务器发送多次请求,服务器不会知道这些请求来自同一客户端。...我们再打开已经完全禁用了第三方 Cookie 的 Safari,发现只剩下 .tmall.com 这个域下的 Cookie 了。 ?...然而这个改动并不会造成太大的影响,它只是给各大网站提了一个信号,因为你只需要把你想要发送的 Cookie 的属性手动设置为 none 即可: ? ?...我们发现 _ga 、_gid 这两个 Cookie 正是设置在其自己域下面的。...浏览器在绘制图形时,会调用操作系统的绘图接口,即便使用 Cavans 绘制相同的元素,但是由于系统的差别,不同浏览器使用了不同的图形处理引擎、不同的图片导出选项、不同的默认压缩级别、对抗锯齿、次像素渲染等算法也不同
只有当协议、端口、域名都相同的页面,则两个页面具有相同的源。...只要网站的协议protocol、 主机host、 端口号port 这三个中的任意一个不同,网站间的数据请求与传输便构成了跨域调用,会受到同源策略的限制。...Access-Control-Allow-Headers: X-PINGOTHER, Content-Type Access-Control-Max-Age: 86400 跨域请求默认不会携带Cookie...避免该错误,可以在Safari浏览器中勾选 开发菜单 => 停用跨域限制。或者只能使用服务器端转存的方式实现,因为Safari浏览器默认只支持CORS跨域请求。...而且所用的协议,端口都要一致,否则无法利用 document.domain 进行跨域,所以只能跨子域 在根域范围内,允许把 domain 属性的值设置为它的上一级域。
一级域名相同,二级域名不同的情况下,可以设置document.domain相同,就可以共享cookie 以iframe和window.open方法打开的窗口为例,有三种方法可以跨域: url后#片段识别符携带传递参数...node中间件实现跨域代理,原理大致与nginx相同,都是通过启一个代理服务器,实现数据的转发,也可以通过设置cookieDomainRewrite参数修改响应头中cookie中域名,实现当前域的cookie...此方案仅限主域相同,子域不同的跨域应用场景。...三个页面,不同域之间利用iframe的location.hash传值,相同域之间直接js访问来通信。...document.domain+iframe适合主域名相同,子域名不同的跨域请求。postMessage、websocket都是HTML5新特性,兼容性不是很好,只适用于主流浏览器和IE10+。
更详细的说明可以看下表: 特别注意两点: 第一,如果是协议和端口造成的跨域问题“前台”是无能为力的, 第二:在跨域问题上,域仅仅是通过“URL的首部”来识别而不会去尝试判断相同的ip地址对应着两个域或两个域是否在同一个....example.com/b.html,那么只要设置相同的document.domain,两个网页就可以共享Cookie。...var allCookie = document.cookie; 两个网页一级域名必须相同,只是二级域名不同。...两个网页设置相同的document.domain 服务器也可以在设置Cookie的时候,指定Cookie的所属域名为一级域名,比如.example.com。...window.parent.document.body // 报错 如果两个窗口一级域名相同,只是二级域名不同,那么设置上一节介绍的document.domain属性,就可以规避同源政策,拿到DOM。
它们在相同的域上,但是子域名不同。 同样,浏览器也拒绝此cookie: ?...Cookie 是由 Web 服务器或应用程序的代码设置的,对于浏览器来说无关紧要。 重要的是 cookie 来自哪个域。...下面是对另一个自动附加cookie的子域的请求 ?...中看到的值完全匹配,刚会回传 cookie 如果请求主机是与我在“Domain”中看到的值完全匹配的子域,则将回传 cookie 如果请求主机是sub.example.dev之类的子域,包含在example.dev...为了在不同来源的Fetch请求中包含cookie,我们必须提credentials 标志(默认情况下,它是相同来源)。
上的Web应用被准许访问来自不同源服务器上的指定的资源。...AJAX请求的时候加上发送cookie的头; xhr.withCredentials = true; //浏览器不同可能在未设置为true默认会上传cookie 同时Cookie依然遵循同源政策,只有用服务器域名设置的...Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下Cookie。...案例3:利用特殊符号和浏览器的结合去绕过子域名的检查 描述:这个API端点返回用户的私有信息比如全名、电子邮件地址要滥用这种错误配置,以便我们可以执行攻击,比如泄漏用户的私有信息我们需要声明一个废弃的子域...(子域接管),或者在现有的子域中找到一个XSS。
它们在相同的域上,但是子域名不同。...Cookie 是由 Web 服务器或应用程序的代码设置的,对于浏览器来说无关紧要。 重要的是 cookie 来自哪个域。...这是一个附加了Cookie的 www 子域请求: 下面是对另一个自动附加cookie的子域的请求 Cookies 和公共后缀列表 查看 https://serene-bastion-01422.herokuapp.com...中看到的值完全匹配,刚会回传 cookie 如果请求主机是与我在“Domain”中看到的值完全匹配的子域,则将回传 cookie 如果请求主机是sub.example.dev之类的子域,包含在example.dev...你可以通过查看 “Network” 标签中的请求来确认,没有发送此类Cookie: 为了在不同来源的Fetch请求中包含cookie,我们必须提credentials 标志(默认情况下,它是相同来源)
cookie前言 网络早期最大的问题之一是如何管理状态。简而言之,服务器无法知道两个请求是否来自同一个浏览器。当时最简单的方法是在请求时,在页面中插入一些参数,并在下一个请求中传回参数。...cookie的存储是以域名形式进行区分的,不同的域下存储的cookie是独立的。...我们可以设置cookie生效的域(当前设置cookie所在域的子域),也就是说,我们能够操作的cookie是当前域以及当前域下的所有子域 一个域名下存放的cookie的个数是有限制的,不同的浏览器存放的个数不一样...注意 如果只设置一个值,那么算cookie中的value; 设置的两个cookie,key值如果设置的相同,下面的也会把上面的覆盖。...不同: localStorage、sessionStorage localStorage只要在相同的协议、相同的主机名、相同的端口下,就能读取/修改到同一份localStorage数据。
跨域简介 当两个域具有相同的协议(如http), 相同的端口(如80),相同的host,那么我们就可以认为它们是相同的域(协议,域名,端口都必须相同)。...JSONP 缺点:只能使用get 请求 document.domain 仅限主域相同,子域不同的跨域应用场景。...或者,服务器要求设置Cookie,浏览器也不会处理。 但是,如果省略withCredentials设置,有的浏览器还是会一起发送Cookie。这时,可以显式关闭withCredentials。...同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie...c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE,UPDATE") //允许跨域设置可以返回其他子段
通常,缓存可以通过存储数据来提高性能,从而可以更快后面相同数据的请求。例如,来自网络的缓存资源可以避免频繁的和服务器交互。缓存计算结果可以省去进行相同计算的时间。...注意:“站点”使用 “scheme://eTLD+1 ”识别,因此,如果请求来自不同的页面,但是它们具有相同的 scheme 和有效的 eTLD+1,则它们将使用相同的缓存分区。...尽管在上一个示例中加载了相同的图像,但是由于密钥不匹配,因此不会被缓存命中。 ?...Cache Key: { https://a.example, https://c.example, https://x.example/doge.png } 如果域包含子域或端口号怎么办?...由于密钥是基于 scheme://eTLD+1 创建的,因此将忽略子域和端口号。所以本次发生缓存命中。 ?
领取专属 10元无门槛券
手把手带您无忧上云