mawuekom/laravel-security-features

一系列以安全为重点的功能 💪

v1.0.0 2021-06-13 00:35 UTC

This package is auto-updated.

Last update: 2024-09-25 05:10:47 UTC


README

本软件包为您提供了许多针对 Laravel 或 Lumen 项目的安全功能

安装

您可以通过 composer 安装此软件包

composer require mawuekom/laravel-security-features

Laravel

前往 config/app.php,并在 providers 键中添加以下内容

'providers' =>
    ...
    Mawuekom\SecurityFeatures\SecurityFeaturesServiceProvider::class
    ...
];

发布软件包配置

php artisan vendor:publish --provider="Mawuekom\SecurityFeatures\SecurityFeaturesServiceProvider"

Lumen

前往 bootstrap/app.php,并在指定键中添加以下内容

$app ->register(Mawuekom\SecurityFeatures\SecurityFeaturesServiceProvider::class);

中间件

现代安全中间件已被添加,以确保我们的 API 或项目比默认安装更为坚固。

互联网是一个危险的地方,当我们是非安全意识的开发者时,我们常常会犯下容易避免的错误。

App ID

这是某人需要发送以访问您应用程序的标识符。

这允许您为不需要认证的端点添加一层烦恼,例如,提供某些变量给应用程序的端点,但您不想将其硬编码到应用程序中。

这对于根据相关应用程序从公共端点提供不同的配置信息也很有用,例如白标。

在 .env 中设置 APP_ID 并将中间件包装在您的路由中。

示例 HTTP 头部

App: 609DDCAC-6863-460F-8A3C-8ADFBDD4CFA6
  • Laravel

前往 App\Http\Kernel.php,并在 $routeMiddleware 中添加以下内容

protected $routeMiddleware = [
   ...
   'app_id' => Mawuekom\SecurityFeatures\Http\Middleware\AppIDMiddleware::class
   ...
];
  • Lumen

前往 bootstrap/app.php,并在 $app->routeMiddleware 中添加以下内容

$app ->routeMiddleware([
   ...
   'app_id' => Mawuekom\SecurityFeatures\Http\Middleware\AppIDMiddleware::class
   ...
]);

注册访问密钥

使用此密钥限制对注册端点的访问,以添加一层烦恼。

这对于允许端点(如新闻通讯注册等)在提交之前知道密钥很有用。

在 .env 中设置 REGISTRATION_ACCESS_KEY 并将中间件包装在您的路由中。

示例 HTTP 头部

Registration-Access-Key: 7D88D948-9E50-4EEB-A406-B3A87846918B
  • Laravel

前往 App\Http\Kernel.php,并在 $routeMiddleware 中添加以下内容

protected $routeMiddleware = [
   ...
   'register' => Mawuekom\SecurityFeatures\Http\Middleware\RegisterKeyMiddleware::class
   ...
];
  • Lumen

前往 bootstrap/app.php,并在 $app->routeMiddleware 中添加以下内容

$app ->routeMiddleware([
   ...
   'register' => Mawuekom\SecurityFeatures\Http\Middleware\RegisterKeyMiddleware::class
   ...
]);

速率限制

允许您为每个路由设置请求的次数限制。

这对于减轻 DDoS、暴力破解和洪水式攻击很有用。

'throttle:3,1' 表示每分钟 3 次请求。'throttle:300,1' 表示 300。

某些常用路由具有默认的速率限制。

返回包含有关这些路由上剩余请求次数以及禁令何时到期等信息的首部。

在限制之前

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 5

超过限制后,您将收到 429 Too Many Requests 错误,并且响应体包含

Too many consecutive attempts. Try again in 5s
  • Laravel

前往 App\Http\Kernel.php,并在 $routeMiddleware 中添加以下内容

protected $routeMiddleware = [
   ...
   'throttle' => Mawuekom\SecurityFeatures\Http\Middleware\ThrottleRequests::class
   ...
];
  • Lumen

前往 bootstrap/app.php,并在 $app->routeMiddleware 中添加以下内容

$app ->routeMiddleware([
   ...
   'throttle' => Mawuekom\SecurityFeatures\Http\Middleware\ThrottleRequests::class
   ...
]);

常见安全头部

包含一组适用于支持它们的浏览器的常见安全头部。

这有助于防御多种不同类型的常见攻击。

