Slim 框架是我最喜歡的之一。由於 Slim 是一個微型框架,因此實作 Shieldon 防火牆也很容易。言歸正傳,讓我們開始吧。
使用 PHP Composer:
composer require shieldon/shieldon
這也會安裝 Shieldon 所需的依賴套件:
您可以自己創建中間件,或者只需使用 整合類。
範例:
class FirewallMiddleware
{
/**
* Example middleware invokable class
*
* @param ServerRequest $request PSR-7 request
* @param RequestHandler $handler PSR-15 request handler
*
* @return Response
*/
public function __invoke(Request $request, RequestHandler $handler): Response
{
$response = $handler->handle($request);
$firewall = new \Shieldon\Firewall\Firewall($request, $response);
// Shieldon 防火牆將放置其文件的目錄。
$firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
$response = $firewall->run();
if ($response->getStatusCode() !== 200) {
$httpResolver = new \Shieldon\Firewall\HttpResolver();
$httpResolver($response);
}
return $response;
}
}
例如,如果您使用的是 Slim 4 框架,程式碼應該如下所示。
範例:
$app->add(new FirewallMiddleware());
或者,如果您更喜歡使用整合類,程式碼如下所示。
範例:
$app->add(new \Shieldon\Firewall\Integration\Slim4);
例如,如果您使用的是 Slim 4 框架,程式碼應該如下所示。然後,您可以訪問 URL https://yourwebsite.com/firewall/panel/
來登錄控制面板。
範例:
$app->any('/firewall/panel[/{params:.*}]', function (Request $request, Response $response, $args) {
$firewall = new \Shieldon\Firewall\Firewall($request);
// Shieldon 防火牆將放置其文件的目錄。
// 必須與防火牆中間件相同。
$firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
// 控制面板的基礎 URL。
$firewall->controlPanel('/firewall/panel/');
$panel = new \Shieldon\Firewall\Panel();
// 開始 - 如果啟用了 Slim-CSRF,需要設置 CSRF 字段。
$csrf = new \Slim\Csrf\Guard();
$nameKey = $csrf->getTokenNameKey();
$valueKey = $csrf->getTokenValueKey();
$csrfName = $request->getAttribute('csrf_name');
$csrfVale = $request->getAttribute('csrf_value');
$panel->csrf(
[$nameKey => $csrfName],
[$valueKey => $csrfVale]
);
// 結束 - Slim-CSRF
$panel->entry();
});
注意:
POST
和 GET
都應應用於您的網站。POST
方法來解決 CAPTCHA。就是這樣。
Shieldon 已經為此中間件準備了一個整合類,只需按照以下步驟使用即可。
範例:
$app->add(new \Shieldon\Firewall\Integration\Slim3);
例如,如果您使用的是 Slim3 骨架,middleware.php
中的程式碼如下所示:
範例:
<?php
use Slim\App;
return function (App $app) {
$app->add(new \Shieldon\Firewall\Integration\Slim3);
$app->add(new \Slim\Csrf\Guard);
};
例如,如果您使用的是 Slim 3 框架,程式碼應該如下所示。然後,您可以訪問 URL https://yourwebsite.com/firewall/panel/
來登錄控制面板。
範例:
$app->map(['GET', 'POST'], '/firewall/panel[/{params:.*}]', function (Request $request, Response $response, array $args) {
$firewall = new \Shieldon\Firewall\Firewall($request);
// Shieldon 防火牆將放置其文件的目錄。
// 必須與防火牆中間件相同。
$firewall->configure(__DIR__ . '/../cache/shieldon_firewall');
// 控制面板的基礎 URL。
$firewall->controlPanel('/firewall/panel/');
$panel = new \Shieldon\Firewall\Panel();
// 開始 - 如果啟用了 Slim-CSRF,需要設置 CSRF 字段。
$csrf = new \Slim\Csrf\Guard();
$nameKey = $csrf->getTokenNameKey();
$valueKey = $csrf->getTokenValueKey();
$csrfName = $request->getAttribute('csrf_name');
$csrfVale = $request->getAttribute('csrf_value');
$panel->csrf(
[$nameKey => $csrfName],
[$valueKey => $csrfVale]
);
// 結束 - Slim-CSRF
$panel->entry();
});
就是這樣。
您可以通過 /firewall/panel/
訪問防火牆控制面板,在瀏覽器中打開以下 URL。
https://yourwebsite.com/firewall/panel/
默認登錄帳號是 shieldon_user
,密碼是 shieldon_pass
。登錄防火牆面板後,您應該首先更改登錄帳號和密碼。
如果在「Daemon」設定部分啟用了 Shieldon 防火牆,它將開始監視您的網站。請確保您已正確設置這些設定。