Создание собственного WAF

Если вас интересует создание собственного веб-файервола (WAF) с использованием публичных API библиотеки Shieldon, вы можете создать систему, аналогичную Shieldon Firewall.

Вот пример, демонстрирующий работу Shieldon и предоставляющий руководство по ручной реализации Shieldon в вашем веб-приложении.

Диаграмма жизненного цикла

Ниже приведена диаграмма, иллюстрирующая жизненный цикл экземпляра Shieldon. Вам не обязательно понимать все сразу, но по мере настройки собственных компонентов, модулей CAPTCHA и других элементов, она станет полезным справочным материалом.

Диаграмма жизненного цикла

Советы

1. Инициализация экземпляра Shieldon.

$kernel = new \Shieldon\Firewall\Kernel();

2. Настройка драйвера данных.

В этом примере в качестве драйвера данных используется SQLite.

$dbLocation = APPPATH . 'cache/shieldon.sqlite3';
$pdoInstance = new \PDO('sqlite:' . $dbLocation);

$kernel->setDriver(
    new \Shieldon\Firewall\Driver\SqliteDriver($pdoInstance)
);

3. Настройка компонентов.

Компоненты Shieldon - это наборы правил для постоянного разрешения или запрета сессий.

В этом примере загружается компонент TrustedBot, чтобы разрешить популярным поисковым системам их ботам входить в процесс проверки, избегая последующих компонентов и фильтров.

$kernel->setComponent(
    new \Shieldon\Firewall\Component\TrustedBot()
);

4. Настройка канала. (необязательно)

Если вы используете только один экземпляр ядра Shieldon в своем веб-приложении, вы можете проигнорировать эту настройку. Канал просто служит префиксом для имен таблиц данных.

$kernel->setChannel('web_project');

5. Ограничение количества онлайн-сессий. (необязательно)

Эта настройка позволяет просматривать текущую страницу только 10 сессиям. Время истечения по умолчанию - 300 секунд.

$kernel->limitSession(10, 300);

6. Загрузка модулей CAPTCHA.

Вы можете настроить сервис CAPTCHA, например Google reCAPTCHA.

$kernel->setCaptcha(
    new \Shieldon\Firewall\Captcha\Recaptcha([
        'key' => '6LfkOaUUAAAAAH-AlTz3hRQ25SK8kZKb2hDRSwz9',
        'secret' => '6LfkOaUUAAAAAJddZ6k-1j4hZC1rOqYZ9gLm0WQh',
    ])
);

7. Начните защищать ваш веб-сайт

$result = $kernel->run();

if ($result !== $kernel::RESPONSE_ALLOW) {
    if ($kernel->captchaResponse()) {
        // Разблокировать текущую сессию.
        $kernel->unban();
    }

    $response = $kernel->respond();

    if ($response->getStatusCode() !== 200) {
        $httpResolver = new \Shieldon\Firewall\HttpResolver();
        $httpResolver($response);
    }
}

И это все.