2012-08-08 36 views
2

我有我的網站上登記表,我對這裏的編碼是這樣誕生之日起3個輸入框...如何阻止人們繞過我的JavaScript驗證?

<input name="dd" id="dd" type="text" value="DD" size="2" /> 
<input name="mm" id="mm" type="text" value="MM" size="2" /> 
<input name="yyyy" id="yyyy" type="text" value="YYYY" size="4" /> 

那麼我這是在提交運行JavaScript的驗證頁面。該頁面檢查字段不是空的,並且它們在某個數字例如1至31
日 這裏是JavaScript的「DD」場......

var nulld=document.forms["create"]["dd"].value; 
if (nulld==null || nulld=="") 
    { 
    alert("Please enter a day between 1 and 31"); 
    return false; 
    } 
var dd=document.forms["create"]["dd"].value; 
if (dd >= 1 && dd <= 31) 
    {}else{ 
    alert("Please enter a day between 1 and 31"); 
    return false; 
    } 

所以我有這樣的代碼,但四注意到,有人在此計算機上禁用JavaScript和創造的負載帳戶數據不正確。 如何阻止這種情況發生?或者是做它來添加,檢查是否已禁用JavaScript,並將它們轉移到這樣的錯誤頁面代碼的唯一途徑...

<noscript><meta http-equiv="refresh" content="1;url=nojavascript.html"></noscript> 

是否有另一種方式做到這一點,用戶仍然可以創建一個帳戶沒有JavaScript,但仍然有驗證?

+5

始終在服務器上進行驗證。永遠只有客戶端驗證的方法。 – 2012-08-08 08:22:14

+1

這就是爲什麼一個人不能只依賴客戶端驗證的原因。 – 2012-08-08 08:22:17

+1

並請確保您接受**每個**問題的答案你問.... – ManseUK 2012-08-08 08:24:53

回答

9

JavaScript驗證只適用於一件事:快速讓用戶知道他們要提交給服務器的數據將被拒絕。

不能控制什麼進入您的系統。您需要必須檢查服務器上的數據是否合適,然後再開始處理它。

+0

很酷,謝謝你們,所以我需要在我的PHP頁面上再次相同的代碼上傳數據到服務器。謝謝 :) – Ben 2012-08-08 08:24:04

7

不要擔心你的JavaScript比現有的「更強大」,他們可以發送該表格甚至不使用瀏覽器,更不用說JavaScript。您必須在服務器端驗證數據,如果錯誤則拒絕。

對於那些已啓用javascript的人來說,javascript驗證只是一種方便,因此他們可以在不必向服務器發出請求的情況下獲得快速反饋。

當您執行服務器端驗證時,請考慮儘可能強化它。例如,您的JavaScript驗證通過無效日期。

2

您必須在服務器上進行重複驗證。

服務器端驗證必須堅如磐石 - 並防止任何未經授權的活動,因爲您可以假定用戶可能是惡意的,並且完全控制了客戶端。

客戶端驗證只是爲了方便用戶而存在,並且對系統的安全性沒有任何影響。它在那裏阻止瀏覽器表單浪費時間從服務器獲取驗證。