Zend 框架官方提供了兩種類型的模板:Zend MVC 和 Zend Expressive。
無論您使用哪種模板,本指南都可以為您在 Zend 應用程式中實作 Shieldon 防火牆提供一些想法。請注意,我不確定哪一種方法被認為是最佳實踐,因此您可以選擇您偏好的方法。
使用 PHP Composer:
composer require shieldon/shieldon
這也會安裝 Shieldon 所需的相依套件:
這是一個在 Zend Expressive 模板中使用 PSR-15 Middleware 的範例。
已經有一個 整合類別 可供 Zend Expressive 使用。
在您的 pipeline.php
中,新增以下程式碼:
範例:
$app->pipe(\Shieldon\Firewall\Integration\ZendPsr15:class);
前往 App/src/Handler
目錄並建立一個名為 FirewallPanelHandler
的 PHP 檔案。
將下面的文字複製並貼到該檔案中。
範例:
<?php
declare(strict_types=1);
namespace App\Handler;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Zend\Diactoros\Response;
/**
* 防火牆控制台處理器
* 如果啟用 CSRF,請確保將 csrf token 傳遞給控制台。
*/
class FirewallPanelHandler implements RequestHandlerInterface
{
public function handle(ServerRequestInterface $request): ResponseInterface
{
$panel = new \Shieldon\Firewall\Panel();
$panel->entry();
return new Response();
}
}
在您的 route.php
中,新增以下程式碼:
範例:
// 開始 - Shieldon 防火牆
$app->route('/firewall/panel/', App\Handler\FirewallPanelHandler::class, ['GET', 'POST']);
foreach(\Shieldon\Firewall\Panel::getRoutes() as $route) {
$app->route("/firewall/panel/$route/", App\Handler\FirewallPanelHandler::class, ['GET', 'POST']);
}
// 結束 - Shieldon 防火牆
就是這樣。
我不確定您正在使用 Zend 框架的哪個版本,因此我將提供適用於大多數 Zend 版本的指示。
在您的 public/index.php
檔案中,在這行程式碼之下:
include __DIR__ . '/../vendor/autoload.php';
加入以下程式碼:
/*
|--------------------------------------------------------------------------
| 執行 Shieldon 防火牆
|--------------------------------------------------------------------------
|
| Shieldon 防火牆將監視所有傳入您網站的 HTTP 要求。
|
*/
if (isset($_SERVER['REQUEST_URI'])) {
// 這個目錄必須可寫入。
$storage = dirname($_SERVER['SCRIPT_FILENAME']) . '/../shieldon_firewall';
$firewall = new \Shieldon\Firewall\Firewall();
$firewall->configure($storage);
$firewall->controlPanel('/firewall/panel');
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
}
接下來是為控制台建立一個控制器。
讓我們建立一個名為 FirewallController
的控制器。
<?php
namespace Application\Controller;
use Zend\Mvc\Controller\AbstractActionController;
class FirewallController extends AbstractActionController
{
/**
* 防火牆控制台的進入點。
*/
public function panelAction()
{
$panel = new \Shieldon\Firewall\Panel();
$panel->entry();
}
}
打開以下位置的 module.config.php
檔案:
module/Application/config/module.config.php
(3-1) 在 ['router']['routes']
陣列內,新增以下程式碼:
範例:
'firewallpanel' => [
'type' => Segment::class,
'options' => [
'route' => '/firewall/panel[:slug]',
'constraints' => [
'slug' => '[a-zA-Z0-9\/]*',
],
'defaults' => [
'controller' => Controller\FirewallController::class,
'action' => 'panel',
],
],
],
(3-2) 在 ['controllers']['factories']
陣列內,新增以下程式碼:
Controller\FirewallController::class => InvokableFactory::class,
就是這樣。
您可以透過在瀏覽器中訪問 /firewall/panel/
存取防火牆控制台,以查看頁面。
https://yourwebsite.com/firewall/panel
預設登入帳號為 shieldon_user
,密碼為 shieldon_pass
。登入防火牆控制台後,您應該立即更改登入帳號和密碼。
如果在「Daemon」設定部分啟用了 Shieldon 防火牆,它將開始監控您的網站。請確保已正確設定好這些設定。