2013-06-27 18 views
-1

我想說這個問題的前提是我知道客戶端驗證總是必要的,但我仍然想知道這一點。如何在這種特殊情況下規避客戶端驗證

假設如下:

我有一個表格

<form id="update_form" action="/App/appManage/" method="post"> 
    <input name="data[test]" value="1" type="text" id="AppModified"/> 
</form> 

和表單的提交按鈕之外。

<a id="update_button" class="btn btn-primary btn-medium">Update</a> 

此按鈕通過以下的Jquery提交:

<script> 
    $(document).ready(function() { 
    $("#update_button").click(function() { 
     $("#update_form").submit(); 
    }); 
    }); 


//Form Validation 
$("#update_form").validate({ 
    rules: { 
     "data[test]": "required" 
    }, 
    messages: { 
     "data[test]": "Please enter a value for this field" 
    } 
}); 

</script> 

沒有參與阿賈克斯。

如果用戶禁用javascript並單擊更新按鈕,則不執行任何操作。 (測試)

如果用戶點擊任何窗體上的字段中輸入,它不會提交表單(測試)

如果用戶已經啓動Javascript並點擊更新和輸入字段爲空他們無法提交表格並且在該字段下閃爍,請求您填寫(已測試)

提交表單時會將輸入字段中輸入的值保存到我的數據庫中。

我的問題是:

一個人怎麼能得到我的數據庫字段爲空值?

P.S.我知道可能有一種方法,但我想知道它是什麼!我不知道該怎麼知道如何改進我的代碼,或者被告知我應該使用服務器端驗證來確保在將記錄插入到我的數據庫之前它不是空白的,只是惡意用戶會逐字地繞過我的數據庫代碼在這裏。

大家都知道,通過一位朋友,我發現了另一種方法來規避這種類型的驗證。你可以自己在螢火蟲中創建提交元素,並提交與該領域空白的表單。

+1

使用AJAX?首先驗證JS中的表單,以及何時發送完AJAX請求並檢查服務器上的信息。 – elclanrs

+2

客戶端驗證從不*必須。它始終是可選的,除了增強可用性(用戶不需要提交表單並等待服務器的響應)之外,其他任何用途都不起作用。確定用戶數據是否被允許訪問數據庫的真實驗證必須在服務器上完成。 – Oswald

+0

這裏沒有涉及ajax。表單提交併將輸入保存在數據庫中。我不理解這些關於用戶如何提交沒有輸入值的表單的評論。 – user2278120

回答

1

任何人都可以使用無效數據向您的網站發送HTTP POST。他們根本不需要使用您的網頁。有成千上萬的工具可以實現這一目標。例如,使用網絡瀏覽器的JavaScript調試器構建示例,您可以輕鬆發送

$("#submit").trigger('click') 

而無需先通過驗證。正如奧斯瓦德指出的,服務器端驗證是國王。客戶端驗證不是爲了安全,而是爲了用戶體驗。

+0

謝謝,最佳答案呢。如果你能逐字闡述我爲了實際做你在這裏提出的作爲測試的所能做的步驟嗎?另外,有沒有其他方法來規避這些代碼?謝謝。我在問,因爲我可能會在Intranet網站上使用這種方法,根據這項研究的結果,這種驗證類型可能足夠滿足我的需求。 – user2278120

+0

使用命令行工具curl http://curl.haxx.se/docs/httpscripting.html:'curl --data「data [test] = evildata」http://www.mysite.org/form.php' –

+0

謝謝amadeus。 – user2278120

相關問題