Посмотрите, что делает CGI :: Application :: Plugin :: ProtectCSRF . Этот модуль предназначен для CGI :: Application framework.
Не должно быть слишком сложно модифицировать модуль для других фреймворков.
По сути, пользовательские формы получают скрытое поле HTML, добавленное с созданным токеном, а объект сеанса получает тот же токен. Когда форма отправляется, токен, отправленный формой, сравнивается с токеном в объекте сеанса (который находится на сервере). Если они не совпадают, вероятно, произошел CSRF.
Существует также плагин Catalyst: Catalyst :: Controller :: RequestToken
Эти модули используют обработчики атрибутов, поэтому для существующего приложения требуется очень мало изменений.