2016-09-28 88 views
1

我想在提交給服務器之前(我有我自己的理由,我知道我在做什麼)在客戶端哈希我的密碼。我正在使用jsSHA(它工作,我提醒輸出)散列密碼。在提交表單之前添加元素

我創建了一個新元素,將哈希密碼賦值給它的值並將其附加到表單中。但該表單仍然沒有提交。

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jsSHA/2.0.2/sha.js"></script> 
<form id = "form" name="form" method="post" action="verify.php" class="login"> 
    Username: <input type="text" name="username" style = "width: 350px"><br> 
    Password: <input type="password" name="pwd" id="pwd" style="width: 350px; margin-left: 3px;"><br> 
    Remember Me: <input type="checkbox" name="rememberme" value="1"><br> 
    <input type="submit" name="submit" value="Login!" class="loginbutton" onclick="submitForm();"> 
</form> 

JS

function submitForm(){ 
    var form = document.getElementById("form"); 
    var pwd = document.getElementById('pwd'); 
    var hash = new jsSHA("SHA-256", "TEXT", {numRounds: 1}); 
    hash.update(pwd.value); 
    var hash = hash.getHash("HEX"); 
    var password = document.createElement("password"); 
    password.name="password"; 
    password.type="hidden"; 
    password.id = "password"; 
    password.value = hash; 
    form.appendChild(password); 
    pwd.value = ""; 
    form.submit() 
} 

發送PARAMS:

username: user 
pwd: "" 
rememberme: "1" 
submit: "Login!" 

我怎麼能password: *some value*這些發送參數?我究竟做錯了什麼?

+2

你的'document.createElement'應該使用'input'作爲參數而不是'password'。 – CuriousMind

+0

我可以建議一種替代解決方案嗎?如何在提交之前更改現有pwd輸入的值?這樣你就不需要創建一個額外的元素並刪除現有的元素。這當然只適用於您在提交時切換頁面。對於AJAX驗證,您需要隱藏的元素 - 但在這種情況下,您寧願搜索它,而不是創建它。 –

+1

@HubertGrzeskowiak嗯,我這樣做,但它使我感到無聊,因爲當我點擊提交時,密碼從*********變成************** **********************************在頁面重新加載之前。 – Mirakurun

回答

2

您正在創建password元素而不是input元素,其中type="password"。瀏覽器只從他們知道的表單元素(輸入,按鈕,textarea等)發送數據。此外,您正在設置元素的屬性,但設置屬性在兼容性方面可能更安全。

+0

你說得對,謝謝。我會盡快接受這個答案。 – Mirakurun

相關問題