js 设置的 cookie php 可以读吧?反过来亦然

2015-04-07 23:28:35 +08:00
 tanteng

如题,没试过,感觉理论上可以,谁讲一下这个问题

2280 次点击
所在节点    JavaScript
7 条回复
kchum
2015-04-07 23:46:58 +08:00
试一下都出来了,可以。。
h4x3rotab
2015-04-08 00:16:06 +08:00
问题不在于能否互相访问,而是理解其中原理。php是运行在服务器端的,他的唯一作用就是接受http请求,执行php脚本,生成html页面,回复给浏览器。浏览器收到了服务器发来的html页面之后会呈现出来,同时也会执行js脚本。

那么cookies是怎么同步的?浏览器内每一个域名都会保存一些cookies,值是由你设定的,js可以对浏览器内的cookies读写访问。但是呢,每一次浏览器访问服务器的时候,php都会接收到一个http请求,这个请求内会包含浏览器内存储的cookies,所以说php在生成html页面的时候,也可以取得用户这边的cookies。在php生成html页面的时候,同时会生成一段http响应,响应中就包含了一个叫Set-cookie的属性,浏览器收到这个响应就会去修改内部的cookies。

所以说本身cookies是只存在于浏览器的一段文本,可以由js访问。只有在发生http请求的时候,这段cookies才会传递给服务器,伺候服务器也可以返回Set-cookie来修改浏览器的cookies。这不能叫做互相读取,而是一种传递机制。
ine181x
2015-04-08 00:16:09 +08:00
服务器端可以设置httponly的cookie,js不能访问
NewYear
2015-04-08 00:21:52 +08:00
错错错!!!!

至少不完全正确,Cookie有一个属性叫httponly,说简单点就是不是服务器专用。JS想读取到!做梦!在IE6上面都是做梦!读都读不到,还想操(作),就是做梦!

比如常见的维持session会话用的cookie phpsessionid,aspsessionid。

所以很多讲XSS偷cookie的,都喜欢说可以偷走这个会话id,其实是偷不走的。除非程序员傻了,直接用cookie验证而不是用sessionid,用cookie也就算了,竟然不打httponly标记!
NewYear
2015-04-08 00:26:11 +08:00
@kchum cookie有httponly属性的读取不了。通常服务器用来维持session会话的sessionid就是httponly的,那些说漏洞的老是喜欢说XSS漏洞可以偷走这个sessionid,其实是偷不走的

@h4x3rotab @ine181x 一看就是和我一样的RSS用户,回复时间几乎一致,而我是打字慢花掉了时间
NewYear
2015-04-08 00:31:16 +08:00
顺便说明下,对此怀疑又想测试又怕麻烦的,请移步google首页,从隐私模式打开,看开发者工具,可以很明显的看到有2个cookie,一个就打了httponly标记,所以js只能读取到其中一个,不能读另一个,顺便送上读取全部cookie的js代码
document.cookie
kchum
2015-04-08 11:13:14 +08:00
@NewYear 学习,谢谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/182218

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX