Подтвердить что ты не робот

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

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

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

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

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

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

ИЗМЕНИТЬ ДОБАВИТЬ

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Maxlength | SitePointReference

Maxlength | Школы W3

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

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

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

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

Ответ 6

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