Как я могу предотвратить подделку межсайтовых запросов с помощью Perl и Apache? - PullRequest
2 голосов
/ 09 мая 2009

Есть ли какая-нибудь прозрачная библиотека, которую я могу использовать, или что-то более простое, чтобы я мог предотвратить подделку межсайтовых запросов (CSRF) с Perl и Apache? Как я могу генерировать токены для форм и проверять их на стороне сервера?

Ответы [ 2 ]

9 голосов
/ 02 декабря 2009

Посмотрите, что делает CGI :: Application :: Plugin :: ProtectCSRF . Этот модуль предназначен для CGI :: Application framework.

Не должно быть слишком сложно модифицировать модуль для других фреймворков. По сути, пользовательские формы получают скрытое поле HTML, добавленное с созданным токеном, а объект сеанса получает тот же токен. Когда форма отправляется, токен, отправленный формой, сравнивается с токеном в объекте сеанса (который находится на сервере). Если они не совпадают, вероятно, произошел CSRF.

Существует также плагин Catalyst: Catalyst :: Controller :: RequestToken

Эти модули используют обработчики атрибутов, поэтому для существующего приложения требуется очень мало изменений.

1 голос
/ 09 мая 2009

Для защиты от «подделки межсайтовых запросов» со стороны сервера лучше всего:

  1. Используйте HTML escape. Если вы используете какую-то систему шаблонов, например Template Toolkit, вы должны использовать ее возможности escape. Если вы используете CGI.pm, для этого есть подпрограмма escapeHTML.
  2. Ограничьте время жизни файлов cookie сеанса относительно короткими периодами. Для CGI :: Session это можно сделать с помощью $ session-> expire ($ time).
  3. Проверка реферера при выводе уязвимых страниц.
  4. Не использовать / принимать GET-запрос для изменения данных.

Это зависит от структуры, но просто.

...