Phoenix / Elixir: CSRF с применением внешнего интерфейса - PullRequest
0 голосов
/ 12 декабря 2018

Я использую для интерфейса, Phoenix / elixir для API-сервера и nginx для обратного прокси.

Я ударил стену, когда пытался сделатьФорма для загрузки файлов.Как мне работать с csrf?

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Использование CSRF

CSRF предоставляет множество преимуществ безопасности, особенно для веб-приложений, основанных на сеансах, поэтому может иметь смысл продолжать его использовать (если вы не используете что-то вроде ).Обычно это может быть немного сложнее во внешнем SPA, но основной процесс заключается в следующем:

  1. Визуализация токена CSRF (обычно в скрытом поле или переменной JS) с использованием get_csrf_token/0 на вашей веб-странице при первоначальном запросе

  2. Считайте значение и отправьте его обратно на сервер в заголовке запроса X-CSRF-TOKEN в последующем звонки

  3. Через некоторое время заново создайте новый токен CSRF на сервере и отправьте его обратно в заголовки ответа существующего запроса или в ответе на выделенный запрос только для токена

  4. Сохраните его в своем веб-приложении для следующего не GET запроса

(при условии, что ваш SPA не являетсяполностью отдельный интерфейсный интерфейс и, по крайней мере, частично рендерится на сервере)


Вот некоторые другие ресурсы:

0 голосов
/ 12 апреля 2019

Если вы взаимодействуете только со своим бэкэндом через AJAX, вы можете отключить защиту CSRF в пользу запроса настраиваемого заголовка запроса, за рекомендацию OWASP .

0 голосов
/ 12 декабря 2018

Отключить CSRF

Если вы не используете сеансы на своем API-сервере (и, например, используете что-то вроде токенов аутентификации), простейшим вариантом будет отключить CSRF .Это можно сделать, удалив штекер :protect_from_forgery из конвейера маршрутизатора:

pipeline :browser do
  plug :accepts, ["html"]
  plug :fetch_session
  plug :fetch_flash
  # plug :protect_from_forgery ## REMOVE THIS
end

Примечание: SPA обычно используют :api конвейер, где это исключено по умолчанию

...