『壹』 如何實現網站登錄的密碼驗證過程
問題1.把用戶用戶名和加密後的密碼存入資料庫,用戶需要驗證時,將用戶輸入的密碼加密,與資料庫中的加密密碼比較。
問題2.md5演算法
具體演算法原理:
對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。
在MD5演算法中,首先需要對信息進行填充,使其位長對512求余的結果等於448。因此,信息的位長(Bits Length)將被擴展至N*512+448,N為一個非負整數,N可以是零。填充的方法如下,在信息的後面填充一個1和無數個0,直到滿足上面的條件時才停止用0對信息的填充。然後,在這個結果後面附加一個以64位二進製表示的填充前信息長度。經過這兩步的處理,信息的位長=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足後面處理中對信息長度的要求。總體流程如下圖所示,
表示第i個分組,每次的運算都由前一輪的128位結果值和第i塊512bit值進行運算。初始的128位值為初試鏈接變數,這些參數用於第一輪的運算,以大端位元組序來表示,他們分別為:A=0x01234567,B=0x89ABCDEF,C=0xFEDCBA98,D=0x76543210。
MD5演算法的整體流程圖[1]
每一分組的演算法流程如下:
第一分組需要將上面四個鏈接變數復制到另外四個變數中:A到a,B到b,C到c,D到d。從第二分組開始的變數為上一分組的運算結果。
主循環有四輪(MD4隻有三輪),每輪循環都很相似。第一輪進行16次操作。每次操作對a、b、c和d中的其中三個作一次非線性函數運算,然後將所得結果加上第四個變數,文本的一個子分組和一個常數。再將所得結果向左環移一個不定的數,並加上a、b、c或d中之一。最後用該結果取代a、b、c或d中之一。
以下是每次操作中用到的四個非線性函數(每輪一個)。
F(X,Y,Z) =(X&Y)|((~X)&Z)
G(X,Y,Z) =(X&Z)|(Y&(~Z))
H(X,Y,Z) =X^Y^Z
I(X,Y,Z)=Y^(X|(~Z))
(&;是與,|是或,~是非,^是異或)
這四個函數的說明:如果X、Y和Z的對應位是獨立和均勻的,那麼結果的每一位也應是獨立和均勻的。
F是一個逐位運算的函數。即,如果X,那麼Y,否則Z。函數H是逐位奇偶操作符。
假設Mj表示消息的第j個子分組(從0到15),常數ti是4294967296*abs(sin(i))的整數部分,i取值從1到64,單位是弧度。(4294967296等於2的32次方)
FF(a,b,c,d,Mj,s,ti)表示 a = b + ((a + F(b,c,d) + Mj + ti) << s)
GG(a,b,c,d,Mj,s,ti)表示 a = b + ((a + G(b,c,d) + Mj + ti) << s)
HH(a,b,c,d,Mj,s,ti)表示 a = b + ((a + H(b,c,d) + Mj + ti) << s)
Ⅱ(a,b,c,d,Mj,s,ti)表示 a = b + ((a + I(b,c,d) + Mj + ti) << s)
這四輪(64步)是:
第一輪
FF(a,b,c,d,M0,7,0xd76aa478)
FF(d,a,b,c,M1,12,0xe8c7b756)
FF(c,d,a,b,M2,17,0x242070db)
FF(b,c,d,a,M3,22,0xc1bdceee)
FF(a,b,c,d,M4,7,0xf57c0faf)
FF(d,a,b,c,M5,12,0x4787c62a)
FF(c,d,a,b,M6,17,0xa8304613)
FF(b,c,d,a,M7,22,0xfd469501)
FF(a,b,c,d,M8,7,0x698098d8)
FF(d,a,b,c,M9,12,0x8b44f7af)
FF(c,d,a,b,M10,17,0xffff5bb1)
FF(b,c,d,a,M11,22,0x895cd7be)
FF(a,b,c,d,M12,7,0x6b901122)
FF(d,a,b,c,M13,12,0xfd987193)
FF(c,d,a,b,M14,17,0xa679438e)
FF(b,c,d,a,M15,22,0x49b40821)
第二輪
GG(a,b,c,d,M1,5,0xf61e2562)
GG(d,a,b,c,M6,9,0xc040b340)
GG(c,d,a,b,M11,14,0x265e5a51)
GG(b,c,d,a,M0,20,0xe9b6c7aa)
GG(a,b,c,d,M5,5,0xd62f105d)
GG(d,a,b,c,M10,9,0x02441453)
GG(c,d,a,b,M15,14,0xd8a1e681)
GG(b,c,d,a,M4,20,0xe7d3fbc8)
GG(a,b,c,d,M9,5,0x21e1cde6)
GG(d,a,b,c,M14,9,0xc33707d6)
GG(c,d,a,b,M3,14,0xf4d50d87)
GG(b,c,d,a,M8,20,0x455a14ed)
GG(a,b,c,d,M13,5,0xa9e3e905)
GG(d,a,b,c,M2,9,0xfcefa3f8)
GG(c,d,a,b,M7,14,0x676f02d9)
GG(b,c,d,a,M12,20,0x8d2a4c8a)
第三輪
HH(a,b,c,d,M5,4,0xfffa3942)
HH(d,a,b,c,M8,11,0x8771f681)
HH(c,d,a,b,M11,16,0x6d9d6122)
HH(b,c,d,a,M14,23,0xfde5380c)
HH(a,b,c,d,M1,4,0xa4beea44)
HH(d,a,b,c,M4,11,0x4bdecfa9)
HH(c,d,a,b,M7,16,0xf6bb4b60)
HH(b,c,d,a,M10,23,0xbebfbc70)
HH(a,b,c,d,M13,4,0x289b7ec6)
HH(d,a,b,c,M0,11,0xeaa127fa)
HH(c,d,a,b,M3,16,0xd4ef3085)
HH(b,c,d,a,M6,23,0x04881d05)
HH(a,b,c,d,M9,4,0xd9d4d039)
HH(d,a,b,c,M12,11,0xe6db99e5)
HH(c,d,a,b,M15,16,0x1fa27cf8)
HH(b,c,d,a,M2,23,0xc4ac5665)
第四輪
Ⅱ(a,b,c,d,M0,6,0xf4292244)
Ⅱ(d,a,b,c,M7,10,0x432aff97)
Ⅱ(c,d,a,b,M14,15,0xab9423a7)
Ⅱ(b,c,d,a,M5,21,0xfc93a039)
Ⅱ(a,b,c,d,M12,6,0x655b59c3)
Ⅱ(d,a,b,c,M3,10,0x8f0ccc92)
Ⅱ(c,d,a,b,M10,15,0xffeff47d)
Ⅱ(b,c,d,a,M1,21,0x85845dd1)
Ⅱ(a,b,c,d,M8,6,0x6fa87e4f)
Ⅱ(d,a,b,c,M15,10,0xfe2ce6e0)
Ⅱ(c,d,a,b,M6,15,0xa3014314)
Ⅱ(b,c,d,a,M13,21,0x4e0811a1)
Ⅱ(a,b,c,d,M4,6,0xf7537e82)
Ⅱ(d,a,b,c,M11,10,0xbd3af235)
Ⅱ(c,d,a,b,M2,15,0x2ad7d2bb)
Ⅱ(b,c,d,a,M9,21,0xeb86d391)
所有這些完成之後,將A、B、C、D分別加上a、b、c、d。然後用下一分組數據繼續運行演算法,最後的輸出是A、B、C和D的級聯。
當你按照我上面所說的方法實現MD5演算法以後,你可以用以下幾個信息對你做出來的程序作一個簡單的測試,看看程序有沒有錯誤。
MD5 ("") =
MD5 ("a") =
MD5 ("abc") =
MD5 ("message digest") =
MD5 ("abcdefghijklmnopqrstuvwxyz") =
MD5 ("") =
『貳』 java web網頁登錄功能原理(最好有代碼❳
頁面將登錄名
密碼傳到後台,後台將登錄名密碼進行查詢資料庫比對,如果正確就將用戶保存到session中做個標記。下次訪問時
如果session中有用戶就說明登錄了,沒有就需要重新登錄。
『叄』 黑客利用Openssl心血漏洞攻擊以http開頭的網站獲取用戶登陸密碼是通過什麼原理辦到的
通過該漏洞可以獲取http頭信息,http頭信息中包含cookie,部分未使用httponly的網站通過cookie即可實現登錄
『肆』 記住密碼的原理是什麼
應該是保存在Cookie里,session是放在伺服器的內存里的。在用戶關閉了網頁窗口後,session就清空了。而Cookie是保存在用戶的IE臨時文件夾中的,再次登錄時,讀取其中的值傳給伺服器。
session是放在伺服器的內存,Cookie是保存在用戶端。以下是從網上搜到的相關內容,希望對你有用:
一、cookie機制和session機制的區別
*************************************************************************************
具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。
同時我們也看到,由於才伺服器端保持狀態的方案在客戶端也需要保存一個標識,所以session
機制可能需要藉助於cookie機制來達到保存標識的目的,但實際上還有其他選擇
*************************************************************************************
二、會話cookie和持久cookie的區別
*************************************************************************************
如果不設置過期時間,則表示這個cookie生命周期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽會話期的cookie被稱為會話cookie。會話cookie一般不保存在硬碟上而是保存在內存里。
如果設置了過期時間,瀏覽器就會把cookie保存到硬碟上,關閉後再次打開瀏覽器,這些cookie依然有效直到超過設定的過期時間。
存儲在硬碟上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存的cookie,不同的瀏覽器有不同的處理方式。
*************************************************************************************
三、如何利用實現自動登錄
*************************************************************************************
當用戶在某個網站注冊後,就會收到一個惟一用戶ID的cookie。客戶後來重新連接時,這個
用戶ID會自動返回,伺服器對它進行檢查,確定它是否為注冊用戶且選擇了自動登錄,從而使用戶務需給出明確的用戶名和密碼,就可以訪問伺服器上的資源。
*************************************************************************************
四、如何根據用戶的愛好定製站點
*************************************************************************************
網站可以使用cookie記錄用戶的意願。對於簡單的設置,網站可以直接將頁面的設置存儲在cookie中完成定製。然而對於更復雜的定製,網站只需僅將一個惟一的標識符發送給用戶,由伺服器端的資料庫存儲每個標識符對應的頁面設置。
*************************************************************************************
五、cookie的發送
*************************************************************************************
1.創建Cookie對象
2.設置最大時效
3.將Cookie放入到HTTP響應報頭
如果你創建了一個cookie,並將他發送到瀏覽器,默認情況下它是一個會話級別的cookie:存儲在瀏覽器的內存中,用戶退出瀏覽器之後被刪除。如果你希望瀏覽器將該cookie存儲在磁碟上,則
需要使用maxAge,並給出一個以秒為單位的時間。將最大時效設為0則是命令瀏覽器刪除該cookie。
發送cookie需要使用HttpServletResponse的addCookie方法,將cookie插入到一個Set-Cookie HTTP請求報頭中。由於這個方法並不修改任何之前指定的Set-Cookie報頭,而是創建新的報頭,因此我們將這個方法稱為是addCookie,而非setCookie。同樣要記住響應報頭必須在任何文檔內容發送到客戶端之前設置。
六、cookie的讀取
*************************************************************************************
1.調用request.getCookie
要獲取有瀏覽器發送來的cookie,需要調用HttpServletRequest的getCookies方法,這個調用返回Cookie對象的數組,對應由HTTP請求中Cookie報頭輸入的值。
2.對數組進行循環,調用每個cookie的getName方法,直到找到感興趣的cookie為止
cookie與你的主機(域)相關,而非你的servlet或JSP頁面。因而,盡管你的servlet可能只發送了單個cookie,你也可能會得到許多不相關的cookie。
例如:
String cookieName = 「userID」;
Cookie cookies[] = request.getCookies();
if (cookies!=null){
for(int i=0;i<cookies.length;i++){
Cookie cookie = cookies[i];
if (cookieName.equals(cookie.getName())){
doSomethingWith(cookie.getValue());
}
}
}
*************************************************************************************
七、如何使用cookie檢測初訪者
*************************************************************************************
A.調用HttpServletRequest.getCookies()獲取Cookie數組
B.在循環中檢索指定名字的cookie是否存在以及對應的值是否正確
C.如果是則退出循環並設置區別標識
D.根據區別標識判斷用戶是否為初訪者從而進行不同的操作
*************************************************************************************
八、使用cookie檢測初訪者的常見錯誤
*************************************************************************************
不能僅僅因為cookie數組中不存在在特定的數據項就認為用戶是個初訪者。如果cookie數組為null,客戶可能是一個初訪者,也可能是由於用戶將cookie刪除或禁用造成的結果。
但是,如果數組非null,也不過是顯示客戶曾經到過你的網站或域,並不能說明他們曾經訪問過你的servlet。其它servlet、JSP頁面以及非Java Web應用都可以設置cookie,依據路徑的設置,其中的任何cookie都有可能返回給用戶的瀏覽器。
正確的做法是判斷cookie數組是否為空且是否存在指定的Cookie對象且值正確。
*************************************************************************************
九、使用cookie屬性的注意問題
*************************************************************************************
屬性是從伺服器發送到瀏覽器的報頭的一部分;但它們不屬於由瀏覽器返回給伺服器的報頭。
因此除了名稱和值之外,cookie屬性只適用於從伺服器輸出到客戶端的cookie;伺服器端來自於瀏覽器的cookie並沒有設置這些屬性。
因而不要期望通過request.getCookies得到的cookie中可以使用這個屬性。這意味著,你不能僅僅通過設置cookie的最大時效,發出它,在隨後的輸入數組中查找適當的cookie,讀取它的值,修改它並將它存回Cookie,從而實現不斷改變的cookie值。
*************************************************************************************
十、如何使用cookie記錄各個用戶的訪問計數
*************************************************************************************
1.獲取cookie數組中專門用於統計用戶訪問次數的cookie的值
2.將值轉換成int型
3.將值加1並用原來的名稱重新創建一個Cookie對象
4.重新設置最大時效
5.將新的cookie輸出
*************************************************************************************
十一、session在不同環境下的不同含義
*************************************************************************************
session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/消息,比如打電話是從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之為一個session。
然而當session一詞與網路協議相關聯時,它又往往隱含了「面向連接」和/或「保持狀態」這樣兩個含義。
session在Web開發環境下的語義又有了新的擴展,它的含義是指一類用來在客戶端與伺服器端之間保持狀態的解決方案。有時候Session也用來指這種解決方案的存儲結構。
*************************************************************************************
十二、session的機制
*************************************************************************************
session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。
但程序需要為某個客戶端的請求創建一個session的時候,伺服器首先檢查這個客戶端的請求里是否包含了一個session標識-稱為session id,如果已經包含一個session id則說明以前已經為此客戶創建過session,伺服器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個,這種情況可能出現在服務端已經刪除了該用戶對應的session對象,但用戶人為地在請求的URL後面附加上一個JSESSION的參數)。
如果客戶請求不包含session id,則為此客戶創建一個session並且生成一個與此session相關聯的session id,這個session id將在本次響應中返回給客戶端保存。
*************************************************************************************
十三、保存session id的幾種方式
*************************************************************************************
A.保存session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給伺服器。
B.由於cookie可以被人為的禁止,必須有其它的機制以便在cookie被禁止時仍然能夠把session id傳遞回伺服器,經常採用的一種技術叫做URL重寫,就是把session id附加在URL路徑的後面,附加的方式也有兩種,一種是作為URL路徑的附加信息,另一種是作為查詢字元串附加在URL後面。網路在整個交互過程中始終保持狀態,就必須在每個客戶端可能請求的路徑後面都包含這個session id。
C.另一種技術叫做表單隱藏欄位。就是伺服器會自動修改表單,添加一個隱藏欄位,以便在表單提交時能夠把session id傳遞回伺服器。
*************************************************************************************
十四、session什麼時候被創建
*************************************************************************************
一個常見的錯誤是以為session在有客戶端訪問時就被創建,然而事實是直到某server端程序(如Servlet)調用HttpServletRequest.getSession(true)這樣的語句時才會被創建。
*************************************************************************************
十五、session何時被刪除
*************************************************************************************
session在下列情況下被刪除:
A.程序調用HttpSession.invalidate()
B.距離上一次收到客戶端發送的session id時間間隔超過了session的最大有效時間
C.伺服器進程被停止
再次注意關閉瀏覽器只會使存儲在客戶端瀏覽器內存中的session cookie失效,不會使伺服器端的session對象失效。
*************************************************************************************
十六、URL重寫有什麼缺點
*************************************************************************************
對所有的URL使用URL重寫,包括超鏈接,form的action,和重定向的URL。每個引用你的站點的URL,以及那些返回給用戶的URL(即使通過間接手段,比如伺服器重定向中的Location欄位)都要添加額外的信息。
這意味著在你的站點上不能有任何靜態的HTML頁面(至少靜態頁面中不能有任何鏈接到站點動態頁面的鏈接)。因此,每個頁面都必須使用servlet或JSP動態生成。即使所有的頁面都動態生成,如果用戶離開了會話並通過書簽或鏈接再次回來,會話的信息都會丟失,因為存儲下來的鏈接含有錯誤的標識信息-該URL後面的SESSION ID已經過期了。
*************************************************************************************
十七、使用隱藏的表單域有什麼缺點
*************************************************************************************
僅當每個頁面都是有表單提交而動態生成時,才能使用這種方法。單擊常規的<A HREF..>超文本鏈接並不產生表單提交,因此隱藏的表單域不能支持通常的會話跟蹤,只能用於一系列特定的操作中,比如在線商店的結賬過程
*************************************************************************************
十八、會話跟蹤的基本步驟
*************************************************************************************
1.訪問與當前請求相關的會話對象
2.查找與會話相關的信息
3.存儲會話信息
4.廢棄會話數據
*************************************************************************************
十九、getSession()/getSession(true)、getSession(false)的區別
*************************************************************************************
getSession()/getSession(true):當session存在時返回該session,否則新建一個session並返回該對象
getSession(false):當session存在時返回該session,否則不會新建session,返回null
*************************************************************************************
二十、如何將信息於會話關聯起來
*************************************************************************************
setAttribute會替換任何之前設定的值;如果想要在不提供任何代替的情況下移除某個值,則應使用removeAttribute。這個方法會觸發所有實現了HttpSessionBindingListener介面的值的valueUnbound
方法。
*************************************************************************************
二十一、會話屬性的類型有什麼限制嗎
*************************************************************************************
通常會話屬性的類型只要是Object就可以了。除了null或基本類型,如int,double,boolean。
如果要使用基本類型的值作為屬性,必須將其轉換為相應的封裝類對象
*************************************************************************************
二十二、如何廢棄會話數據
*************************************************************************************
A.只移除自己編寫的servlet創建的數據:
調用removeAttribute(「key」)將指定鍵關聯的值廢棄
B.刪除整個會話(在當前Web應用中):
調用invalidate,將整個會話廢棄掉。這樣做會丟失該用戶的所有會話數據,而非僅僅由我們
servlet或JSP頁面創建的會話數據
C.將用戶從系統中注銷並刪除所有屬於他(或她)的會話
調用logOut,將客戶從Web伺服器中注銷,同時廢棄所有與該用戶相關聯的會話(每個Web應用至多一個)。這個操作有可能影響到伺服器上多個不同的Web應用
*************************************************************************************
二十三、使用isNew來判斷用戶是否為新舊用戶的錯誤做法
*************************************************************************************
public boolean isNew()方法如果會話尚未和客戶程序(瀏覽器)發生任何聯系,則這個方法返回true,這一般是因為會話是新建的,不是由輸入的客戶請求所引起的。
但如果isNew返回false,只不過是說明他之前曾經訪問該Web應用,並不代表他們曾訪問過我們的servlet或JSP頁面。
因為session是與用戶相關的,在用戶之前訪問的每一個頁面都有可能創建了會話。因此isNew為false只能說用戶之前訪問過該Web應用,session可以是當前頁面創建,也可能是由用戶之前訪問過的頁面創建的。
正確的做法是判斷某個session中是否存在某個特定的key且其value是否正確
*************************************************************************************
二十四、Cookie的過期和Session的超時有什麼區別
*************************************************************************************
會話的超時由伺服器來維護,它不同於Cookie的失效日期。首先,會話一般基於駐留內存的cookie
不是持續性的cookie,因而也就沒有截至日期。即使截取到JSESSIONID cookie,並為它設定一個失效日期發送出去。瀏覽器會話和伺服器會話也會截然不同。
*************************************************************************************
二十五、session cookie和session對象的生命周期是一樣的嗎
*************************************************************************************
當用戶關閉了瀏覽器雖然session cookie已經消失,但session對象仍然保存在伺服器端
*************************************************************************************
二十六、是否只要關閉瀏覽器,session就消失了
*************************************************************************************
程序一般都是在用戶做log off的時候發個指令去刪除session,然而瀏覽器從來不會主動在關閉之前通知伺服器它將要被關閉,因此伺服器根本不會有機會知道瀏覽器已經關閉。伺服器會一直保留這個會話對象直到它處於非活動狀態超過設定的間隔為止。
之所以會有這種錯誤的認識,是因為大部分session機制都使用會話cookie來保存session id,而關閉瀏覽器後這個session id就消失了,再次連接到伺服器時也就無法找到原來的session。
如果伺服器設置的cookie被保存到硬碟上,或者使用某種手段改寫瀏覽器發出的HTTP請求報頭,把原來的session id發送到伺服器,則再次打開瀏覽器仍然能夠找到原來的session。
恰恰是由於關閉瀏覽器不會導致session被刪除,迫使伺服器為session設置了一個失效時間,當距離客戶上一次使用session的時間超過了這個失效時間時,伺服器就可以認為客戶端已經停止了活動,才會把session刪除以節省存儲空間。
由此我們可以得出如下結論:
關閉瀏覽器,只會是瀏覽器端內存里的session cookie消失,但不會使保存在伺服器端的session對象消失,同樣也不會使已經保存到硬碟上的持久化cookie消失。
*************************************************************************************
二十七、打開兩個瀏覽器窗口訪問應用程序會使用同一個session還是不同的session
*************************************************************************************
通常session cookie是不能跨窗口使用的,當你新開了一個瀏覽器窗口進入相同頁面時,系統會賦予你一個新的session id,這樣我們信息共享的目的就達不到了。
此時我們可以先把session id保存在persistent cookie中(通過設置session的最大有效時間),然後在新窗口中讀出來,就可以得到上一個窗口的session id了,這樣通過session cookie和persistent cookie的結合我們就可以實現了跨窗口的會話跟蹤。
*************************************************************************************
二十八、如何使用會話顯示每個客戶的訪問次數
*************************************************************************************
由於客戶的訪問次數是一個整型的變數,但session的屬性類型中不能使用int,double,boolean等基本類型的變數,所以我們要用到這些基本類型的封裝類型對象作為session對象中屬性的值
但像Integer是一種不可修改(Immutable)的數據結構:構建後就不能更改。這意味著每個請求都必須創建新的Integer對象,之後使用setAttribute來代替之前存在的老的屬性的值。例如:
HttpSession session = request.getSession();
SomeImmutalbeClass value = (SomeImmutableClass)session.getAttribute(「SomeIdentifier」);
if (value= =null){
value = new SomeImmutableClass(…); // 新創建一個不可更改對象
}else{
value = new SomeImmutableClass(calculatedFrom(value)); // 對value重新計算後創建新的對象
}
session.setAttribute(「someIdentifier」,value); // 使用新創建的對象覆蓋原來的老的對象
*************************************************************************************
二十九、如何使用會話累計用戶的數據
*************************************************************************************
使用可變的數據結構,比如數組、List、Map或含有可寫欄位的應用程序專有的數據結構。通過這種方式,除非首次分配對象,否則不需要調用setAttribute。例如
HttpSession session = request.getSession();
SomeMutableClass value = (SomeMutableClass)session.getAttribute(「someIdentifier」);
if(value = = null){
value = new SomeMutableClass(…);
session.setAttribute(「someIdentifier」,value);
}else{
value.updateInternalAttribute(…); // 如果已經存在該對象則更新其屬性而不需重新設置屬性
}
*************************************************************************************
三十、不可更改對象和可更改對象在會話數據更新時的不同處理
*************************************************************************************
不可更改對象因為一旦創建之後就不能更改,所以每次要修改會話中屬性的值的時候,都需要
調用setAttribute(「someIdentifier」,newValue)來代替原有的屬性的值,否則屬性的值不會被更新
可更改對象因為其自身一般提供了修改自身屬性的方法,所以每次要修改會話中屬性的值的時
候,只要調用該可更改對象的相關修改自身屬性的方法就可以了。這意味著我們就不需要調
用setAttribute方法了
*************************************************************************************
『伍』 清楚Windows登錄密碼的原理是什麼
Windows登陸密碼破解原理:windows的身份驗證一般最終都是在lsass進程,默認模塊是msv1_0.dll,而關鍵在其導出函數LsaApLogonUserEx2,本程序通過注入代碼到lsass進程hook LsaApLogonUserEx2,截取密碼。只要有身份驗證的過程,LsaApLogonUserEx2就會觸發,如ipc$,runsa,3389遠程桌面登陸等。程序對不同系統做了處理,在2000,2003,xp,vista上都可以截取,在2000,2003,xp中,通過UNICODE_STRING.Length 的高8位取xor key,如果密碼是編碼過的,則通過ntdll.RtlRunDecodeUnicodeString解碼,vista則通過AdvApi32.CredIsProtectedW判斷密碼是否編碼過,解碼用AdvApi32.CredUnprotectW。Windows登陸密碼破解之介面問題:HRESULT WINAPI DllInstall( BOOL bInstall, LPCWSTR pszCmdLine);這是本dll導出的一個函數原型,請不要被名字蠱惑了,這個程序是綠色的。這個函數內部並沒有做任何自啟動安裝的動作,沒有修改注冊表或系統文件。只是想選一個符合regsvr32調用的介面而已。第一個參數本程序沒用到,第二個參數請指定一個文件路徑(注意是UNICODE的),記錄到的數據將保存到這里(是Ansi的)。相關推薦:文件路徑可以像這樣 C:\x.log,所以你可以自己寫loader來調用這個dll,讓dll截取到密碼時通過pipe或mailslot將數據發給你的程序。數據就是一個字元串(是Ansi的)Windows登陸密碼破解的測試:你可以不急著寫自己的loader來調用,用regsvr32作為loader來測試一下:(你可能需要關閉某些主動防禦)regsvr32 /n /i:c:\xxx.log c:\pluginWinPswLogger.dll正常的話regsvr32彈出一個提示成功。這時候你可以切換用戶或鎖定計算機,然後重新登陸進去,這個過程密碼信息就被攔截下來了並保存到c:\xxx.log。
『陸』 網頁的登錄密碼是採用什麼原理,網站公司能看到嗎
只要別人想看,都能看到的。
登陸原理:
你輸入用戶名和密碼----點提交後數據傳到網站公司的伺服器上,然後它們的程序檢查他們的資料庫中有沒你這個賬號和密碼,如果有就登陸成功。
同時,想程序也有可能記錄你輸入的東西,然後…………
『柒』 路由器遠程登錄密碼所用到的技術原理是什麼
web登錄是使用到 session或者cookie這個技術進行保持登錄的。
ssh登錄是使用ssh協議進行登錄的
『捌』 有的網站,登入時是可以用其他網站的賬號登入的,比如用QQ號和密碼登入,這是怎麼實現的
這個是2個網站合作,資料庫交換實現的,為的是互相提高人氣。
『玖』 網站進入只需要填寫密碼,是簡單的幾位數,怎麼能夠破解呢
爆破的原理主要是通過截獲管理機(目標主機)登錄網站時的所有數據包,通過分析數據包中的信息直接獲取密碼或通過數據包暴力破解獲得密碼,從而獲得網站的登錄ID和密碼。
『拾』 現在登錄某些網站或軟體需要輸入驗證碼,它的作用原理是什麼
不少網站為了防止用戶利用機器人自動注冊、登錄、灌水,都採用了驗證碼技術。所謂驗證碼,就是將一串隨機產生的數字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗證碼信息,輸入表單提交網站驗證,驗證成功後才能使用某項功能。