Sessionstabell ingen ip-adress

Laravels databassessionstabell utan IP-adress och användaragentinsamling – GDPR-vänlig

Av någon konstig anledning samlar Laravel in IP-adresser och användaragenter i Session Database Table-drivrutinen.

Nästan alla sessionsdrivrutiner, förutom från databasdrivrutinen, verkar inte samla in IP-adresser.

Det enkla sättet

För att förhindra detta är det enklaste (nästan icke-kod) sättet att ändra kolumntyperna för ip-adressen och användaragenten i migreringen av sessionsdatabastabellen till boolesk istället för varchar.

Schema::create('sessions', function (Blueprint $table) { $table->string('id')->primary(); $table->foreignId('user_id')->nullable()->index();
    $table->boolean('ip_address')->nullbar(); $table->boolean('user_agent')->nullable();
    $table->text('nyttolast'); $table->integer('last_activity')->index(); });

I det här exemplet reduceras ip-adressen och användaragenten till små heltal, vilket bara lämnar den första oktetten.

Eftersom sessionerna endast söks på id och inte på ip-adress eller användaragent verkar detta säkert. Men verifiera alltid detta själv. Om Laravel-koden någonsin skulle uppdateras för att söka på användaragent och ip-adress, kan slumpmässiga sessioner väljas, vilket kan bli en sårbarhet.

Det kan också hända att ip + användaragentdata fortfarande kommer att loggas i MySQL-loggar eller andra loggar. Så koden nedan kan vara mer robust.

Det finns andra sätt genom att skriva över/förlänga sessionsdrivrutinen:

🤓😎 Fler och fler människor får våra tips om nördar, integritet, utveckling och livsstil

Vill du få de senaste bloggarna om nördar, integritet, utveckling och livsstil? Prenumerera på vårt nyhetsbrev.

Kodvägen

Det ledde till kodvägen. Jag tycker att detta är det mest eleganta sättet. Du kan också skapa en anpassad drivrutin för databassession:

app/Providers/AppServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Pagination\Paginator;
use Illuminate\Support\ServiceProvider;

// Session part
use App\Extensions\SimpleDatabaseSessionHandler;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Support\Facades\Session;
use Illuminate\Database\ConnectionInterface;

class AppServiceProvider extends ServiceProvider
{


    /**
     * Register any application services.
     */
    public function register(): void
    {
           //
    }
 
    /**
     * Bootstrap any application services.
     */
    public function boot(ConnectionInterface $connection): void
    {

        Session::extend('database-simple', function (Application $app) use ($connection) {
            $table   = \Config::get('session.table');
            $minutes = \Config::get('session.lifetime');
            return new SimpleDatabaseSessionHandler($connection, $table, $minutes);
        });
           

    }

}

Lägg sedan till filen app\Extensions\SimpleDatabaseSessionHandler.php . Detta skriver över den extra ip-adressen och användaragentinformationen som läggs till.

<?php
 
namespace App\Extensions;

use Illuminate\Session\DatabaseSessionHandler;
 
class SimpleDatabaseSessionHandler extends DatabaseSessionHandler
{
    /**
     * Add the request information to the session payload.
     *
     * @param  array  $payload
     * @return $this
     */
    protected function addRequestInformation(&$payload)
    {
        return $this;
    }
}

Och ändra slutligen din sessionsdrivrutin i config/session.php till:

'driver' => 'databas-enkel',

Du behöver inte ändra databasmigreringen på detta sätt.

Använd på egen risk såklart, testa det väl och om du upptäcker några buggar, vänligen meddela oss :).

Senast uppdaterad 21 november 2023

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

sv_SESvenska
Bläddra till toppen