Как обезопасить данные класса? Здравствуйте. Есть некий класс (потому что нужна теория) User, News, ... Как вы работаете с введенными данными?name = $name;
}
function getName(){
return $this->name;
}
}
$user = new User();
$user->setName('%Name+%');
echo $user->getName();
// как быть при записи в БД уже готового класса
// где, что проверит удобнее?
// или каждое значение потом экранировать,
$DB->query("INSERT ... $user->getName()");
Да, я могу проверить данные в контроллере, но вдруг появится возможность прямой записи в свойства. Или забить на это и полагаться на контроллер/модель, а в класс писать любые введенные данные?UPD: Спрашивали про паранойю. Банально, надо проверить вводной тип, пустоту, сравнить с заданными значениями... Я введу массив вместо цифры. Можно явно указать тип вводных данных, но это узко, возможно потребуется расширение логики.

21 Авг 2019 в 07:03
152 +1
0
Ответы
1

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

В вашем случае, в методе setName класса User, вы можете добавить фильтрацию данных, которая будет удалять или экранировать HTML теги, специальные символы и другие потенциально опасные элементы. Например, можно использовать функцию strip_tags() для удаления HTML тегов:

function setName($name){
$filteredName = strip_tags($name);
$this->name = $filteredName;
}

Также, можно использовать встроенные функции PHP для валидации данных, например, функцию filter_var() для проверки email адреса или числа:

function setName($name){
// Проверка на пустое значение
if(empty($name)){
// обработка ошибки или возврат
}
// Проверка на тип данных
if(!is_string($name)){
// обработка ошибки или возврат
}
// Другие проверки по необходимости
$this->name = $name;
}

Также, при работе с базой данных, рекомендуется использовать подготовленные запросы, чтобы предотвратить SQL инъекции. Используйте плейсхолдеры и параметры для передачи данных в запрос:

$stmt = $DB->prepare("INSERT INTO table_name (column_name) VALUES (?)");
$stmt->bind_param("s", $user->getName());
$stmt->execute();

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

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 424 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир