Предотвращение CSRF для вещей, которые не являются частью форм в codeigniter

Я знаю, что у Codeigniter есть очень полезный класс безопасности, который может предотвратить CSRF/XSRF, если вы используете помощники формы, но поскольку структура URL-адреса CI вызывает множество функций в значительной степени напрямую, как я могу предотвратить CSRF для таких вещей, как /action/logout, не имея дополнительная форма подтверждения, как у SE?

Идеи, которые у меня были:

  • Проверить реферер страницы
  • Проверить запрошенный тип MIME (даже возможно?) (для изображения CSRF, такого как <img src="http://example.com/action/logout" />)
  • Сделать все действия частью формы (не желательно)
  • Включите токен CSRF в URL-адрес страницы (уродливо и очень плохо, пользователи любят копировать и вставлять URL-адреса, не обращая внимания на сохраненные идентификаторы сеансов или другую личную информацию).

Я не буду защищать такие вещи, как /account/view/1/cyclone/, так как они не выполняют никаких действий и в лучшем случае будут пустой тратой трафика.

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


person Cyclone    schedule 08.08.2011    source источник


Ответы (1)


Как правило, любой запрос формы, выполняющий действие, должен использовать POST. Для всего остального разрешено GET. Использование POST определенно поможет. Я считаю, что вы также можете включить токен в качестве скрытого поля в форму вместо уродливой строки в URL-адресе. Что касается проверки запрошенного типа MIME, то это невозможно. Сделайте print_r($_SERVER) и там будет в основном все, что вы получаете от пользователя, а также на стороне сервера.

person Mike    schedule 08.08.2011
comment
Как насчет примера выхода из системы, который я привел? - person Cyclone; 08.08.2011
comment
Если вы используете токен, этого должно быть достаточно, однако использование POST вместо GET добавит дополнительный уровень безопасности. Настоятельно рекомендуется прочесть Essential PHP Security Криса Шифлетта, а главу о CSRF можно загрузить по адресу phpsecurity. org/ch02.pdf - person Mike; 08.08.2011