PHP code example of lyrasoft / firewall
1. Go to this page and download the library: Download lyrasoft/firewall library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
lyrasoft / firewall example snippets
$this->lang->loadAllFromVendor('lyrasoft/firewall', 'ini');
// OR
$this->lang->loadAllFromVendor(\Lyrasoft\Firewall\FirewallPackage::class, 'ini');
$menu->link($this->trans('unicorn.title.grid', title: $this->trans('firewall.redirect.title')))
->to($nav->to('redirect_list')->var('type', 'main'))
->icon('fal fa-angles-right');
$menu->link($this->trans('unicorn.title.grid', title: $this->trans('firewall.ip.rule.title')))
->to($nav->to('ip_rule_list')->var('type', 'main'))
->icon('fal fa-network-wired');
use Lyrasoft\Firewall\Middleware\RedirectMiddleware;
// ...
'middlewares' => [
\Windwalker\DI\create(
RedirectMiddleware::class,
excludes: [
'admin/*'
]
),
// ...
],
// ...
'middlewares' => [
\Windwalker\DI\create(
RedirectMiddleware::class,
type: 'other_type',
excludes: [
'admin/*'
]
),
// ...
],
// ...
'middlewares' => [
\Windwalker\DI\create(
RedirectMiddleware::class,
type: 'flower',
list: [
'foo/bar' => 'hello/world',
'foo/yoo/*' => 'hello/mountain/$1',
],
excludes: [
'admin/*'
]
),
// ...
],
// ...
'middlewares' => [
\Windwalker\DI\create(
RedirectMiddleware::class,
type: false,
list: [
'foo/bar' => 'hello/world',
'foo/yoo/*' => 'hello/mountain/$1',
],
excludes: [
'admin/*'
]
),
// ...
],
// ...
'middlewares' => [
\Windwalker\DI\create(
RedirectMiddleware::class,
// ...
list: raw(function (FooService $fooService) {
return ...;
});
),
// ...
],
// ...
'middlewares' => [
\Windwalker\DI\create(
RedirectMiddleware::class,
// ...
instantRedirect: true,
),
// ...
],
\Windwalker\DI\create(
RedirectMiddleware::class,
enabled: !WINDWALKER_DEBUG
),
\Windwalker\DI\create(
RedirectMiddleware::class,
afterHit: raw(function (string $dest, \Redirect $redirect) {
\Windwalker\Core\Manager\Logger::info('Redirect to: ' . $dest);
})
),
public function __construct(
protected RedirectService $redirectService,
protected AppContext $app,
protected bool $enabled = true,
protected string|\BackedEnum|array|false|null $type = 'main',
protected array|\Closure|null $list = null,
protected bool $instantRedirect = false,
protected array $excludes = [],
protected ?\Closure $afterHit = null,
protected int $cacheTtl = 3600,
) {
}
use Lyrasoft\Firewall\Middleware\FirewallMiddleware;
// ...
->middleware(
FirewallMiddleware::class,
// ...
defaultAction: \Lyrasoft\Firewall\Enum\IpRuleKind::ALLOW, // Or BLOCK, default is ALLOW
logger: 'firewall/blocks' // Or LoggerInterface instance, default is NULL
)
// ...
->middleware(
FirewallMiddleware::class,
type: 'foo',
)
->middleware(
FirewallMiddleware::class,
type: false,
allowList: [
'0.0.0.0',
'144.122.*.*',
],
blockList: [
'165.2.90.45',
'222.44.55.66',
],
allowAsFirst: true, // Or false, default is false
)
\Windwalker\DI\create(
FirewallMiddleware::class,
enabled: !WINDWALKER_DEBUG
),
\Windwalker\DI\create(
FirewallMiddleware::class,
afterHit: fn () => function (AppRequest $appRequest) {
\Windwalker\Core\Manager\Logger::info('Attack from: ' . $appRequest->getClientIp());
}
),
\Windwalker\DI\create(
FirewallMiddleware::class,
cacheTtl: 3600,
clearExpiredChance: 1 / 100 // Default is 1/100, means every 100 request will clear expired cache once, set it to 0 to disable auto clear expired cache
),
use Lyrasoft\Firewall\Middleware\HoneypotMiddleware;
use Lyrasoft\Firewall\Service\Honeypot;
$router->group('front')
->namespace('front')
->middleware(
HoneypotMiddleware::class,
type: 'bot',
matchParams: fn() => [
'_ref' => 'preview'
],
// Or use matchCallback to do more complex check:
matchCallback: fn () => function (#[Input] string $foo) {
return $foo === 'bar';
},
expires: '10minutes', // Default is 1 hour.
)
->middleware(
FirewallMiddleware::class,
type: 'bot'
// ...
)
matchParams: fn() => [
'_ref' => [
'preview',
'internal',
'test'
],
'from' => [...],
'f' => [...]
]
use Lyrasoft\Firewall\Middleware\HoneypotMiddleware;
use Lyrasoft\Firewall\Service\Honeypot;
// ...
->middleware(
HoneypotMiddleware::class,
// ...
allowGoodRobot: true, // Default is true.
)
use Lyrasoft\Firewall\Middleware\HoneypotMiddleware;
use Lyrasoft\Firewall\Service\Honeypot;
// ...
->middleware(
HoneypotMiddleware::class,
// ...
allowGoodRobot: false,
excludes: fn () => function (\Windwalker\Core\Http\AppRequest $appRequest) {
$ua = $appRequest->getHeader('user-agent');
// Allow Googlebot and Amazonbot, you can add more rules here.
return str_contains($ua, 'googlebot') || str_contains($ua, 'amazonbot');
}
)
use Lyrasoft\Firewall\Middleware\HoneypotMiddleware;
use Lyrasoft\Firewall\Service\Honeypot;
$router->group('front')
->namespace('front')
->middleware(
HoneypotMiddleware::class,
matchParams: fn() => [
'_ref' => Honeypot::getBlockWords()
]
)
{!! $app->retrieve(\Lyrasoft\Firewall\Service\Honeypot::class)->link() !!}
public function __construct(
protected AppContext $app,
protected FirewallService $firewallService,
protected BrowserNext $browserNext,
protected string|\UnitEnum $type = 'bot',
protected ?array $matchParams = null,
protected ?\Closure $matchCallback = null,
protected ?\Closure $blockHandler = null,
protected bool $allowGoodRobot = true,
protected \Closure|array|null $excludes = null,
protected \DateTimeInterface|string $expires = '1hour',
) {
}
shell
php windwalker pkg:install lyrasoft/firewall -t routes -t migrations
shell
php windwalker pkg:install lyrasoft/firewall -t lang
json
"post-autoload-dump": [
...
"php windwalker cache:clear renderer html firewall" <-- Add firewall
],