Bot ve Spam Koruması
İstenmeyen trafiği bot kalkanı, captcha ve spam denetimiyle durduran on uç.
Genel Bakış
Bu on uç istenmeyen trafiği üç ayrı katmanda durdurur. Bot kalkanı art arda denemeleri sayar ve keser. Captcha formların önüne bir doğrulama koyar. Spam koruması ise gönderilen içeriğe ve ziyaretçinin itibarına bakar.
Üçü birbirinden bağımsızdır ve her birinin kendi açma anahtarı vardır. Bir katmanı ayarlamak diğerlerini etkilemez; bir formun korunması için doğru katmanı açmanız gerekir.
Referans
Bot Kalkanını Getirme
Art arda başarısız denemelerde ne zaman durdurulacağını döndürür.
curl 'https://panel.ornek.com/api/v1/admin/settings/security/bot-shield' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/security/bot-shield', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/security/bot-shield');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Deneme sayisi ISLEM BASINA tutulur: bir islem icin dusurmek digerlerini etkilemez.
$shield = Api::Settings()->GetBotShield()['data'];
$signIn = $shield['attempts']['sign-in'] ?? null;Bot Kalkanını Yazma
Kalkanı açar ve sayım penceresiyle deneme sınırlarını yazar.
curl -X PUT 'https://panel.ornek.com/api/v1/admin/settings/security/bot-shield' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"status":1,"within_time":{"hour":60},"attempts":{"sign-in":5}}'const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/security/bot-shield', {
method: 'PUT',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
status: 1,
within_time: { hour: 60 },
attempts: { 'sign-in': 5 },
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/security/bot-shield');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'status' => 1,
'within_time' => ['hour' => 60],
'attempts' => ['sign-in' => 5],
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Sinir cok dusukse ortak baglantidan gelen GERCEK musteriler de engellenir.
Api::Settings()->UpdateBotShield([
'status' => 1,
'within_time' => ['hour' => 60],
'attempts' => ['sign-in' => 5],
]);Captcha Ayarlarını Getirme
Hangi sağlayıcının kullanıldığını ve hangi formların korunduğunu döndürür.
curl 'https://panel.ornek.com/api/v1/admin/settings/security/captcha' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/security/captcha', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/security/captcha');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Genel anahtar kapaliyken korunan alan listesi DOLU gorunur ama hicbiri uygulanmaz.
$cap = Api::Settings()->GetCaptcha()['data'];
$live = $cap['status'] === 1;Captcha Ayarlarını Yazma
Sağlayıcıyı, korunan formları ve sağlayıcının kendi ayarlarını yazar.
contact-form, sign-up, sign-in, sign-forget, customer-feedback, newsletter, domain-check, software-license. Liste ya da eşleme olarak verilebilir.curl -X PUT 'https://panel.ornek.com/api/v1/admin/settings/security/captcha' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"status":1,"type":"DefaultCaptcha","protected_areas":["sign-in","sign-up"]}'const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/security/captcha', {
method: 'PUT',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
status: 1,
type: 'DefaultCaptcha',
protected_areas: ['sign-in', 'sign-up'],
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/security/captcha');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'status' => 1,
'type' => 'DefaultCaptcha',
'protected_areas' => ['sign-in', 'sign-up'],
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Saglayici degistirmek onun kendi ayarlarini GEREKTIRIR: anahtarsiz saglayici formu bozar.
$fields = Api::Settings()->GetCaptchaFields(['module' => 'ReCaptcha'])['data'];
Api::Settings()->UpdateCaptcha([
'status' => 1,
'type' => 'ReCaptcha',
'config' => ['site-key' => $siteKey, 'secret-key' => $secret],
]);Sağlayıcıları Listeleme
Kurulu captcha sağlayıcılarını döndürür.
curl 'https://panel.ornek.com/api/v1/admin/settings/security/captcha/modules' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/security/captcha/modules', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/security/captcha/modules');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Yerlesik saglayici listenin BASINDA gelir ve ayar istemez; digerleri anahtar ister.
$modules = Api::Settings()->GetCaptchaModules()['data'];Sağlayıcı Alanlarını Getirme
Bir sağlayıcının hangi ayarları istediğini ve kayıtlı değerlerini döndürür.
curl 'https://panel.ornek.com/api/v1/admin/settings/security/captcha/ReCaptcha/fields' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/security/captcha/ReCaptcha/fields', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/security/captcha/ReCaptcha/fields');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Saglayiciyi degistirmeden ONCE hangi ayarlari istedigini buradan ogrenin.
$needs = Api::Settings()->GetCaptchaFields(['module' => 'ReCaptcha'])['data']['fields'];Spam Korumasını Getirme
Kelime süzgecini, dış itibar servisini ve vekil sunucu denetimini döndürür.
curl 'https://panel.ornek.com/api/v1/admin/settings/security/spam' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/security/spam', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/security/spam');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Dis servis ANAHTARSIZ calismaz: acik gorunse de sorgu yapilamaz.
$spam = Api::Settings()->GetSpamProtection()['data'];
$live = $spam['api_status'] === 1 && $spam['api_key'] !== '';Spam Korumasını Yazma
Kelime süzgecini ve dış itibar denetimini yazar.
curl -X PUT 'https://panel.ornek.com/api/v1/admin/settings/security/spam' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"word_list":"spam,scam","block_temporary":1}'const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/security/spam', {
method: 'PUT',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
word_list: 'spam,scam',
block_temporary: 1,
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/security/spam');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'word_list' => 'spam,scam',
'block_temporary' => 1,
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Servisi acmak ANAHTAR gerektirir; ikisini birlikte gonderin yoksa denetim sessizce calismaz.
Api::Settings()->UpdateSpamProtection([
'api_status' => 1,
'api_key' => $key,
'api_risk_score' => 25,
]);Engellenenleri Listeleme
Son engellenen istekleri ve toplam engelleme sayısını döndürür.
curl 'https://panel.ornek.com/api/v1/admin/settings/security/spam-records' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/security/spam-records', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/security/spam-records');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Sayac ile liste ayni sey DEGILDIR: toplam sayi listedekinden cok daha buyuk olabilir.
$rec = Api::Settings()->GetSpamRecords();
$shown = count($rec['data']);
$total = $rec['meta']['total_blocked'];Engellenenleri Temizleme
Engelleme kayıtlarını ve toplam sayacı sıfırlar.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/settings/security/spam-records' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/settings/security/spam-records', {
method: 'DELETE',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/settings/security/spam-records');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Temizlik SAYACI da sifirlar: kurulum boyunca kac engel oldugu bilgisi kaybolur.
// Once okuyup kendi tarafinizda saklayin.
$total = Api::Settings()->GetSpamRecords()['meta']['total_blocked'];
Api::Settings()->ClearSpamRecords();Tuzaklar
Captcha'nın genel anahtarı kapalıyken korunan form listesi dolu görünmeye devam eder ama hiçbiri uygulanmaz. Listeye bir form eklemek onu korumaz; genel anahtarın da açık olması gerekir. Aynı şey bot kalkanı için de geçerlidir.
Yerleşik captcha ayarsız çalışır, diğerleri anahtar ister. Anahtarları vermeden sağlayıcıyı değiştirmek formları bozar: doğrulama hiç yüklenmez ve müşteri gönderim yapamaz. Değiştirmeden önce sağlayıcının hangi alanları istediğini alan ucundan okuyun.
Dış itibar servisini açmak tek başına yetmez: anahtar boşken sorgu yapılamaz ve hiçbir ziyaretçi denetlenmez. Ayar açık görünür, hata da alınmaz. İkisini birlikte gönderin ve sonra engellenen kayıtların artıp artmadığına bakın.
Bot kalkanı denemeleri adrese göre sayar. Ofis ya da okul gibi ortak bir bağlantının arkasındaki müşteriler tek bir adres olarak görünür; sınır düşük ayarlandığında birbirlerinin denemelerini harcarlar ve hiçbiri giremez. Sınırı düşürürken sayım penceresini de gözetin.
Engelleme kayıtlarını temizlemek yalnız listeyi boşaltmaz: kurulum boyunca kaç engel olduğunu tutan toplam sayaç da sıfırlanır. O sayı bir daha geri gelmez, o yüzden temizlemeden önce okuyup kendi tarafınızda saklayın. Listenin kendisi zaten yalnız son bir bölümü tutar; toplam sayı ondan çok daha büyük olabilir.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.