2011-04-08 184 views
20

我在我公司的網站上有一個比賽輸入頁面。爲了參加比賽,您創建了一個登錄名,它只是一封電子郵件和一個4位數字的密碼。這裏的PIN字段:是否有瀏覽器不支持maxlength?

<input type="password" name="contest_pin" id="contest_pin" maxlength="4" /> 

當用戶提交表單,在我們的數據庫中創建帳戶,然後他們收到一封電子郵件(這我就複製),包含他們創建的電子郵件地址和密碼。

以下是我測試過的每個瀏覽器(Mac上的Safari/Chrome/Firefox,Linux上的Chrome/Firefox,Windows上的IE7/8/9)我無法在該PIN字段中輸入超過4位數字。然而,我收到的幾封電子郵件顯示,該用戶創建了超過4個字符的密碼。

這怎麼可能?是否有瀏覽器不支持maxlength?我還沒有在Opera或任何移動瀏覽器上進行過測試。如果它們的引腳長度超過4位,這不是什麼大問題;數據庫將接受更多。我只是想知道他們如何設法達到最大長度。

編輯補充

有太多的答案基本上是說,我單獨給所有的人都回應同樣的事情。我知道我應該總是對任何重要的服務器端進行驗證,並且我們確實有PHP代碼來清理數據,如果這非常重要,我還會讓PHP代碼執行4位數限制。對我們來說它們只有4個字符並不重要,所以我沒有強制執行它。我只是想知道爲什麼maxlength屬性沒有做它設計的目的,這是爲了防止用戶輸入超過一定數量的字符。對於那些建議使用惡意腳本或Firebug的人,我可以100%確定情況並非如此。只有我們網站的註冊用戶(僅限於特定的公司會員名單)才能進入參賽作品頁面,我可以保證該名單上大約100人不會故意試圖繞過輸入類型屬性。

+0

我在這裏得到的問題完全一樣,我知道最大長度很容易規避,但是那些沒有試圖克服障礙的用戶呢?我能想到的唯一事情就是Chris所說的,那就是在某些瀏覽器上覆制粘貼它時不起作用。只有一個例子是IE瀏覽器,如果你在文本區域擁有maxlength屬性,那麼你可以粘貼超過最大長度的文本..這是不是與輸入情況..但也許在其他瀏覽器..我不知道爲什麼人們會粘在別針中。讓我知道,如果你弄清楚它是如何發生的。 – Trevor 2014-02-26 23:42:01

+0

當你添加type =「number」屬性時,maxlength =「x」在MAC上無法工作(chrome&firefox試過):) – 2014-12-12 08:06:40

+0

@MindaugasBernatavičius,那是因爲你需要使用'max'和'min'或'range 'type = number'的屬性。 – 2015-06-30 23:30:21

回答

7

我相信,每一個瀏覽器支持它,這裏是供參考的幾個環節:

Maxlength | SitePointReference

Maxlength | W3 Schools

明明有辦法解決這個 - 你應該確保你總是有足夠的服務器因爲客戶端通常是不夠的。

+11

只需注意:w3schools通常被認爲是編程/網絡開發相關信息的次級資源。在其他地方驗證信息總是一個好主意。 – MikeTheLiar 2013-01-31 21:28:05

16

他們很可能是機器人讀取字段名稱,並創建基於這些GET和POST請求,而不是像使用普通人類用戶那樣使用HTML表單。

這就是爲什麼客戶端驗證表單永遠不足以確保數據正確的原因。客戶端驗證非常好,因爲它能夠響應最終用戶,但它無法防止不良數據到達服務器的家門口。

作爲一個例子,假設我在表單中有一個輸入字段,其操作是GET。我的輸入字段的最大長度是4.當我按提交時,我看到以?field=1234結尾的URL。沒有任何東西阻止我將該URL更新爲?field=123456789並按下回車鍵。 POST操作可以做類似的事情,但需要一個工具來完成。

+7

也使用像螢火蟲這樣的工具,我可以編輯網站的html來移除maxlength。 – m4tt1mus 2011-04-08 19:57:22

+3

不僅是殭屍,我相信在舊版瀏覽器中可以粘貼更長的文本來繞過maxlength屬性。 – 2011-04-08 20:00:59

1

這是你應該仍然驗證服務器端的東西,即使客戶端幾乎總是會支持它。圍繞最大長度非常容易--Firefox開發人員工具欄包含「刪除最大長度」選項,或者可以非常容易地手動編輯請求。我幾乎認爲過去你可以通過使用剪切和粘貼(例如,瀏覽器不會讓你輸入更多的字符,但是如果你粘貼了一個超過5個字符的值,會輸入所有的),但我不記得具體哪個瀏覽器,我看到...

3

所有瀏覽器支持maxlength。但是,可以使用DOM方法或使用Firefox的Web Developer Toolbar輕鬆地刪除/更改此屬性。

3

我收到的幾封電子郵件顯示用戶創建了超過4個字符的密碼。

這怎麼可能?是否有瀏覽器不支持maxlength?

我會調查與這些用戶活動相關的USER_AGENT和REFERER標頭。也許惡意用戶通過編程的方式提交表格來規避瀏覽器的限制,只是爲了檢查你的外圍防禦。如果是這樣,你應該看到一些模式。

無論如何,除了這些受過教育的猜測,maxlength不應被視爲保障輸入的手段。客戶端的任何東西都不在您的控制之下,它的存在僅僅是爲了讓用戶界面更直觀,更具交互性。您應該始終檢查服務器上的所有內容。在這種情況下,PIN由4位數字組成,否則拒絕輸入。黃金法則是將所有用戶輸入視爲敵對行爲,並在服務器上進行徹底驗證。

3

一般來說,試圖強制用戶輸入完成客戶端的規則是一個壞主意。我有過一些經驗,我們已經將一些工作外包給了一些程序員,他們對用戶輸入進行清理的想法使得用戶在任何給定字段中都不能輸入超過10個字符。一個快速的螢火蟲變化,哦,看,我可以刪除一些最小的SQL注入服務器的數據庫。

如果我是你,我會檢查最大長度與任何腳本添加用戶信息到您的數據庫和返回表單驗證錯誤,如果用戶輸入超過最大指定長度。