IE8: отправка формы в iFrame не работает

#forms #iframe #symfony1 #internet-explorer-8 #csrf

#формы #iframe #symfony1 #internet-explorer-8 #csrf

Вопрос:

У меня есть набор фреймов с iFrame с формой в нем. Когда я отправляю форму, IE8 не отправляет значения формы. Firefox работает. Без внешнего набора фреймов это работает.

Это мой код:

form.php:

 <form method="post" action="doit.php" name="myForm" id="myForm" target="myFrame">
  <input type="hidden" id="customer__csrf_token" name="customer[_csrf_token]" value="0136dba17fc1a81dc2c3b44dcb513712" />
  ...
  <a onClick="document.myForm.submit();">Send</a>
</form>
  

site.html:

 <iframe id="myFrame" name="myFrame" src="form.php" frameborder="0" >foo</iframe>
  

index.html:

 <html>
  <head></head>
    <frameset rows='100%,*'>
      <frame name='target' src='site.html'>
      <noframes>foo</noframes>
    </frameset>
</html>
  

Я также пытался отправить форму с помощью этих вызовов:

 $('#myForm').submit();
document.forms['myForm'].submit();
parent.frames['myFrame'].document.forms['myForm'].submit();
<input type="submit" value="send" name="send" id="send" />
  

Можете ли вы мне помочь?

Редактировать:

Я нашел проблему. Я использую фреймворк symfony. symfony использует скрытый токен csrf в сочетании со значением cookie для обеспечения передачи формы. По какой-то причине в моем случае IE8 не может сохранить этот файл cookie. Теперь я удалил токен csrf из формы, чтобы заставить ее работать правильно.

Комментарии:

1. Поймите, что, удаляя значение CSRF из формы, вы открываете себя для атак CSRF. Это может иметь большое значение, а может и не иметь, в зависимости от того, что делает форма.

2. Спасибо, ваш вопрос и последующее РЕДАКТИРОВАНИЕ: указали мне на ошибку, с которой я также столкнулся. 1

Ответ №1:

CSRF не был основной проблемой. Проблема в моем случае была вызвана настройками безопасности IE. IE не разрешает.o. cookies из доменов с подчеркиванием в нем. Мой домен былfoo_bar.dev.domain.com , после преобразования ее в foo-bar.dev.domain.com это сработало, также с включенным CSRF.