커널 API

커널

Shieldon\Firewall\Kernel
  • ban
  • getCurrentUrl
  • managedBy
  • run
  • setClosure
  • exclude
  • setExcludedUrls
  • setLogger
  • setProperty
  • setProperties
  • setStrict
  • unban

ban($ip)

  • param string $ip - 단일 IP 주소.
  • return void

IP 주소를 차단합니다.

예시:

$kernel->ban('33.125.12.87');

getCurrentUrl()

  • return string

현재 URL을 반환합니다. 이 메소드는 $_SERVER['REQUEST_URI']와 동일합니다.

예시:

echo $kernel->getCurrentUrl();

managedBy($type)

  • param string $type "" managed | config | demo
  • return void

Shieldon이 어떤 유형으로 관리되는지 알려줍니다. 이 설정은 방화벽 패널에만 영향을 미칩니다.

예시:

$kernel->managedBy('demo');

run()

  • return int

확인 프로세스를 실행합니다.

응답 코드:

상수 이유
RESPONSE_DENY 0 영구 차단
RESPONSE_ALLOW 1 통과
RESPONSE_TEMPORARILY_DENY 2 일시적 차단 및 Captcha를 해결하여 차단 해제 가능
RESPONSE_LIMIT 3 온라인 세션 제한 도달로 인한 중지

예시:

$result = $kernel->run();

setClosure($key, $closure)

  • param string $key - 클로저의 식별 이름.
  • param Closure $closure - 클로저 함수.
  • return void

클로저 함수를 설정합니다.

예시:

$kernel->setClosure('www_authenticate', function() use ($authHandler, $authenticateList) {
    $authHandler->set($authenticateList);
    $authHandler->check();
});

exclude($uriPath)

  • param string $uriPath - URI의 경로 구성 요소.
  • return void

보호에서 제외하려는 URL을 설정합니다.

예시:

$kernel->exclude('/firewall/panel');

setExcludedUrls($urls)

  • param array $urls - URL의 컬렉션.
  • return void

보호에서 제외하려는 URL을 설정합니다.

예시:

$list = [
    '/example/1',
    '/wp-login.php',
];

$kernel->setExcludedUrls($list);

setLogger($logger)

  • param ActionLogger $logger - 사용자의 작업 로그 기록.
  • return void

작업 로그 기록기를 설정합니다.

예시:

$kernel->setLogger(
    new \Shieldon\Firewall\Log\ActionLogger(
        BOOTSTRAP_DIR . '/../tmp/shieldon'
    )
);

setProperty($key, $value)

  • param string $key - 속성의 키 이름.
  • param mixed $value - 키의 값.
  • return void

예시:

$kernel->setProperty('time_unit_quota', [
    's' => 4,
    'm' => 20, 
    'h' => 60, 
    'd' => 240,
]);

설정에 대한 설명은 여기에서 찾을 수 있습니다.

setProperties($settings)

  • param array $settings - 설정.
  • return void

예시:

$kernel->setProperties($settings);

setStrict($bool)

  • param bool $bool - 엄격 모드를 활성화하려면 True, 비활성화하려면 False.
  • return void

예시:

$kernel->setStrict(true);

unban($ip)

  • param string $ip - IP 주소.
  • return void

IP 주소의 차단을 해제합니다.

예시:

$kernel->unban('33.33.33.33');

Captcha Trait

Shieldon\Firewall\Kernel\CaptchaTrait
  • setCaptcha
  • captchaResponse
  • disableCaptcha

setCaptcha($instance)

  • param CaptchaInterface $instance - Captcha 인스턴스.
  • return void

Captcha를 설정합니다. 자세한 사용법은 Captcha 섹션을 참조하세요.

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

captchaResponse()

  • return bool

Captcha의 결과를 반환합니다. true: Captcha가 성공적으로 해결되었습니다. false는 그렇지 않음을 의미합니다.

예시:

$result = $this->captchaResponsse();

disableCaptcha()

  • return void

Captcha 모듈을 모두 비활성화합니다. 이 메소드는 단위 테스트 용도로 사용됩니다.


Component Trait

Shieldon\Firewall\Kernel\ComponentTrait
  • setComponent
  • getComponent
  • disableComponents

setComponent($instance)

  • param ComponentProvider $instance - Component 인스턴스.
  • return void

Component를 설정합니다.

예시:

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

getComponent()

  • param string $name - Component의 클래스 이름.
  • return void | ComponentProvider

Component 컨테이너에서 Component 인스턴스를 가져옵니다.

예시:

$useragent = $kernel->getComponent('UserAgent');

disableComponents()

  • return void

모든 Component를 비활성화합니다. 이미 설정되었더라도 적용됩니다.

예시:

$kernel->disableComponents();

Driver Trait

Shieldon\Firewall\Kernel\DriverTrait
  • setDriver
  • setChannel
  • disableDbBuilder

setDriver($driver)

  • param DriverProvider $driver - 선택한 드라이버에서 데이터를 쿼리합니다.
  • return void

예시:

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

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

setChannel($channel)

  • param string $channel - 채널을 지정합니다.
  • return void

예시:

$kernel->setChannel('web_project');

disableDbBuilder()

  • return void

