不少WEB開發語言爲了防止瀏覽器禁止了cookie而沒法識別用戶,容許在URL中攜帶sessionid,這樣雖然方便,但卻有可能引發釣魚的安全漏洞。瀏覽器
圖示:安全
說明: 服務器
讓咱們對上圖的步驟進行詳細說明: cookie
1. 黑客用本身的賬號登陸,假設登陸頁面是:http://www.abc.com/login.jsp session
2. 服務器返回登陸成功。 jsp
3. 黑客從cookie中查看本身的sessionid,好比是1234 測試
4. 黑客把帶本身sessionid的地址發送給通常用戶。http://www.abc.com/login.jsp;jsessionid=1234(不一樣的語言帶sessionid的方式不同,着是jsp的方式) 3d
5. 用戶在黑客給的地址中用本身的賬號進行登陸,登陸成功。(這個時候用戶登陸的信息就會覆蓋黑客以前的登陸信息,並且2我的用的是同1個sessionid) 6. 黑客刷新頁面,看到的帳戶信息就是用戶的信息了,而不是以前黑客本身賬號的信息。orm
防治: blog
要防止這種問題,其實也很簡單,只要在用戶登陸時重置session(session.invalidate()方法),而後把登陸信息保存到新的session中。
後語:
可能你跟我同樣,剛開始看到這個時候,就本身去測試到底能不能釣魚成功,通過個人測試是能夠成功的,但測試過程當中須要注意下面幾個問題:
1. 要注意你使用的語言是如何在URL中帶sessionid。(我測試的時候開始在URL中使用大寫的jsessionid,致使一直不起效)
2. 要http://www.abc.com/login.jsp;jsessionid=1234頁面登陸表單的action也帶上了jsessionid,否則也沒用。對於這個問題你可能以爲若是login.jsp表單的action是寫死,而不是讀取當前URL的, 可能就不會出現這個釣魚問題。這隻能防住1個方向。黑客能夠作1個和login.jsp如出一轍的頁面(好比http://www.abc1.com/login.jsp),而後把這個地址發個客戶,而這個地址中的表單這樣寫就能夠: <form action="http://www.abc.com/login.jsp;jsessionid=1234" ....