web-dev-qa-db-ja.com

Laravel「 'X-Frame-Options'から 'SAMEORIGIN'」としてiFrameに表示することを拒否します。

だから私はLaravelでフォームを作成し、外部でホストしていますが、これをHTMLページ内に表示したいのですが、X-Frame-Optionsに問題があります。

正確なエラーメッセージは次のとおりです。

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

以前のStackOverflowの回答で、これはFrameGuardミドルウェアが原因であることがわかりましたが、これはその後削除され、コードの問題行はそのファイルにありません。

Laravelバージョン5.3。

また、フローリングを使用してNginx構成ファイルでX-Frame-Optionsを設定しようとしましたが、結果はありませんでした。

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

このエラーは複数のブラウザで発生しており、テスト済みです:Chrome&Safari

6
littleswany

フレームからの応答にヘッダーを設定します

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のミドルウェア配列の1つに追加できます。

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

または、特定のルートにのみ追加する場合は、ミドルウェアグループアレイの1つに追加します。

6
Joe

私の場合、nginxがアクセスを妨げていました。

実行:

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

そして、出力を確認します。

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

[〜#〜] deny [〜#〜][〜#〜] sameorigin [〜#〜]に置き換えた後、すべてが期待どおりに機能し始めました。

8
Daniel Camargo