2017-01-20 15 views
2

Итак, я создал форму в Laravel и размещаю externally, но хочу отобразить это на HTML-странице, но у меня проблемы с X-Frame-Options.Laravel отказывается отображать в iFrame как «X-Frame-Options» в «SAMEORIGIN». »

Точное сообщение об ошибке:

Refused to display 'url' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'. 

Я видел на предыдущих StackOverflow отвечает, что это связано с FrameGuard Middleware, но это с тех пор были удалены, и проблема строка кода не в этом файле.

Laravel Version 5.3.

Я также попытался установить X-Frame-Options в файле конфигурации Nginx с помощью напольного покрытия без результата:

sed -i 's/http\ {/http\ {\nadd_header X-Frame-Options SAMEORIGIN, false;\n\n/' /etc/nginx/nginx.conf 

Эта ошибка происходит в нескольких браузерах, испытано: Chrome & Safari

ответ

2

Установите заголовок на ответ от кадра к

X-Frame-Options: ALLOW-FROM https://example.com/ 

где example.com является областью запроса формы.

Вы можете использовать промежуточное программное обеспечение в laravel для этого.

Создать новое промежуточное программное обеспечение.

php artisan make:middleware FrameHeadersMiddleware 

затем в функции ручки промежуточных вы только что создали что-то вроде:

namespace App\Http\Middleware; 
use Closure; 

public function handle($request, Closure $next) 
{ 
    $response = $next($request); 
    $response->header('X-Frame-Options', 'ALLOW FROM https://example.com/'); 
    return $response; 
} 

Вы можете добавить это к одному из промежуточных программных массивов в Kernel.php

protected $middleware = [ 
    App\Http\Middleware\FrameHeadersMiddleware::class 
]; 

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

+0

Спасибо, я пробовал это, но не работал в файле конфигурации nginx, есть ли где-нибудь еще, что я мог бы попробовать? – littleswany

+0

@littleswany делает этот заголовок обратно в ответ от формы? – Joe

+0

Нет такой же опции происхождения, даже когда она установлена ​​в вашем ответе в nginx, поэтому я думаю, что laravel меняет ее. – littleswany

3

В моем случае nginx был единственным, препятствующим доступу.

Пробег:

grep -ri "X-Frame-Options" /etc/nginx   

И проверьте вывод:

/etc/nginx/snippets/ssl-params.conf:add_header X-Frame-Options DENY; 

После замены ОТРИЦАТЬ в SAMEORIGIN все начали работать, как ожидалось.

+0

Да, сэр, это тоже моя проблема.Я вместо этого просто прокомментировал строку, так как мое желание - позволить моей странице быть iframed где-нибудь –

+0

Это было решение, которое сработало и для меня. – Alin