Входящие данные не надо защищать. Их нужно очищать от потенциально опасных включений.
Если данные пойдут в базу - пропускать их через плейсхолдеры и никогда не включать в запросы "сырые" строки.
Если данные будут выводиться пользователю - превращать любые символы, используемые в разметке, в HTML-версию этих символов.
Если данные сохраняются в файлы - убедиться, что в этих файлах именно данные ожидаемого типа и что они недоступны по прямому запросу.
Ну, и внутренняя логика не должна зависеть от входящих данных - все управляющие элементы должны оставаться на сервере, так как снаружи может прийти все, что угодно. В принципе.
Конец статьи.