2012-11-11 126 views
0

這基本上是我的表格:如何防止document.forms [0] .submit()提交表單?

<form method="post" action="" onsubmit="checkallfields(); event.preventDefault();"> 
    <!-- My Stuff --> 
</form> 

而且這是我的頁面的第一個表單。我有客戶端字段驗證,顯然存儲在功能checkallfields()。但問題是,用戶可能很頑皮,打開控制檯並鍵入document.forms[0].submit(),然後表單仍然會提交。

我該如何預防?

+1

更簡單..用戶可以禁用JavaScript任何時候他們想..計劃它 – charlietfl

+0

我已經完成了,只需要這個被修復。 – think123

+0

繞過客戶端驗證並不頑皮。開發者依賴它是很頑皮的。 –

回答

0

我想到了這個問題,並得到了我自己的答案。在Google Chrome中進行測試。

var i = document.forms.length; 
while (i--) { 
    document.forms[i].submit = function() { 
    return false; 
    } 
} 

它是否適合你們?你可以在這裏檢查:http://jsfiddle.net/think123/ZRuYw/

+0

,這也可以繞過。如果他們有控制檯,他們可以覆蓋它。這是一種浪費的努力。他們只需要運行相同的循環並覆蓋該函數。 – epascarello

+0

@epascarello但是對於大多數不瞭解Chrome開發工具或JavaScript的用戶來說,這種方式非常有效。反正我不需要100%的安全。感謝你的回答。 – think123

+0

但是從郵件:*用戶可以非常調皮,打開控制檯*如果他們知道如何,他們可以做到這一點。大聲笑。 – epascarello

2

你不能阻止它。這就是爲什麼你需要進行服務器端驗證,這就是爲什麼你總是應該進行服務器端驗證。客戶端不可信任,我甚至不需要您的網頁提交到您的服務器。

+0

@ think123這是實際的答案。但是爲了好奇,是的,這當然是可能的。只是不要把你的輸入元素放在一個表單中,並讓submit按鈕創建表單,提交它,然後刪除它。 –

+0

@ st-boost窗體仍然會到服務器,因此仍然需要驗證。你也可以劫持onsubmit並將其命名爲別的東西。有很多方法可以隱藏它,但只需閱讀源代碼即可瞭解它是如何完成的。 – epascarello

+0

@epascarello絕對,只是想說,從技術上來說可以阻止這種方法。 –