데이터베이스 자동 구축을 비활성화합니다.

예시:

$kernel->disableDbBuilder();

Filter Trait

Shieldon\Firewall\Kernel\FilterTrait
  • setFilters
  • setFilter
  • disableFilters

setFilters($settings)

  • param array $settings - 필터 설정.
  • return void
$kernel->setFilters([
    'session' => true,
    'cookie' => true,
    'referer' => true,
    'frequency' => true,
]);

setFilter($filterName, $value)

  • param string $filterName - 필터의 이름.
  • param bool $value - 필터를 활성화하려면 true, 그렇지 않으면 false.
  • return void

예시:

$kernel->setFilter('session', false);
$kernel->setFilter('cookie', false);
$kernel->setFilter('referer', true);
$kernel->setFilter('frequency', false); 

기본 설정:

유형 설명
session bool true Shieldon 세션 드라이버로 생성된 세션 확인
cookie bool false JavaScript에 의해 생성된 쿠키 확인
referer bool true HTTP_REFERER 확인
frequency bool true time_unit_quota 설정 확인

쿠키 필터는 기본적으로 false로 설정되어 있습니다. JavaScript 스니펫을 웹 페이지에 출력해야 하기 때문입니다. getJavascript()가 생성하는 스니펫은 JavaScript로 쿠키를 생성합니다.

사용법은 getJavascript()를 참조하세요.

disableFilters()

  • return void

이미 설정된 필터든 아니든 모든 필터를 비활성화합니다.

$kernel->disableFilters();

IP Trait

Shieldon\Firewall\IpTrait
  • setIp
  • getIp
  • setRdns
  • getRdns

setIp($ip)

  • param string $ip - IP 주소.
  • return void

IP 주소를 설정합니다.

예시:

// 여기는 CloudFlare의 실제 방문자 IP를 캡처하는 예입니다.
$realIp = $_SERVER['HTTP_CF_CONNECTING_IP'];

// 웹 사이트에 CDN 서비스를 사용하는 경우,
// 사용자가 차단되지 않도록 실제 방문자 IP를 캡처해야 합니다.
$kernel->setIp($realIp);

getIp()

  • return string

현재 설정된 IP를 반환합니다.

예시:

$ip = $kernel->getIp();

setRdns($rdns)

  • param string $rdns - 해당 IP 주소의 역 DNS 레코드.
  • return void

확인을 위해 역 DNS 레코드를 설정합니다.

예시:

$kernel->setRdns('localhost');

getRdns()

  • return string

IP가 해석된 호스트 이름을 반환합니다.

$rdns = $kernel->getRdns();

Messenger Trait

Shieldon\Firewall\Kernel\MessengerTrait
  • setMessenger

setMessenger($instance)

  • param MessengerInterface $instance - Messenger 인스턴스.
  • return void

예시:

$apiKey = '981441296:AAGCcgv_NETMdWQCBTaMOk_yoMfax5EV7YQ';
$channel = '@your_channel';

$telegramMessenger = new \Messenger\Telegram($apiKey, $channel);

$kernel->setMessenger($telegramMessenger);

Template Trait

Shieldon\Firewall\Kernel\TemplateTrait
  • setDialog
  • respond
  • setTemplateDirectory
  • getJavascript

setDialog($settings)

  • param array $settings - 대화 상자 UI 설정.
  • return void

대화 상자 UI를 사용자 정의합니다.

예시:

$settings = [
    'lang'             => 'en',
    'background_image' => '',
    'bg_color'         => '#ffffff',
    'header_bg_color'  => '#212531',
    'header_color'     => '#ffffff',
    'shadow_opacity'   => '0.2',
];

$kernel->setDialog($settings);

respond()

  • return ResponseInterface

결과로 응답합니다.

예시:

$response = $kernel->respond();

setTemplateDirectory($directory)

  • param array $directory - 템플릿 파일이 있는 디렉토리.
  • return void

프론트엔드 템플릿 디렉토리를 설정합니다. 이 파일을 복사하고 템플릿의 외관을 사용자 정의하기 위해 수정할 수 있습니다.

예시:

$kernel->setTemplateDirectory(YOUR_DIRECTORY_PATH);

getJavascript()

  • return string

웹 페이지에서 JavaScript 스니펫을 출력합니다.

이 스니펫은 클라이언트의 브라우저에 쿠키를 생성하고, 쿠키를 확인하여 클라이언트가 로봇인지 여부를 확인합니다.

// 페이지 템플릿에서이 변수를 출력하세요.
$jsCode = $kernel->getJavascript();

세션

Shieldon\Firewall\Kernel\SessionTrait
  • limitSession
  • getSessionCount

limitSession($count, $period, $unique)

  • param int $count 1000 온라인 사용자 수. 도달하면 사용자가 대기열에 있게 됩니다.
  • param int $period 300 사용자가 탐색할 수 있는 시간. (단위: 초)
  • param bool $unique false IP 주소 당 하나의 세션만 허용합니다.
  • return void

온라인 세션을 제한합니다.

예시:

$kernel->limitSession(100, 300);

getSessionCount()

  • return int

온라인 사용자 수를 반환합니다. limitSession이 활성화되어 있으면.

예시:

$count = $kernel->getSessionCount();