2012-05-14 17 views
0

我的.jsp頁面上有一個表單,它將密碼發送回服務器。JSP上的Java文本修改

<form name="login" action="j_security_check" method="post"> 
    <input type="text" name="j_username"> 
    <input type="password" name="j_password"> 
    <input type="submit" name="Login"> </form> 

我想在處理它之前對j_password進行一些處理。 之前,我設法通過一些處理代碼執行一個JavaScript來做到這一點通過調用函數執行類似下面:

<script type="text/javascript" src="sha256.js"> 
<script> function hash() { document.login.j_password.value = '@' + 
    sha256_digest(document.login.j_password.value); } </script> 
... 
... 
    <input type="submit" value="Login" onClick="hash()"> </form> 

現在,我想實現類似的功能,而是使用JavaScript的,我正在嘗試使用Java。我的.java的主要目標是加載public.key,取得j_password,執行加密,並用其加密形式替換j_password。

// RSA.java Pseudocode 
1) Get string from textbox "j_password" 
2) Load public key from public.key 
3) Perform encryption on j_password with key 
4) Load cipher to textbox "j_password" 

然而,大多數的例子,我看到實施「<%%>」,呼籲但是這給我的感覺,它會在頁面加載執行,而不是點擊登錄按鈕。我還注意到我可以將它編譯爲帶有javac的.class類,並將其作爲「」加載,但是可以使用此方法修改j_password的輸入嗎?雖然它是一個.jsp,我可以直接用「<%%>」實現Java,但我認爲在當前的JSP標準中這是不可接受的。有沒有人有任何建議或想法指向正確的方向?

謝謝。

+1

只是一個想法:一個加密密碼,因爲你不希望原始密碼通過網絡傳遞到服務器。如果您在服務器端對密碼進行加密,那麼它就會違反目的。 –

+0

是的,因此我想知道在客戶端提交之前是否有辦法進行這種加密,但是使用Java來完成。 –

+1

在典型的Java Web應用程序中,您在Java上編寫的任何內容都會在服務器端執行。所以JavaScript是你唯一的選擇。 –

回答

0

您可以使用Filters進行加密,但它不會在客戶端。正如您在該列表中看到的,過濾器也用於加密,就像您需要用於您的目的一樣。干涉某事的唯一方法是通過使用過濾器。但是如果你需要客戶端加密,唯一的出路就是JavaScript。你可以看看thisthis

第二個鏈接爲散列客戶端上的密碼提供了一個很好的解釋。其中一個答案提到:

對於這個問題,更安全的身份驗證協議通常會跳過一些環節,以確保這樣的重放攻擊無法正常工作,通常是允許客戶端選擇一堆的隨機位,它們隨密碼一起散列,並且也清晰地提交給服務器。

在服務器上:

  • 產生的隨機
  • 數位發送這些位(明文)給客戶

在客戶端:

  • 生成幾個隨機位
  • 連接密碼,se rver的隨機比特和客戶端隨機 位
  • 產生上述
  • 哈希提交隨機數據(明文)和散列到服務器

由於服務器知道自己的隨機信息以及客戶端的隨機位(它將它們看作明文),它可以執行基本相同的轉換。這個協議可以確保,在這次會話中沒有人聽到後面的信息可以使用這些信息來錯誤地使用記錄的信息進行驗證(除非使用非常弱的算法......),只要雙方每次都產生不同的「噪聲位」握手被執行。

+0

嗨。我已經實現了服務器端的過濾器。它將使用私鑰解密密碼。 –

+0

那麼,在客戶端加密只有一個選項,然後JavaScript。否則,只有一種方法可以在密碼到達服務器之前進行干預,即使用過濾器(再次,它不會在客戶端發生,它將在服務器端)。 –

0

您是否試圖加密密碼以提交給服務器?如果是這樣,則不能使用JSP,因爲處理是在服務器上執行的,而不是客戶端。

JSP是一種使用Java構建動態網頁的方法,但是所有的處理指令都被轉換爲servlet,然後它們遵循常規的servlet生命週期。如果您想要在客戶端上加密,則需要使用客戶端語言。請記住,如果您使用SSL提交/接收提交,數據加載將自動加密。

如果您將存儲轉換爲數據庫,那麼您還可以使用標準servlet來處理表單處理程序。

+0

嗨。是的,我打算在客戶端加密,提交給服務器,過濾器將解密j_security_check的密碼。我知道這是客戶端,我應該使用.js。不幸的是,我還沒有找到一個使用RSA2048與我指定的public.key進行加密的JavaScript文件。 –

+1

http://www.jcryption.org/將允許您在客戶端進行加密。不過要注意的是,這仍然是一個有缺陷的方法,因爲在中間攻擊中你仍然接觸到人,並且不提供任何信任機制。你真的應該使用SSL。 – codeghost

+0

謝謝。我將研究jcryption。是的,SSL已啓用,但我期待看到假設情況,其中SSL不是。 –