Проверка авторизации на ВСЕХ действиях контроллера, как GET, так и POST. Авторизуйтесь не для сеанса, а для каждого запроса еще раз.
Проверка сервера обязательна. Также обеспечьте некоторую целостность данных на уровне базы данных. Сбой, как только вы обнаружите какую-то исключительную ситуацию. Не пытайтесь восстановить и обработать все возможные сценарии, чтобы угодить пользователю.
Не полагайтесь на идентификацию пользователя, например, имя пользователя, хранящееся в файлах cookie. Это можно заменить. Добавьте что-то еще и уникальное для этого. Файлы cookie также могут быть украдены и переданы на другой компьютер. Рассмотрим вариант проверки IP-адреса (например), чтобы получить уверенность, что вас не обманули.
Ограничение количества операций пользователя за единицу времени. Не позволяйте делать 100 представлений в минуту.
Все пользовательские данные должны быть санированы. Да, беспокоиться о SQL-инъекциях.
Не хранить пароли в виде простого текста. Хэш их. Если кто-то проникнет в вашу систему, он может неправильно использовать пароли, предполагая, что у пользователя есть тот же пароль для доступа к своей учетной записи электронной почты, банковской системе и т. Д.
Еще одна хорошая идея - не использовать общедоступный псевдоним, адрес электронной почты или что-то еще, известное публично, как имя для входа. Разрешить пользователю использовать логин для выполнения операции входа и другое имя для публичного представления их на сайте.
На самом деле, проверьте эту тему. В нем содержится хорошее резюме такого рода знаний.
Что должен знать разработчик до создания общедоступного веб-сайта?