CSRF-атака обнаружена при отправке данных с использованием ajax - PullRequest
3 голосов
/ 06 февраля 2010

Я пытаюсь отправить форму, используя jquery в symfony 1.4, но CSRF-атака обнаруживает ошибку, которая появляется каждый раз. Это код, который я использую для отправки данных формы:

$.ajax({
      type: 'post',
      cache: false,
      url: $('#assign-form form').attr('action'),
      data: (
        'activity[id]=' + $('#activity_id').val() +
        '&activity[_csrf_token]=' + $('#activity__csrf_token').val() +
        '&activity[assigned_to_user_id]=' + $('#activity_assigned_to_user_id').val() +
        '&activity[assigned_to_group_id]=' + $('#activity_assigned_to_group_id').val()
      )
});

Я что-то упустил?

Спасибо, Radu.

Ответы [ 5 ]

1 голос
/ 06 февраля 2010

Следует обратить внимание на то, является ли объект Form, который проверяет входные данные, тем же классом, что и тот, который сгенерировал токен. По умолчанию этот класс используется при генерации токена CSRF.

Если, например, у вас есть экземпляр подкласса формы, используемой для создания html-формы, а затем вы отправили сообщение в действие, в котором используется класс формы-предка, проверка, скорее всего, по умолчанию завершится неудачей.

Можно отменить создание токена, если выяснится, что это ваша проблема.

Кроме того, вы проверили, что значение поля токена действительно включает токен? Консоль.log () может помочь вам обнаружить это.

Э-э ... когда я посмотрю ближе к вашему коду, еще одна вещь, на которую стоит обратить внимание, это то, что вы создаете строку запроса для передачи 'data'. Вы пытались передать фактический объект в стиле JSON?

0 голосов
/ 17 сентября 2010

$ ('# activity__csrf_token'). Val ()

Вы подразумевали двойное подчеркивание в этом элементе id?

0 голосов
/ 22 июня 2010

Действительно ли сессионный cookie получил его с помощью ajax-запроса?ваш файл cookie сеанса, возвращаемый сервером, должен совпадать с простым HTTP-запросом (например, первым запросом, инициирующим управление сеансом) и с XMLHttpRequest, в противном случае у вас возникнут проблемы с CSRF.

0 голосов
/ 09 февраля 2010

Эта маленькая проблема свела меня с ума в прошлом.

Если для вас приемлемо отключить защиту CSRF для этой конкретной формы (которой это часто может быть), вы можете добавить следующее в свой класс Form в папке / lib / form / ...:

public function configure ()

  $this->disableLocalCSRFProtection();

Я полагаю, что можно отключить CSRF и для конкретного экземпляра формы, если вы не всегда хотите отключить его, но я не пробовал этого / у меня нет кода под рукой.

0 голосов
/ 06 февраля 2010

Обычная причина в том, что браузер не принимает куки-файлы - проверяли ли вы, что куки-файлы возвращаются в соответствии с ожиданиями (например, iehttpheaders, wireshark, tamperdata)?

Вы настроили секрет в settings.yml?

С

...