Большинство современных фреймворков имеют это из коробки. Если проект на стадии разработки - я бы его делал на базе фреймворка, например yii2 и не изобретал велосипед заново. Там есть и CSRF валидация и валидация форм и есть возможность использовать REST