[PHP] 在 Laravel 框架使用 WAF 防火墙

这个指南帮助您解决部署 Shieldon 防火墙在您的 Laravel 应用程式的疑问。这些指引并非唯一可以达成的方法,只是给您一些点子。

以下的步骤已经在 Laravel 5 及 6 中测试过。

Laravel 框架防火墙

使用的套件: Shieldon Firewall
GitHub: https://github.com/terrylinooo/shieldon
文章英文版: Laravel Firewall

安装

使用 PHP Composer:

composer require shieldon/shieldon

或者下载后引入 Shieldon 自动载入器。

require 'Shieldon/autoload.php';

藉着使用 Shieldon 面板,部署 Shieldon 防火墙在您的网站应用程式上是相当简单的。我强烈建议您选用这个方法。

部署

对于 Laravel 爱好者,您可以选择 中介程式 或 引导程式 来部署 Shieldon 防火墙在您的网站应用程式上。我个人偏好引导程式。

中介程式

1. 定义一个中介程式。

定义一个中介程式名为 ShieldonFirewall

php artisan make:middleware ShieldonFirewall

ShieldonFirewall 中介程式的类别中加入以下程式码:

$firewall = new \Shieldon\Firewall(storage_path('shieldon'));// 转传 Laravel CSRF Token 到验证码表单。$firewall->getShieldon()->setCaptcha(new \Shieldon\Captcha\Csrf([    'name' => '_token',    'value' => csrf_token(),]));$firewall->restful();$firewall->run();

2. 注册一个中介程式别名。

修改 app/Http/Kernel.php 然后加入这一样到 $routeMiddleware 属性中。

'firewall' => \App\Http\Middleware\ShieldonFirewall::class,

3. 为防火墙面板定义路由。

我们需要一个控制器以进入 Shieldon 防火墙控制面板,所以呢...

Route::any('/your/secret/place/', function() {    $firewall = \Shieldon\Container::get('firewall');    $controlPanel = new \Shieldon\FirewallPanel($firewall);    $controlPanel->csrf('_token', csrf_token());    $controlPanel->entry();})->middleware('firewall');

Shieldon 将会开始监看您的网站,如果在设定区块中的 守护进程 有启用的话。

4. 指派 firewall 中介程式到路由。

指派 firewall 中介程式到任何您想要保护的路由。例如:

Route::get('/', function () {    return view('welcome');})->middleware('firewall');

引导程式

这就是我所说,我偏好的方法,因为比较少的步骤,且会避免可能发生和 Laravel 内建功能的冲突。

1. 在初始化 $app 之前。

在您的 bootstrap/app.php 中,在<?php, 之后加入以下程式码。

/*|--------------------------------------------------------------------------| 运行 Shieldon 防火墙|--------------------------------------------------------------------------|| Shieldon 防火墙将开始监看所有进入您网站的 HTTP 请求。| 在初始化 Laravel 之前运行 Shieldon 防火墙会避免和 Laravel 内建功能的冲突。| */if (isset($_SERVER['REQUEST_URI'])) {    // 注意这个目录必须可写入。    $firewallstorage = __DIR__ . '/../storage/shieldon';    $firewall = new \Shieldon\Firewall($firewallstorage);    $firewall->restful();    $firewall->run();}

2. 为防火墙面板定义路由。

Route::any('/your/secret/place/', function() {    $firewall = \Shieldon\Container::get('firewall');    $controlPanel = new \Shieldon\FirewallPanel($firewall);    $controlPanel->csrf('_token', csrf_token());    $controlPanel->entry();});

如果您採用这个方式,Shieldon 防火墙将会在全域範围运行,不过不用担心,您可以针对想要 Shiedon 防火墙忽略的网址设定设定排除列表。

就是这样啰。

现在,您可以连接上防火墙面板,透过网址:

https://for.example.com/your/secret/place/

预设的登入帐号是 shieldon_user 而密码是 shieldon_pass。在您登入防火墙面板之后,第一件该做的事情就是更改帐号及密码。

如果在设定区块中的 守护进程 有启用的话,Shieldon 将会开始监看您的网站,请确定您已经把设定值都设定正确。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章