Установить суперклассовую переменную в классе или нет?

В классе есть простая функция, которая инициализирует переменную сообщения, устанавливая для нее значение POST. Есть ли смысл его устанавливать, так как $ _POST будет доступен в любом месте класса? Это вызывает какие-либо проблемы безопасности?

function set_posted_data(){
$this->message = $_POST["message"];
}

0

Решение

Я бы сделал это немного по-другому. К сожалению, я понятия не имею, как выглядит ваш класс, поэтому я должен сделать некоторые предположения. Прежде всего, я бы всегда начинал с общей функции:

public function setMessage($message) {
$this->message = $message;
}

Таким образом, вы все еще можете использовать класс, даже если сообщение не опубликовано. Теперь обычно я устанавливаю опубликованное значение следующим образом:

myclass.setMessage($_POST["message"]);

Так что я бы вообще не использовал суперглобальные классы в классе. Обычно я бы окружил это некоторыми проверками, поэтому принимаются только действительные сообщения. Вот где я сталкиваюсь с проблемами: я понятия не имею, что здесь делать, потому что я ничего не знаю о вашем коде. Но проверка длины может быть полезной, и, возможно, HTML-код недопустим и т. Д. Общие проверки могут быть включены в класс, например, без HTML:

public function setMessage($message) {
$this->message = strip_tags($message);
}

Я обработал бы все опубликованные параметры и сделал бы все определенные проверки, более или менее вместе. Это облегчает проверку безопасности кода.

1

Другие решения

Я предпочитаю инъекции для всего, кроме верхнего уровня функций. (Т.е. $class->function($_POST['val']) Причина инъекции является предпочтительной

  • Чем более абстрактным вы становитесь, тем больше вы можете повторно использовать свой код
  • Вам не нужно копаться в коде каждый раз, когда вы меняете переменную. Все, что вы меняете, это точка впрыска
1

Конечно, лучше делать так, как вы показываете, для этого есть несколько причин:

  • если в будущем вы измените его на $ _GET, или будет изменен ключ «message», или вы получите эти данные любым другим способом, вы просто измените их в этом ОДНОМ месте
  • Вы можете дезинфицировать его здесь, и если вы измените способ очистки, вы можете изменить его только здесь
1
По вопросам рекламы [email protected]