Вопрос

У меня есть несколько HTML-форм, и я реализую фильтрацию этих полей на стороне сервера (используя Java-сервлеты), и мне было интересно, что я должен разрешить или, возможно, что я должен запретить.Для адресов электронной почты я удаляю все, что соответствует этому:

[^A-Za-z0-9._%-@]

Какие аналогичные правила я мог бы применить к полям имени, сообщения и номера телефона?

Я предполагаю, что < и > должно быть экранировано как <и >, что еще я должен заменить?

В связи с этим, существуют ли какие-либо рекомендации относительно максимальной длины, разрешенной для таких полей?

Это было полезно?

Решение

Тебе нужно сбежать & Для &amp; во-первых, тогда < Для &lt;.Вопреки распространенному мнению, это в этом нет необходимости чтобы сбежать > Для &gt;.Нет необходимости защищать кронштейн, который закрывается HTML-тег, если нет возможности Открыть один.

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

Остальная часть проверки, которую вы захотите выполнить, зависит от типа данных.Что касается адреса электронной почты, убедитесь, что на нем есть @ и по крайней мере один . после этого, если вас волнует, действителен он или нет, отправьте адрес тестовым электронным письмом.Практически невозможно полностью проверить адрес электронной почты намного дальше этого, и даже если адрес синтаксически корректен, это все равно не означает, что он может быть доставлен.Аналогично, разрешите использовать практически все, что угодно, в качестве URL-адреса, а затем попытайтесь восстановить его чтобы проверить, действительно ли это.Для получения адреса выставления счета / доставки используйте веб-службу USPS для проверки и получения данных в наилучшем формате (для США).адреса).

Другие советы

Вы должны допустить что -нибудь для имен. Рассмотрим «О'Мэлли» или «Хадсон-Уокер». Некоторые языки (такие как Салиш) включают числа, чтобы вы могли иметь "SQWXWU7MISH". Затем есть акцентированные персонажи, иврит, кирилли, греческий, китайский, корейский и даже музыкант, ранее известный как принц.

Текст сообщения должен быть аналогичным образом не ограничен. Если сообщения могут содержать HTML, вам придется проанализировать HTML (с реальным анализатором HTML) и применить теги и атрибуты белых списков, чтобы разрешить только то, что вы ожидаете.

Телефонные номера тоже должны быть довольно близки к бесплатной форме. Североамериканские форматы отличаются от европейских, некоторым людям нравится говорить «(555) 555-5555», в то время как другие такие, как «555-555-5555», некоторые номера телефонов имеют расширения, а некоторые нет.

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

Длина, как правило, должна быть намного больше, чем вы думаете, что они должны удвоить (по крайней мере) ваше первое предположение с разумным максимумом. Разница в хранении между 20 символами для имени и 100 не будет важна для большинства приложений, поэтому будьте щедрыми.

Вы не должны беспокоиться о кодировке HTML до выхода, а затем вы должны использовать любые инструменты кодирования HTML и URL, которые поддерживает ваши среды, не пытайтесь создать свои собственные.

Не ограничивайте свои входные данные, будьте максимально свободными и прощающими. Будьте очень строги со своими выходами, хотя.

Максимальная длина: я всегда применяю максимальную длину на своих полях на стороне клиента и на стороне сервера. Значения соответствуют значениям MAX, установленным в базе данных.

Я согласен с побегом <,> и>, <.

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

Для каждого текстового поля сделайте это так, чтобы текстовое поле вообще не придерживалось недействительных значений.
Имя: AA-ZZ
Сообщение: 'aa-zz' '0-9' '.' ',' ';' так далее..
Номер телефона: «0-9» не допускайте места, но позволяйте '-', вы всегда можете проанализировать сторону сервера строк.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top