問題: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 內容,以便持續攻擊。