var http = require('http')
http.createServer(function (req, res) {
// 获得客户端的Cookie
var Cookies = {}
req.headers.cookie &&req.headers.cookie.split('').forEach(function( Cookie ) {
var parts = Cookie.split('=')
Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim()
})
console.log(Cookies)
// 向客户端设置一个Cookie
res.writeHead(200, {
'Set-Cookie': 'myCookie=test',
'Content-Type': 'text/plain'
})
res.end('Hello World\n')
}).listen(8000)
console.log('Server running at localhost')
cookie的几个属性:expire:cookie的生存期,默认是暂时存储
path:cookie的关联网页,默认是当前目录的网页或者当前目录下的字子目录
domain:设置共享cookie的域名(同一主域名下)切将path设为PATH='/'
secure属性:在https协议下生效,才会传递到服务器端,http协议不会传递。
HttpOnly属性:无法通过脚本程序(js)读取到cookie信息,有效防止XSS攻击。
安全性:出于安全方面的考虑,只有与创建 cookie 的页面处于同一个目录或在创建cookie页面的子目录下的网页才可以访问
同域情况:让这个设置的cookie 能被其他目录或者父级的目录访问的方法:
document.cookie = "userName = 独行冰海path=/"
相同主域不同二级域名的跨域情况:
document.cookie = "username=独行冰海path=/domain=baidu.com"
chrome限制js设置cookie,IE可在本地JS设置cookie
A站点通过script src标签的跨站请求B站点如果请求数据是img 则不会带cookie等数据
如果请求数据是一个get请求地址,则cookie会随请求发出(此时cookie是B站点cookie)
根据这个特性我们可以构造CSRF攻击
实验截图
Cookie限制:
(1)cookie个数限制
IE :原先为20个,后来升级为50个
Firefox: 50个
Opera:30个
Chrome:180个
Safari:无限制
当Cookie数超过限制数时浏览器的行为:IE和Opera会采用LRU算法将老的不常使用的Cookie清除掉,Firefox的行为是随机踢出某些Cookie的值。当然无论怎样的策略,还是尽量不要让Cookie数目超过浏览器所允许的范围。
(2) 浏览器所允许的每个Cookie的最大长度(localstorage为5M)
Firefox和Safari:4079字节
Opera:4096字节
IE:4095字节
(3) 服务器中Http请求头长度的限制。Cookie会被附在每次http请求头中传递给服务器,因此还会受到服务器请求头长度的影响。