Как обезопасить данные класса? Здравствуйте. Есть некий класс (потому что нужна теория) 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
168 +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
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир