Ну, ладно, весь ВАШ код правильный. Что происходит, когда хакер заменяет ваш javascript одним из понравившихся ему, или просто отправляет сообщения POST и GET, как если бы это был ваш код?
Проверка на клиенте - это проблема юзабилити.
Проверка в точке USAGE является проблемой безопасности.
Этот последний пункт важен, потому что, если вы не проверяете в точке использования, вы делаете свой код сильно связанным. Если вы меняете модуль, он ломает вещи в другом месте, потому что вы проверили в неправильной точке.
Например, вы проверяете данные по SQL-инъекциям перед сохранением в базе данных SQL - библиотека сделает это за вас, если вы выберете подходящую. Вы проверяете данные по CSS, когда отображаете их как HTML. Но если вы предоставите данные в виде XML, RSS или JSON, то проверка будет другой - если вы проверили их только при вводе, вы не предотвратите эксплойты для других форматов, и ваша подпрограмма ввода будет привязана к выходу форматы, которые вы выбираете.