Безопасность ООП / проверка внутри или вне методов?

#php #oop #methods #escaping

#php #ооп #методы #экранирование

Вопрос:

У меня есть класс, который используется для вставки данных в базу данных, и информация, передаваемая методам этого класса, должна экранироваться и проверяться. Какова наилучшая практика для проверки и экранирования данных? Должно ли это быть сделано внутри реализации метода, или это должно быть сделано в файле сценария, который использует класс, чтобы информация была действительной и защищенной перед переходом в класс? В прошлом я делал это обоими способами и всегда задавался вопросом, каким способом это делало большинство людей. (Я пишу на PHP, если это имеет значение, но для меня это больше похоже на вопрос общей практики программирования.)

Спасибо!

Ответ №1:

Это в некоторой степени зависит от типа используемой вами архитектуры в отношении обработки ваших данных, но…

В общем, классы, которые вставляют данные в базу данных (давайте назовем их классами сохранения), должны выполнять экранирование SQL. Если значения должны быть определенных типов (например, VARCHAR, INT), он также может проверить их или предоставить базе данных выдавать ошибку для неправильных типов данных.

Для более конкретной проверки, вероятно, было бы хорошей идеей включить ее в ваши доменные модели или другой код, который обрабатывает непосредственные входные данные (например. ПОЛУЧИТЬ и ОПУБЛИКОВАТЬ).

Если вы используете объекты модели предметной области, они должны содержать метод, который можно использовать, чтобы убедиться, что они допустимы, или, альтернативно, они не должны принимать данные, которые не являются допустимыми в соответствии с требованиями модели. Класс persistence мог бы тогда просто обрабатывать объекты домена или через репозиторий объекта домена.

В более простом сценарии, когда у вас есть только скрипт с меньшим количеством отдельных слоев, проверка данных, вероятно, должна быть выполнена до того, как скрипт передаст данные классу persistence. (В PoEAA это, вероятно, ближе всего к шаблону сценария транзакции, если вам интересно)

Комментарии:

1. Таким образом, в основном любой вид экранирования, который необходим для защиты базы данных, должен выполняться в реализации метода, но любая другая проверка должна быть выполнена до того, как она будет передана методу. Это в основном то, что я обычно делаю.

Ответ №2:

Я думаю, что данные должны быть проверены, прежде чем передавать их в метод сохранения.

Экранирование должно быть частью реализации метода сохранения с использованием подготовленных инструкций.

Вопросы безопасности аутентификации и авторизации являются сквозными проблемами. Они относятся к аспектам, если ваш язык их поддерживает.