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

0

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

function set_posted_data(){
    $this->message = $_POST["message"];
}
Теги:
class
oop
post
setter

3 ответа

1
Лучший ответ

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

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, или изменится ключевое "сообщение" или вы получите эти данные каким-либо другим способом, вы просто измените его в этом ОДНОМ месте
  • вы можете дезинфицировать его здесь, и если вы измените способ, которым вы хотите его дезинфицировать, вы измените его и только здесь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню