Биди пост-запрос запрещен, но получить запрос работает - PullRequest
0 голосов
/ 25 марта 2020

Я делаю запросы на получение и публикацию примерно так:

(http-cljs.client/get "someurl.com/my")

и

(http-cljs.client/post "someurl.com/my")

На сервере у меня есть маршрут:

{"/my" do-something}

Пока что-то работает с запросом get, это не относится к почте, а в клиенте я получаю 403 запрета. В ответ я получаю «Неверный токен подделки».

Это промежуточное программное обеспечение, которое я использую:

(defn config []
  {:http-port  (Integer. (or (env :port) 5000))
   :middleware [[wrap-defaults site-defaults]
                wrap-with-logger
                wrap-gzip

                [wrap-reload {:dir "../../src"}]

                wrap-params
                wrap-keyword-params
                wrap-json-body
                wrap-edn-params

                ]})

Однако, когда я использую api-default, нет запрета 403, и это происходит только с site-defaults. Почему это так?

1 Ответ

0 голосов
/ 25 марта 2020

Конфигурация для wrap-defaults, которая является site-defaults, включит anti-forgery-middleware

Если вы посмотрите на строку do c wrap-anti-forgery, вы найдете:

"Middleware that prevents CSRF attacks. Any POST request to the handler
  returned by this function must contain a valid anti-forgery token, or else an
  access-denied response is returned.

  The anti-forgery token can be placed into a HTML page via the
  *anti-forgery-token* var, which is bound to a (possibly deferred) token.
  The token is also available in the request under
  `:anti-forgery-token`.

  By default, the token is expected to be POSTed in a form field named
  '__anti-forgery-token', or in the 'X-CSRF-Token' or 'X-XSRF-Token'
  headers.

  Accepts the following options:

  :read-token     - a function that takes a request and returns an anti-forgery
                    token, or nil if the token does not exist

  :error-response - the response to return if the anti-forgery token is
                    incorrect or missing

  :error-handler  - a handler function to call if the anti-forgery token is
                    incorrect or missing

  :strategy       - a strategy for creating and validating anti-forgety tokens,
                    which must satisfy the
                    ring.middleware.anti-forgery.strategy/Strategy protocol
                    (defaults to the session strategy:
                    ring.middleware.anti-forgery.session/session-strategy)

  Only one of :error-response, :error-handler may be specified.

Защита от подделки форм используется для предотвращения повторных атак. Больше информации о CSRF-атаках здесь: https://en.wikipedia.org/wiki/Cross-site_request_forgery

...