Posted in

Añadir Cabeceras de seguridad en Laravel 4 y 5

Si usamos la aplicación web gratuita https://securityheaders.com veremos como nos devuelve “errores y warnings” de problemas de seguridad en nuestra web que podemos solucionar mediante el uso de cabeceras.

Laravel 4.2

En el caso de Laravel 4.2 añadiremos las cabeceras en el archivo filter.php de la siguiente forma:

App::after(function($request, $response)
{
	header_remove('X-Powered-By');
	header_remove('Server');
	$response->headers->set('Referrer-Policy', 'no-referrer-when-downgrade');
        $response->headers->set('X-Content-Type-Options', 'nosniff');
        $response->headers->set('X-XSS-Protection', '1; mode=block');
        $response->headers->set('X-Frame-Options', 'SAMEORIGIN');
        $response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload');
        $response->headers->set('Feature-Policy', "vibrate 'self'");
        $response->headers->set('Content-Security-Policy', "style-src 'self' 'unsafe-inline' *.googleapis.com *.google.com *.gstatic.com; script-src 'self' 'unsafe-inline' *.googleapis.com *.google.com *.gstatic.com");
});

Laravel 5

Para añadir estos headers haremos los siguiente, primero creamos nuestra clase en \Http\Middleware que la llamaremos en este ejemplo SecurityHeaders.php y añadiremos el siguiente código:

<?php
namespace App\Http\Middleware;
use Closure;

class SecurityHeaders {

    private $hiddenHeaders = [
        'X-Powered-By',
        'Server',
    ];

    public function handle($request, Closure $next){
        $this->removeHiddenHeaders($this->hiddenHeaders);
        $response = $next($request);
        $response->headers->set('Referrer-Policy', 'no-referrer-when-downgrade');
        $response->headers->set('X-Content-Type-Options', 'nosniff');
        $response->headers->set('X-XSS-Protection', '1; mode=block');
        $response->headers->set('X-Frame-Options', 'SAMEORIGIN');
        $response->headers->set('Strict-Transport-Security', 'max-age:31536000; includeSubDomains');
        $response->headers->set('Feature-Policy', "vibrate 'self'");
        //$response->headers->set('Content-Security-Policy', "style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'");
        //$response->headers->set('Content-Security-Policy', "style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://www.google.com; script-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://www.google.com");
        $response->headers->set('Content-Security-Policy', "style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; script-src 'self' 'unsafe-inline' https://fonts.googleapis.com");
        return $response;
    }

    private function removeHiddenHeaders($headers){
        foreach ($headers as $header){
            header_remove($header);
        }
    }
}

Abriremos el archivo \Http\Kernel.php y añadiremos en la función middleware lo siguiente:

\App\Http\Middleware\SecurityHeaders::class,

De esta forma, en este ejemplo tenemos cubiertas las cabeceras Referrer-Policy, X-Content-Type-Options, Feature-Policy entre otras.

Mas información sobre las cabeceras disponibles

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *


The reCAPTCHA verification period has expired. Please reload the page.