问题:web
Http协议是一种无状态协议,但愿服务器能记录一些客户端信息的时候 那么咱们须要使用Cookie技术。数据库
什么是 Cookie?浏览器
Cookie 是一些小数据, 存储于你电脑(客户端)上的文本文件中。安全
当 web 服务器向浏览器发送 web 页面时,在链接关闭后,服务端不会记录用户的信息。服务器
Cookie 的做用就是用于解决 "如何记录客户端的用户信息":cookie
当用户访问 web 页面时,他的名字能够记录在 cookie 中。并发
在用户下一次访问该页面时,能够在 cookie 中读取用户访问记录。dom
Cookie的属性网站
name加密
Cookie的名称
value
名称所对应的值
path
path:www.abc.com/aa/bb
设置哪一些路径下的页面容许访问Cookie
domain
同源策略
domain= '.baidu.com'
全部以.baidu.com结尾的域名都可访问当前的cookie
expires/Max-Age
最大的生存时间/过时时间
0表示随着浏览器的关闭而关闭
正数 具体的时间 以后过时
负数 永不过时
secure
表示当前的cookie只能使用Https 去传输 必定程度上会相对安全一些
http
httponly=true 表示当前的cookie只能用于http或者https的传输 不能再js中操做
Size
cookie的大小
cookie的自己所能存储的数据大小通常为4kb
Js中使用Cookie
设置Cookie的值
function setCookie(cname,cvalue)
{
document.cookie = cname + "=" + cvalue ;
}
获取Cookie的值
function getCookie(cname)
{
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++)
{
var c = ca[i].trim();
if (c.indexOf(name)==0) return c.substring(name.length,c.length);
}
return "";
}
检测Cookie的值
function checkCookie()
{
var username=getCookie("username");
if (username!="")
{
alert("Welcome again " + username);
}
else
{
username = prompt("Please enter your name:","");
if (username!="" && username!=null)
{
setCookie("username",username,365);
}
}
}
JavaWeb中使用Cookie
Cookie可能会带来的麻烦
脚本攻击
尽管cookie没有病毒那么危险,但它仍包含了一些敏感信息:用户名,计算机名,使用的浏览器和曾经访问的网站。用户不但愿这些内容泄漏出去,尤为是当其中还包含有私人信息的时候。
这并不是危言耸听,一种名为跨站点脚本攻击(Cross site scripting)能够达到此目的。一般跨站点脚本攻击每每利用网站漏洞在网站页面中植入脚本代码或网站页面引用第三方法脚本代码,均存在跨站点脚本攻击的可能,在受到跨站点脚本攻击时,脚本指令将会读取当前站点的全部 Cookie 内容(已不存在 Cookie 做用域限制),而后经过某种方式将 Cookie 内容提交到指定的服务器(如:AJAX)。一旦 Cookie 落入攻击者手中,它将会重现其价值。
建议开发人员在向客户端 Cookie 输出敏感的内容时(譬如:该内容能识别用户身份):
(1)设置该 Cookie 不能被脚本读取,这样在必定程度上解决上述问题。
(2)对 Cookie 内容进行加密,在加密前嵌入时间戳,保证每次加密后的密文都不同(而且能够防止消息重放)。
(3)客户端请求时,每次或定时更新 Cookie 内容(即:基于第2小条,从新加密)
(4)每次向 Cookie 写入时间戳,数据库须要记录最后一次时间戳(防止 Cookie 篡改,或重放攻击)。
(5)客户端提交 Cookie 时,先解密而后校验时间戳,时间戳若小于数据数据库中记录,即意味发生攻击。
基于上述建议,即便 Cookie 被窃取,却因 Cookie 被随机更新,且内容无规律性,攻击者没法加以利用。另外利用了时间戳另外一大好处就是防止 Cookie 篡改或重放。
Cookie 窃取:搜集用户cookie并发给攻击者的黑客。攻击者将利用cookie信息经过合法手段进入用户账户。
Cookie 篡改:利用安全机制,攻击者加入代码从而改写 Cookie 内容,以便持续攻击。