Очистить входные данные массива $_POST и $_GET ООП

#php #sanitization

#php #очистка

Вопрос:

У меня есть этот код из метода класса, который я хочу использовать для обработки данных перед передачей их в базу данных. Я не уверен в том, как действовать дальше, потому что обычно я предпочитаю использовать ajax и контроллер, отличный от ООП, для очистки различных данных. Я не уверен, использовать ли filter_var_array or filter_input_array для решения этой задачи. Если у кого-нибудь есть предложения по поводу этой задачи, я буду признателен.

Вот пример моего кода:

 <?php

class UserRegistration{

  public function registration($data = null){
    echo $this->view->registrationForm();

    if( isset($_POST['register']) ){
      $data = [
        $_POST['username'],
        $_POST['email'],
        password_hash($_POST['password'], PASSWORD_BCRYPT, ['cost'=>11])
      ];

      if( $this->sanitizeData($data) ){
        echo $this->view->registrationSuccess();
      }
    }

  }

  private function sanitizeData(array $data){
    $args = ['username'=> FILTER_SANITIZE_STRING, 'email'=> FILTER_SANITIZE_EMAIL, 'password'=> FILTER_SANITIZE_STRING ];
    $sanitized_data = filter_var_array($data, $args);
    return $sanitized_data;
  }

}
?>
  

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

1. Просто используйте подготовленные инструкции.

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

Ответ №1:

Вам не нужно очищать данные перед сохранением их в базу данных. Больше информации здесь https://security.stackexchange.com/questions/95325/input-sanitization-vs-output-sanitization

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

1. Почему? По моему опыту, также, если я использую подготовленные инструкции, я всегда предпочитаю очистить данные перед сохранением их в базу данных. Я прочитаю предложенную ссылку, спасибо

2. Потому что вы изменяете входящие данные. Вам необходимо использовать подготовленную инструкцию, чтобы избежать sql-инъекций и очистить данные при отображении данных пользователю, чтобы избежать атаки xss

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

4. Никакого риска, если вы не забудете очистить данные при их отображении. Честно говоря, очистка выходных данных должна быть включена по умолчанию. В противном случае вероятность забыть очистить его близка к 100%. В современных фреймворках это включено по умолчанию и не требует очистки входных данных.

5. Хорошо, я беспокоился о внедрении SQL, на самом деле я всегда использовал подготовленную инструкцию для очистки данных, у меня никогда не было проблем, но я попытаюсь создать следующее веб-приложение, пропустив эту меру безопасности.