Существуют ли браузеры, которые не поддерживают maxlength? - PullRequest
20 голосов
/ 08 апреля 2011

У меня есть страница для участия в конкурсе на сайте моей компании. Чтобы принять участие в конкурсе, вы создаете логин, который представляет собой электронную почту и 4-значный пин-код. Вот поле 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 цифр; база данных примет больше. Мне просто интересно, как им удалось обойти максимальную длину.

отредактировано ДОБАВИТЬ

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

Ответы [ 6 ]

16 голосов
/ 08 апреля 2011

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

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

В качестве примера, скажем, у меня есть поле ввода в форме, действие которойПОЛУЧИТЬ.Максимальная длина моего поля ввода - 4. Когда я нажимаю "Отправить", я вижу URL, заканчивающийся ?field=1234.Ничто не мешает мне обновить этот URL до ?field=123456789 и нажать Enter.Аналогичные действия можно выполнить с помощью действий POST, но для этого необходим инструмент.

7 голосов
/ 08 апреля 2011

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

Макс. Длина | SitePointReference

Максимальная длина | W3 Schools

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

3 голосов
/ 08 апреля 2011

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

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

3 голосов
/ 08 апреля 2011

В нескольких полученных мной электронных письмах показано, что пользователь создал пин-код длиной более 4 символов.

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

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

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

3 голосов
/ 08 апреля 2011

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

1 голос
/ 08 апреля 2011

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

...