Существуют ли браузеры, которые не поддерживают maxlength?

У меня есть страница участия в конкурсе на сайте моей компании. Чтобы принять участие в конкурсе, вы создаете логин, который представляет собой только адрес электронной почты и 4-значный PIN-код. Вот поле для PIN-кода:

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

Когда пользователи отправляют форму, учетная запись создается в нашей базе данных, а затем они получают электронное письмо (которое я скопировал), содержащее адрес электронной почты и созданный ими PIN-код.

Вот проблема: в каждом браузере, который я тестировал (Safari/Chrome/Firefox на Mac, Chrome/Firefox на Linux, IE7/8/9 на Windows), я НЕ МОГУ ввести более 4 цифр в это поле PIN. И тем не менее, несколько писем, которые я получил, показывают, что пользователь создал булавку с более чем 4 символами.

Как это возможно? Существуют ли браузеры, которые не поддерживают maxlength? Я не проверял в Opera или в любом из мобильных браузеров. Ничего страшного, если их пин-код длиннее 4 цифр; база данных примет больше. Мне просто интересно, как им удалось обойти maxlength.

ОТРЕДАКТИРОВАНО ДЛЯ ДОБАВЛЕНИЯ

Слишком много ответов, в основном говорящих об одном и том же, чтобы я мог ответить на каждый из них индивидуально. Я ЗНАЮ, что я всегда должен выполнять проверку на стороне сервера для чего-либо важного, и у нас действительно есть код PHP, очищающий наши данные, и если бы это было чрезвычайно важно, у меня также был бы код PHP, обеспечивающий ограничение в 4 цифры. Для нас не так уж важно, чтобы они состояли всего из 4 символов, поэтому я не стал заставлять это делать. Мне просто интересно, почему свойство maxlength не делает то, для чего оно предназначено, то есть не позволяет пользователям вводить больше определенного количества символов. Для тех из вас, кто предложил вредоносные скрипты или Firebug, я могу быть на 100% уверен, что это не так. Только зарегистрированные пользователи нашего сайта (который ограничен очень конкретным списком корпоративного членства) могут даже попасть на страницу участия в конкурсе, и я могу гарантировать, что ни один из примерно 100 человек в этом списке не будет преднамеренно пытаться обойти свойство типа ввода.


person EmmyS    schedule 08.04.2011    source источник
comment
Точно такой же вопрос у меня здесь, я знаю, что max-length легко обойти, но как насчет пользователей, которые не пытаются обойти никакие барьеры. Единственное, что я могу вспомнить, это то, что сказал Крис, а именно то, что в некоторых браузерах при копировании и вставке это не работает. Только один пример - IE, где, если у вас есть атрибут maxlength в текстовой области, вы можете вставить текст внутри, который превышает максимальную длину.. это не относится к вводам.. но, возможно, в каком-то другом браузере.. я не знаю почему люди будут вставлять булавки .. Дайте мне знать, если вы выясните, как это произошло.   -  person Trevor    schedule 27.02.2014
comment
maxlength=x не работает на MAC (пробовали chrome и firefox), когда у вас добавлен атрибут type=number :)   -  person Mindaugas Bernatavičius    schedule 12.12.2014
comment
@ MindaugasBernatavičius, это потому, что вам нужно использовать атрибуты max и min или range для type=number.   -  person Clint Pachl    schedule 01.07.2015
comment
Это большой вопрос. У нас есть внутренний сайт (поэтому нет ботов или злонамеренных пользователей, чтобы обойти maxlength), где для удобства мне нужна максимальная длина. Например, для одного конкретного поля базы данных установлена ​​максимальная длина 100 (т. е. изменение символов (100)). Таким образом, maxlength=100 устанавливается для элемента ввода. Однако иногда элемент ввода пропускает 103 или 101 символов, и серверная часть выдает исключение. Это раздражение. Я хотел бы знать, почему длина ввода иногда может превышать максимальную длину на несколько дополнительных символов; похоже на ошибку.   -  person Clint Pachl    schedule 01.07.2015
comment
Я только что понял свою проблему с элементами INPUT, допускающими чуть больше, чем maxlength в бэкэнде базы данных. атрибут maxlength указывает максимальное количество символов (в кодовых точках Unicode). Так, например, если была введена одна двухбайтовая кодовая точка Unicode, такая как знак умножения (×), она будет считаться 1 в отношении максимальной длины ввода, но 2 в отношении длины символа базы данных ( при условии кодировки SQL_ASCII).   -  person Clint Pachl    schedule 01.07.2015
comment
Это 2019 год, это старая тема. Но все равно оказывается, что MACOS не учитывает максимальную длину. Я тестировал это с Safari, FireFox и Chrome. НО на компьютере с Windows я не могу ввести длину символов, превышающую x, это проверено с помощью FireFox и Internet Explorer. Странно, а?   -  person Chuck Rezso    schedule 14.08.2019


