2015-04-28 50 views
0

我在javascript場景中仍然很新鮮,但是我有這樣的代碼,它可以用於所有意圖和目的......但是,只需要更好,乾淨利落的方式,我只想看看它會如何實現。Javascript密碼保護區..必須是更好的方式

function Restricted() { 

var password = 'pass1'; 
var password1 = 'pass2'; 
var password2 = 'pass3'; 
var password3 = 'pass4'; 
var password4 = 'pass5'; 

if (this.document.login.pass.value == password || this.document.login.pass.value == password1 || this.document.login.pass.value == password2 || this.document.login.pass.value == password3 || this.document.login.pass.value == password4) { 

//Do stuff if correct 

setTimeout(function() { 
setLocation('#'); 
    }, 2000); 
} 
else { 

//Alert them its wrong 

} 

所以你可以看到..輸入查詢所有不同的密碼是很好,可以預料的,但只是比較反對所有的海誓山盟不同的密碼,整個檢查功能來告訴他們的工作必須是一個最糟糕的方式解決這個問題..哈哈,當我看着它幾乎是尷尬的。

+9

不要在前端進行密碼驗證,任何用戶都可以根據自己的喜好編輯Javascript並訪問您正在處理的內容。 – Nit

+1

什麼是阻止您的用戶查看JavaScript並查看密碼? – TZHX

+0

或只需在您的網站上禁用JS? – Mathias

回答

2

您可以在數組中使用您的密碼,然後使用arrayOf的indexOf方法。它返回數組中元素的索引,如果不存在則返回-1。

... 
var passwords = ["pass1", "pass2"]; 
if (passwords.indexOf(this.document.login.pass.value) !== -1) { 
... 

在JavaScript 但是比較密碼不是一種安全的方式要做到這一點,大家可以看到代碼或改變它。

3

實現您的登錄服務器端。您的服務器應決定用戶是否可信(通過輸入已知的一對憑證),並且如果他們允許訪問網站的受限制部分。

如果用戶還沒有輸入正確的憑證,並沒有合適的會話/ cookie來證明它,服務器應拒絕進入。

查看如何使用您喜歡的服務器端語言(PHP,NodeJS等)實現簡單的登錄/認證系統。

1

我將回答一個更普遍的問題,以便不涉及關於密碼驗證在客戶端上更重要的問題...... oye。一般的問題是:給出一串字符串,你如何匹配一個字符串?

首先要把這個字符串(密碼)列表放到一個數組中。然後,您可以使用內置陣列方法(如indexOf)匹配索引。

function Restricted() { 
    var strings = ['pass1', 'pass2', 'pass3', 'pass4', 'pass5']; 

    if (strings.indexOf(this.document.login.pass.value) !== -1) { 
    //Do stuff if correct 
    setTimeout(function() { 
     setLocation('#'); 
    }, 2000); 
    } else { 
    //Alert them its wrong 
    } 
} 
+0

這是完美的問題,現在處理問題的其他領域..謝謝! – ne0nlight

+0

如果數組不包含字符串,indexOf方法返回-1。但-1被視爲true,因此此解決方案無法工作。此外,如果您輸入索引爲0的密碼「pass1」,它將被視爲false並將其評估爲錯誤的密碼。 –