From 01690a6ab04076dca39647ed9b4e6752a6981e9a Mon Sep 17 00:00:00 2001
From: Dominik Pfennig <dominik@suma-ev.de>
Date: Wed, 18 Jan 2017 12:20:05 +0100
Subject: [PATCH] =?UTF-8?q?Alle=20Admin=20Unterseiten=20sind=20nur=20noch?=
 =?UTF-8?q?=20zug=C3=A4nglich,=20wenn=20man=20autorisiert=20ist?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/Http/Kernel.php                  | 13 +++++++------
 app/Http/Middleware/RefererCheck.php | 26 ++++++++++++++++++++++++++
 resources/views/errors/403.blade.php |  8 ++++++++
 routes/web.php                       | 10 ++++++----
 4 files changed, 47 insertions(+), 10 deletions(-)
 create mode 100644 app/Http/Middleware/RefererCheck.php
 create mode 100644 resources/views/errors/403.blade.php

diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 54f78aa05..308d74c64 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -47,11 +47,12 @@ class Kernel extends HttpKernel
      * @var array
      */
     protected $routeMiddleware = [
-        'auth'       => \Illuminate\Auth\Middleware\Authenticate::class,
-        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
-        'bindings'   => \Illuminate\Routing\Middleware\SubstituteBindings::class,
-        'can'        => \Illuminate\Auth\Middleware\Authorize::class,
-        'guest'      => \App\Http\Middleware\RedirectIfAuthenticated::class,
-        'throttle'   => \Illuminate\Routing\Middleware\ThrottleRequests::class,
+        'auth'          => \Illuminate\Auth\Middleware\Authenticate::class,
+        'auth.basic'    => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
+        'bindings'      => \Illuminate\Routing\Middleware\SubstituteBindings::class,
+        'can'           => \Illuminate\Auth\Middleware\Authorize::class,
+        'guest'         => \App\Http\Middleware\RedirectIfAuthenticated::class,
+        'throttle'      => \Illuminate\Routing\Middleware\ThrottleRequests::class,
+        'referer.check' => \App\Http\Middleware\RefererCheck::class,
     ];
 }
diff --git a/app/Http/Middleware/RefererCheck.php b/app/Http/Middleware/RefererCheck.php
new file mode 100644
index 000000000..b0beae57f
--- /dev/null
+++ b/app/Http/Middleware/RefererCheck.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+
+class RefererCheck
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        $refererCorrect = env('referer_check');
+        $referer        = $request->server('HTTP_REFERER');
+        if ($refererCorrect !== $referer) {
+            abort(403, 'Unauthorized');
+        } else {
+            return $next($request);
+        }
+    }
+}
diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php
new file mode 100644
index 000000000..645d11f96
--- /dev/null
+++ b/resources/views/errors/403.blade.php
@@ -0,0 +1,8 @@
+@extends('layouts.subPages')
+
+@section('title', 'Fehler 403 - Unautorisiert')
+
+@section('content')
+<h1>Unautorisiert</h1>
+<p>Sie haben leider keine Rechte auf dieses Dokument zuzugreifen.</p>
+@endsection
diff --git a/routes/web.php b/routes/web.php
index 630d9f442..1f35c2a80 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -127,10 +127,12 @@ Route::group(
                 ->with('navbarFocus', 'dienste');
         });
 
-        Route::get('admin', 'AdminInterface@index');
-        Route::get('admin/count', 'AdminInterface@count');
-        Route::get('admin/check', 'AdminInterface@check');
-        Route::get('admin/engines', 'AdminInterface@engines');
+        Route::group(['middleware' => ['referer.check'], 'prefix' => 'admin'], function () {
+            Route::get('/', 'AdminInterface@index');
+            Route::get('count', 'AdminInterface@count');
+            Route::get('check', 'AdminInterface@check');
+            Route::get('engines', 'AdminInterface@engines');
+        });
 
         Route::get('settings', 'StartpageController@loadSettings');
 
-- 
GitLab