Ответы (6)


Скорее всего, это боты, которые читают имена полей и создают на их основе запросы GET и POST, а не используют HTML-форму, как это сделал бы обычный пользователь.

Вот почему проверки формы на стороне клиента никогда не бывает достаточно, чтобы гарантировать правильность данных. Проверка на стороне клиента хороша тем, что она отзывчива для конечных пользователей, но она не может предотвратить попадание неверных данных на порог вашего сервера.

В качестве примера предположим, что у меня есть поле ввода в форме с действием GET. Максимальная длина моего поля ввода равна 4. Когда я нажимаю «Отправить», я вижу URL-адрес, заканчивающийся на ?field=1234. Ничто не мешает мне обновить этот URL-адрес до ?field=123456789 и нажать Enter. Подобные вещи можно делать с помощью POST-действий, но для этого нужен инструмент.

person Welbog    schedule 08.04.2011
comment
Также с помощью таких инструментов, как firebug, я мог отредактировать html сайта, чтобы удалить maxlength. - person m4tt1mus; 08.04.2011
comment
Не только боты, я считаю, что в старых браузерах можно было вставлять более длинный текст, чтобы обойти атрибут maxlength. - person dev-null-dweller; 09.04.2011

Я считаю, что каждый браузер поддерживает его, вот несколько ссылок для справки:

Максимальная длина | СайтПоинтСсылка

Maxlength | Школы W3

Очевидно, что есть способ обойти это - вы должны убедиться, что у вас ВСЕГДА есть адекватная проверка на стороне сервера, поскольку клиентской стороны обычно недостаточно.

person Rion Williams    schedule 08.04.2011
comment
Просто примечание: w3schools обычно считается некачественным ресурсом для информации, связанной с программированием/веб-разработкой. Всегда полезно проверить эту информацию в другом месте. - person Mike G; 01.02.2013

Все браузеры поддерживают maxlength. Однако этот атрибут можно легко удалить/изменить с помощью методов DOM или, например, с помощью панели инструментов веб-разработчика Firefox.

person duri    schedule 08.04.2011

несколько писем, которые я получил, показывают, что пользователь создал булавку с более чем 4 символами.

Как это возможно? Существуют ли браузеры, которые не поддерживают maxlength?

Я бы исследовал заголовки USER_AGENT и REFERER, связанные с этими действиями пользователя. Возможно, злоумышленник отправил формы программным путем в обход ограничений браузера, просто чтобы проверить защиту вашего периметра. Если это так, вы должны увидеть там некоторые закономерности.

В любом случае, помимо этих обоснованных догадок, maxlength не следует рассматривать как средство защиты ввода. Все, что находится на стороне клиента, не находится под вашим контролем, оно существует только для того, чтобы сделать пользовательский интерфейс более интуитивным, интерактивным. Вы всегда должны проверять все на сервере. В этом случае PIN-код состоит из 4 цифр, в противном случае отклоните ввод. Золотое правило состоит в том, чтобы относиться ко всем пользовательским данным как к враждебным и тщательно проверять их на сервере.

person Community    schedule 08.04.2011

В общем, пытаться применять правила для пользовательского ввода на стороне клиента — плохая идея. У меня был опыт, когда мы поручили некоторую работу некоторым программистам, и их идея дезинфекции пользовательского ввода заключалась в том, чтобы пользователи не могли вводить более 10 символов в любом заданном поле. Быстрое изменение firebug и, о, смотри, я могу удалить базу данных сервера с помощью минимальной инъекции SQL.

Если бы я был вами, я бы проверил максимальную длину с помощью любого скрипта, добавляющего информацию о пользователе в вашу базу данных, и возвращал бы ошибки проверки формы, если пользовательский ввод превышает максимальную указанную длину.

person photoionized    schedule 08.04.2011

Это тот тип вещей, который вы все равно должны проверять на стороне сервера, даже если клиенты почти всегда будут его поддерживать. Обойти максимальную длину очень легко — на панели инструментов разработчика Firefox есть опция «Удалить максимальную длину», или запрос можно очень легко отредактировать вручную. Я почти думаю, что в прошлом вы могли обойти максимальную длину в одном из браузеров, просто используя вырезание и вставку (например, браузер не позволял вам вводить больше символов, но если вы вставили значение, которое было 5+ символов, это ввел бы их все), хотя я не могу точно вспомнить, в каком браузере я это видел...

person Chris Shaffer    schedule 08.04.2011