Web veri çeken bot engelleme

Sizlere web üzerinden sitenize yapılan bot saldırısını önlemek için bir kaç taktik göstereceğiz

Öncelikle herhangi bir get/post işlemi yapılırken ekrana bir veri çıktısı veriyorsanız ve bu veriler farklı bir site tarafından çekiliyorsa bunu önlemenin bir kaç yolu vardır

1- Useragent (Tarayıcı) Kontrol

Useragent tarayıcıya göre değişen tarayıcının sürümünü ve ne olduğunu belirtir peki useragentin konumuz ile ne alakası var? Bot saldırısı ile veri çeken bir kişi cURL bot işlemlerini daha yeni yeni kavrıyor ise useragent işlemini yapmaz veya random bir useragent ile işleme devam eder.

PHP ile useragentsiz veri çekmeye çalışan bir botu nasıl engelleriz ?

<?php
$useragent_obir_ninja = $_SERVER["HTTP_USER_AGENT"]; // useragenti alalım

if(empty($useragent_obir_ninja)) { // useragent boş ise işlem döndürelim
exit; // user agent boş ise exit atıp tüm işlemleri sonlandıralım
}

?>

Veya useragent içinde veri sorgulayalım :

<?php
$useragent_obir_ninja = $_SERVER["HTTP_USER_AGENT"]; // useragenti alalım


if(strstr($useragent_obir_ninja, "Google")) { // useragent içinde "Google" geçiyor ise

} else { // geçmiyor ise

exit; // geçmiyor ise exit atıp tüm işlemleri durduralım

}
?>

Useragent işlemleri hem get hem post işlemlerinde kullanılabilir.

2- Referer(Yönlendiren) Kontrol

Referer yani yönlendiren adres kontrolu sadece POST işlemlerinde ele alınabilir get işlemlerinde kişi sayfaya tarayıcıdan yazarakta girebilir fakat post işlemlerinde herhangi bir butona tıklayıp post işlemi gerçekleştirmesi gerekir.

PHP ile referer adresini nasıl kontrol ederiz ?

<?php
$referer_obir_ninja = $_SERVER["HTTP_REFERER"]; // referer adresini alalım

if($referer_obir_ninja=="https://obir.ninja/islem.php") { // referer sayfası "https://obir.ninja/islem.php" ise

} else { // https://obir.ninja/islem.php sayfasından gelmedi ise

exit; // farklı bir yerden post edilmiş veya referer sayfası belirtilmemiş ise exit;

}
?>

3- Verileri javascript ile yazdıralım

Veriler javascript ile nasıl yazdırılacak diye soracak olursanız örneğin herhangi bir div içine makale veya bir yazı yazacaksanız javascript ile yazarsanız işi daha da zorlandırabilirsiniz

Verileri javascript ile yazalım :

<script type="text/javascript">
var veri = 'obir.ninja';
document.getElementByClassName("obir_yazi").innerHTML = veri;
</script>

Yukarıdaki işlemde

<div class="obir_yazi"></div>

içerisinde obir.ninja yazdık ve bu işlem javascript ile oldu bunu daha da zorlaştıralım :

<script type="text/javascript">
var sifreli_veri = 'b2Jpci5uaW5qYQ==';
var veri = atob(sifreli_veri);
document.getElementByClassName("obir_yazi").innerHTML = veri;
</script>

Yukarıdaki işlemde ise div içine javascript üzerinde base64 ile belirtmiş olduğumuz şifreli veriyi atob(); işlemi ile decode ettik yani çözdük ve div içine yazdırdık.

4- Test cookie(çerez) işlemi

Bu işlemi yaparsanız sizin tarayıcınızda çerezlere izin vermeyen kişi post işlemi yapamayacak

Post işleminden önceki post.php sayfasına şu kodları girelim :

<?php
setcookie("obir_ninja_cerez", "1");
?>

Post işelmi yapılan islem.php sayfasına şu kodları girelim :

<?php
$cerez = $_COOKIE["obir_ninja_cerez"];

if($cerez=="1") { // çerez doğrulanmış ise

} else { // doğrulanmamış ise 

exit; // exit atıp çerez doğrulanmadığı için tüm işlemleri sonlandıralım.

}
?>

5- Resim doğrulama işlemi

Normalde güvenlik kodu ile yapılır fakat biz işi daha değişik ve profesyonel yapalım istedik

Şimdi öncelikle form içine şu şekilde entegre edeceğiz ilk önce bir random_resim.php oluşturalım ;

<?php
session_start(); // session işlemlerini başlatalım

$resimler = array("araba", "otobus");
$random_resim = array_rand($resimler, 2);
$resim = $random_resim;

$_SESSION["resim"] = $resim;
echo '<img src="https://obir.ninja/resimler/'.$resim.'.png">';
?>

Daha sonra işlem yapılan post.php içine girelim ve form içine yerleştirelim ;

<form action="post.php" method="POST">
<?php include("random_resim.php"); ?>
<input type="text" name="dogrulama" placeholder="Resimde gördüğünüz şeyi yazınız.">
<button type="submit" name="post_ninja">İşlem</button>
</form>

post.php içine şu şekilde bir sorgu girelim :

<?php
session_start();

$resim = $_SESSION["resim"];

$post_dogrulama = $_POST["dogrulama"];

if($resim==$post_dogrulama)) {
echo 'Doğrulama başarılı.';
} else {
echo 'Doğrulama başarısız.';
exit; // tüm işlemleri bitirelim
}
?>

Yukarıdaki işlemlerde şöyle bir şey yaptık önce random_resim.php içinde session başlattık ve array içinden random bir resim çıkardık çıkardığımız resimi img ile kişiye gösterdik ve session[“resim”] içine hangi resmi çıkarttığımızı gösterdik

Ardından random_resim.php’yi post.php içine form alanına entegre ettik ve form’a giren kişi random resim gördü ve aşşağıya hangi resmi gördüğünü doğrulaması için bir kutucuk oluşturuldu

Kutucuğa gördüğü resmi doğru yazarsa örneğin araba veya otobüs işlemleri görebilecek fakat yanlış şey yazarsa örneğin araba görüp uçak yazarsa exit; ile tüm işlemleri bitirecek.

Yazar: Admin

Full Stack Developer & Network

Bir Cevap Yazın