2010-08-09 39 views
0

我想知道是否真的有必要在JS和PHP中進行驗證? 我有我的提交按鈕JS document.myform.submit()與PHP POST發送到同一頁面。 如果用戶禁用JS,他無法發送表單。 所以我想問一下安全問題,有人可以繞過javascript以另一種方式發送變量嗎?他們將如何做到這一點? 如果他們可以的話,如果我應該在PHP中驗證的答案是YES,對吧?使用PHP和Javascript安全進行表單驗證

+0

只是個人觀點 - 您可以考慮允許在沒有javascript的情況下提交。就我個人而言,我運行允許運行javascript的網站白名單。作爲禮節,您的javascripted表單可以告訴我,在提交之前是否輸入了錯誤的值。但是,在javascript被阻止的情況下,儘管我可以改變你的webform行爲客戶端或者使用套接字調用來完全繞過表單,但我完全不能使用你的網站作爲普通用戶。 – 2010-08-09 09:33:58

回答

1

是的,有人可以使用python中的urllib2發送變量。這很容易做到。如果你只打算做一組驗證,那麼在服務器端進行。做客戶端不過是對用戶的禮貌。

作爲是多麼容易的例子:

import urllib2 

variables = {'variable1': value1, 'variable2': value2} 
urllib2.urlopen('http://yoursite.com/index.php/yourform', variables) 
# your form has now been spoofed. 

添加頁眉和cookie管理欺騙任何用戶代理是一樣瑣碎

0

在服務器端始終驗證。 JavaScript驗證很好,但可以輕鬆繞過。 攻擊者可以僞造帶有惡意數據的HTTP POST請求到您的表單的URL,然後該URL將被無標註地輸入您的系統。

3

答案很簡單。
服務器端是強制性的,必須無條件地完成。

客戶端驗證是可選的,只是爲了用戶的方便。

因此,確認雙方是沒有必要的,但首選的可用性

如果用戶禁用JS的緣故,他不能繼續發送形式。

lol。用戶可以將表單保存在本地磁盤上並以他們想要的方式進行編輯。

0

就像每個人都回答 - 不要只依賴客戶端驗證。這很容易濫用,甚至不必將網頁保存到磁盤,他可以使用libcurl或任何其他HTTP庫,或者只是玩Firebug等。

儘管在客戶端驗證是非常「用戶友好」的。您可以將Ajax驗證添加到您的表單中,但這仍然只是方便,應該依賴於服務器端代碼。

0

我完全同意上面的所有人 - 客戶端主要是爲了填表人。服務器端更多的是確保你沒有被定位。

如果你想要一個漂亮的客戶端驗證腳本,我寫了一個 - 免費下載和使用,並非常可定製。它甚至會錯誤拼寫電子郵件地址並提出正確的版本。如果你有興趣,你可以在這裏:

http://www.blackboxtechnology.co.uk/free-stuff/javascript-form-checker.php

享受!