KKUT Docs

Shield Paketi

İstekleri proje ve aksiyon kapsamında sınırlandırın; captcha ve geçici engel kararlarını güvenli biçimde yönetin.

Shield, hatalı veya kötüye kullanılan uygulama işlemlerini sunucu tarafında sayar; tanımlanan eşiklere göre doğrulama ya da geçici engel kararı üretir. Sayaçlar istemci çerezine bağlı değildir ve genel uygulama önbelleğinden ayrı tutulur.

Temel kullanım

Shield, proje başlangıcında uygulamanın güvenlik ayarları yüklendikten sonra hazırlanır:

$settings = DataStore::bundle(['settings_security']);
View::_settings($settings);

Shield::init(Config::get('Project', 'key'));

Korunacak işlem başlamadan önce benzersiz bir aksiyon adı ve varsa kullanıcı kimliği verilir:

Shield::setAction('account/login')
      ->setUserData(null, Post::username(), null);

$blocked = Shield::isBlocked();
$captcha = Shield::isCaptcha();

Kimlik doğrulama başarısız olduğunda sayaçlar artırılır. İşlem başarılı olduğunda yalnız ilgili aksiyonun sayaç ve geçici kayıtları temizlenir:

if(! $credentialsAreValid)
{
    Shield::run();
}
else
{
    Shield::close('account/login');
}

Karar API'si

$decision = Shield::forAction('api/token')
    ->identify(['username' => Post::username()])
    ->inspect();

if($decision->denied())
{
    return Shield::respond($decision);
}

if(! $tokenIsValid)
{
    $decision = Shield::fail();
}

Decision; allowed(), denied(), challenged(), blocked(), remaining(), resetAt() ve retryAfter() yöntemlerini sağlar. respond() durum kodunu ve standart hız sınırı başlıklarını hazırlar; proje arayüzüne ait HTML üretmez.

Proje güvenlik ayarı

{
  "shield": {
    "status": "active",
    "time": {"value": 5, "type": "minute"},
    "captcha": {
      "account": {
        "login": {
          "action": 3,
          "time": {"value": 5, "type": "minute"}
        }
      }
    },
    "block": {
      "account": {
        "login": {
          "action": 6,
          "time": {"value": 15, "type": "minute"}
        }
      }
    }
  }
}

action eşik sayısını, üst düzey time sayaç penceresini, aksiyon içindeki time ise oluşan captcha veya engel kaydının süresini belirler. Aksiyon yolu account/login, account.login veya account_login biçimlerinden biriyle verilebilir.

Depolama sürücüsü

Kurulum genelindeki sürücü Settings/Shield.php dosyasında seçilir:

'store' =>
[
    'driver' => 'file',
    'path'   => null,
    'redis'  =>
    [
        'host'     => '127.0.0.1',
        'port'     => 6379,
        'password' => null,
        'timeout'  => 0
    ]
]

File sürücüsü sayaçları container projesinin Storage/Shield dizininde kilitli ve atomik olarak günceller. Redis sürücüsü sayaç artırma ile ilk süre atamasını tek işlemde yapar. Her iki sürücü de anahtarları proje ve aksiyon kapsamında ayırır; IP, kullanıcı adı ve e-posta sayaç dosyasında düz metin tutulmaz.

Proxy güveni

'trustedProxies' =>
[
    '127.0.0.1',
    '10.0.0.0/8',
    '2001:db8::/32'
]

Shield varsayılan olarak yalnız REMOTE_ADDR değerini kullanır. Forwarded ve X-Forwarded-For başlıkları ancak doğrudan bağlantı adresi trustedProxies içindeki bir IP veya CIDR aralığıyla eşleşirse kabul edilir.

Kara ve beyaz liste

Proje güvenlik verisindeki blackList ve whiteList alanları tek IP veya CIDR aralığı içerebilir. Beyaz liste eşleşmesi sayaç ve engel denetimini atlar; kara liste eşleşmesi doğrudan engel kararı üretir. Süresi dolmuş liste kayıtları etkin kabul edilmez.

Pusat ile izleme

Pusat'taki Araçlar → Shield ekranı seçili projenin dosya sayaçlarını aksiyon ve karar türüne göre gösterir. Temizleme yalnız seçilen sayaç kapsamını etkiler; kalıcı blockeds tablosunu veya projenin genel Cache alanını silmez.

Önemli: Başarılı bir işlemde close('aksiyon/adı') çağrısını unutmayın. Genel Cache temizliği, Shield sayaçlarını temizlemek için kullanılmamalıdır.
KUT Framework 1.0Katmanlı Uygulama Tabanı

Kur. Uyarla. Türet.