内容安全策略

良好的内容安全策略有助于检测和缓解某些类型的攻击,包括跨站脚本(XSS)和数据注入攻击。

内容安全策略(CSP)需要仔细调整和精确定义策略。如果启用,CSP 对浏览器渲染页面的方式有重大影响(例如,默认禁用内联 JavaScript,必须在策略中明确允许)。CSP 防止各种攻击,包括跨站脚本和其他跨站注入。

Content-Security-Policy: default-src 'none', connect-src 'self', 'upgrade-insecure-requests';

X-Content-Type-Options

设置此头部将防止浏览器将文件解释为与 HTTP 头部中声明的内容类型不同的内容。

X-Content-Type-Options: nosniff

X-Frame-Options

X-Frame-Options 响应头提高了网页应用程序针对Clickjacking攻击的保护。它声明了一个从服务器发送到客户端浏览器的策略,表示浏览器是否可以在其他网页的框架中显示传输的内容。

X-Frame-Options: DENY

X-XSS-Protection

此头部启用浏览器中的跨站脚本(XSS)过滤器。

X-XSS-Protection: 1; mode=block

HTTP Strict Transport Security (HSTS)

HTTP Strict Transport Security (HSTS) 是一种网页安全策略机制,有助于保护网站免受协议降级攻击和cookie劫持。它允许网站服务器声明,网页浏览器(或其他符合规定的用户代理)应仅使用安全的HTTPS连接与之交互,而永远不通过不安全的HTTP协议。

Strict-Transport-Security: max-age=7776000; includeSubDomains

无缓存头部

禁用缓存。

Cache-Control: no-cache, must-revalidate

服务器头部

添加关于服务器的信息。

用于覆盖和隐藏运行在Web服务器上的技术名称,例如使Apache看起来像nginx,或者用于宣布应用程序名称和版本。

Server: APP_NAME (APP_VERSION)
X-Powered-By: APP_NAME (APP_VERSION)
  • Laravel

前往 App\Http\Kernel.php,并在 $routeMiddleware 中添加以下内容

protected $routeMiddleware = [
   ...
   'nocache'    => App\Http\Middleware\NoCache::class,
   'hideserver' => App\Http\Middleware\ServerHeader::class,
   'security'   => App\Http\Middleware\SecurityHeaders::class,
   'csp'        => App\Http\Middleware\ContentSecurityPolicyHeaders::class,
   'hsts'        => App\Http\Middleware\StrictTransportSecurityHeaders::class,
   ...
];
  • Lumen

前往 bootstrap/app.php,并在 $app->routeMiddleware 中添加以下内容

$app ->routeMiddleware([
   ...
   'nocache'    => App\Http\Middleware\NoCache::class,
   'hideserver' => App\Http\Middleware\ServerHeader::class,
   'security'   => App\Http\Middleware\SecurityHeaders::class,
   'csp'        => App\Http\Middleware\ContentSecurityPolicyHeaders::class,
   'hsts'        => App\Http\Middleware\StrictTransportSecurityHeaders::class,
   ...
]);

需要在.env文件中设置 APP_NAME 和 APP_VERSION。

CORS

添加对跨源资源共享(CORS)的支持。

查看 config/cors.php 获取所有选项。

默认为

'supportsCredentials' => true,
'allowedOrigins' => ['*'],
'allowedHeaders' => [
  'Content-Type',
  'Content-Length',
  'Origin',
  'X-Requested-With',
  'Debug-Token',
  'Registration-Access-Key',
  'X-CSRF-Token',
  'App',
  'User-Agent',
  'Authorization'
],
'allowedMethods' => ['GET', 'POST', 'PUT',  'DELETE', 'OPTIONS'],
'exposedHeaders' => ['Authorization'],
'maxAge' => 0,

应支持带有Authorization头部的OPTIONS预检。

  • Lumen

前往 bootstrap/app.php,并将以下内容添加到指定的键中

$app->middleware([
   ...
   Fruitcake\Cors\HandleCors::class,
   ...
]);

$app ->routeMiddleware([
   ...
   'cors' => Fruitcake\Cors\HandleCors::class
   ...
]);

贡献

请对此进行严厉批评,以改善安全性。

随时贡献回来。

我相信有数百种改进这项工作的方法。让我们一起使互联网变得更安全。

安全性是每个人的问题。

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可文件