Я собираюсь использовать PHP в моем примере, но мой вопрос относится к любому языку программирования.
Всякий раз, когда я имею дело с формами, которые могут быть заполнены пользователями, которые не вошли в систему (другими словами, недоверенные пользователи), я делаю несколько вещей, чтобы гарантировать безопасное хранение в базе данных:
- Убедитесь, что все ожидаемые поля присутствуют в $ _POST (ни одно из них не было удалено с помощью такого инструмента, какas Firebug)
- Убедитесь, что в $ _POST нет неожиданных полей.Таким образом, поле в базе данных не перезаписывается случайно.
- Убедитесь, что все ожидаемые поля имеют ожидаемый тип (почти всегда «строка»).Таким образом, проблемы не возникают, если злонамеренный пользователь возится с кодом и добавляет «[]» в конец имени поля, что заставляет PHP рассматривать поле как массив, а затем выполняет проверки на нем, как будтоэто была строка.
- Убедитесь, что все обязательные поля были заполнены.
- Убедитесь, что все поля (как обязательные, так и необязательные) были заполнены правильно (например, адреса электронной почты)и номера телефонов в ожидаемом формате).
- Относится к предыдущему элементу, но заслуживает того, чтобы быть его собственным элементом: убедитесь, что поля, которые являются раскрывающимися меню, были представлены со значениями, которые фактически находятся в раскрывающемся меню.Опять же, пользователь может повозиться с кодом и изменить раскрывающееся меню на любое, что ему захочется.
- Очистите все поля на случай, если пользователь намеренно или непреднамеренно включил вредоносный код.
Я не верю, что все вышеперечисленное является излишним, потому что, как я уже говорил, пользователь, заполняющий форму, не является доверенным.
Однако, когда дело доходит до административных серверных частей, я не уверен, что всеиз этих вещей необходимы.Вот те вещи, которые я все еще считаю необходимыми:
- Убедитесь, что все обязательные поля заполнены.
- Убедитесь, что все поля (как обязательные, так и необязательные)были заполнены правильно (например, адреса электронной почты и номера телефонов в ожидаемом формате).
- Очистите все поля на случай, если пользователь намеренно или непреднамеренно включил вредоносный код.
Я рассматриваю возможность отбросить оставшиеся элементы, чтобы сэкономить время и получить меньше кода (и, следовательно, более читаемый код).Разумно ли это делать или стоит одинаково относиться ко всем формам независимо от того, заполняются ли они доверенным пользователем или нет?
Это единственные две причины, по которым я могу придумать, почемуможет быть целесообразно одинаково обращаться со всеми формами:
- Учетные данные доверенного пользователя могут быть обнаружены ненадежным пользователем.
- Компьютер доверенного пользователя может быть заражен вредоносным ПО, которое портит формы,Я никогда не слышал о таких вредоносных программах и сомневаюсь, что это то, о чем стоит действительно беспокоиться, но это все равно нужно учитывать.
Спасибо!