PHP ile Google Authenticator Eklemek ve 2 Adımla Doğrulama Sistemi Yapmak

Güvenlik bir internet sitesinin en önemli kusuru olabiliyor çoğu zaman. Birçok sitenin bile şu günlerde hacklenmesi, hatta 2 adımlı doğrulama olmayan birçok ünlü kişinin profillerinin kötü kişiler tarafından ele geçirilmesi de çokca yaşanır oldu. Bir PHP projenize ne kadar güvenlik önlemi alırsanız o kadar iyi olacak sizler için. Ben burada size kısaca PHP alt yapısı ile çalışan sistemler için nasıl bir sistem yapılabilir onu aktaracağım.

Size aktaracağım bu yazımda Michael Kliewe tarafından kodlanmış basit bir 2 adımlı doğrulama classını kullandım. Sizde Github üzerinden indirebilirsiniz linki tamda burada.

Şimdi işlemlerimiz yönetici kısmında yer alacağı için projenizin admin klasöründe her sayfanın gördüğü header.php dosyanıza (ismi sizde farklı olabilir) ilk olarak eğer doğrulama yapılmamışsa bizi doğrulama sayfasına götürmesini ve başka hiçbir işlem yapmamasını şartlayalım.

if(!$_SESSION['dogrulama'] && !$_GET['do']=='dogrula'):
  header('Location:siteadminadresi.com/?do=dogrula');
  exit;
endif;

Burada daha sonra oluşturacağımız bir SESSION'ın var olup olmadığını kontrol ettirdik ve eğer yoksa VE mevcut sayfamız dogrula değilse (Burada eğer bu şartlamayı eklemez iseniz dogrula sayfasında sürekli bir yönlendirme yapacak ve hata verecektir.) belirteceğimiz adrese gitmesini istedik. Ardından herhangi bir açık oluşturmaması için exit ile kendinden sonra gelen kodları öldürdük.

Şimdi dogrula bölümüne geçelim yada sayfası diyeyim. Ben örnekte Get ile verdiğim için o şekilde devam edeceğim. Sitenizin admin index sayfasına aşağıdaki gibi bir bölüm oluşturun.

<?php 

if($_GET['do']=='dogrula'):

//bla bla bla


endif;

?>

Artık link.com/?do=dogrula kısmına geldiğimizde bla bla bla yazdığımız yere ekleyeceğimiz kodlar çalışacaktır. Şimdi devam edelim; Sistemsel eklemelerden önce kullanıcı tablomuza yani giriş yaptığımız kullanıcıların tutulduğu tabloya 2 sütun ekleyelim. 2 sütunda VARCHAR 255 olarak ekleyebilirsiniz. Bunlar g2 ve songiris olsun.

Bu kısımda g2 olan tablo sütununda Authenticator kimliğini tutacağız ve songiris kısmına girdiğimiz ve sürekli değişecek olan 6 haneli 2 adımlı doğrulama şifresini tutacağız. Eğer yaptıysak artık classı sisteme dahil edelim ve formlarımızı oluşturalım.

<?php 

if($_GET['do']=='dogrula'):

//İlk olarak indirdiğimiz classı dizine atalım ve projemize ekleyelim. Ben ismini kısaca aut.php olarak değiştirdim.
require '/admin/aut.php';
//Clasımızı projemizde kullanacağımız şekilde oluşturalım.
$ga = new PHPGangsta_GoogleAuthenticator();
$secret = $ga->createSecret();
//Projemizi Google Authenticator uygulamasında görünecek ismini belirtelim.
$qrCodeUrl = $ga->getQRCodeGoogleUrl('KazimUSLU.Com.TR', $secret);
?>

<?php
//Header.php dosyanızda kullanıcı bilgilerinizi ne ile çekiyorsanız o değişkeni yazın. Ben bu örnekte değişkenimi $admin olarak gösterdim.
 if($admin['g2']):?>
		<form action="" method="POST">
  <div class="form-group">
    <label for="exampleInputEmail1">6 Haneli Doğrulama Kodunu Girin</label>
    <input type="text" name="tekkod" class="form-control">
  </div>
  <button type="submit" name="g2dogrula" class="btn btn-primary">Kilidi Kaldır</button>
</form>
	 <?php else:?>
	 <p>Henüz Authenticator Tanımlanmamış. İlk olarak tanımlamanız gerekmektedir.</p>
	 <a target="_blank" class="btn btn-success" href="<?=$qrCodeUrl?>">QR Kodunu Görmek için Tıklayın.</a>
	 <p>Burada görüntüle</p>
	 <iframe src="<?=$qrCodeUrl?>" scrolling="no" frameborder="0" width="600" height="200"></iframe>
	 <hr>
	 <form action="" method="POST">
  <div class="form-group">
    <label for="exampleInputEmail1">6 Haneli Kodu Gir</label>
    <input type="text" name="tekkod" class="form-control">
	  <input type="hidden" name="gizli" value="<?=$secret?>" class="form-control">
  </div>
  <button type="submit" name="g2kayit" class="btn btn-primary">Kaydet</button>
</form>
	 <?php endif;
if(isset($_POST['g2dogrula'])):
$tekkod=$_POST['tekkod'];
$gizli=$admin['g2'];
$checkResult = $ga->verifyCode($gizli, $tekkod, 2);    // 2 = 2*30sec clock tolerance

	 if($checkResult):
	 $ekle=$db->prepare('UPDATE KULLANICITABLOADI SET songiris=? WHERE uye_id=?');
	 $ekle->execute(array($tekkod,$admin['uye_id']));
	 $_SESSION['dogrula']=$tekkod;
	 header('location:siteadminadresi.com/'));
	 exit;
	 else:
	 header('location:siteadminadresi.com/?do=dogrula&durum=basarisiz'));
	 exit;
	 endif;
	 
	 
endif;

if(isset($_POST['g2kayit'])):
$tekkod=$_POST['tekkod'];
$gizli=$_POST['gizli'];
$checkResult = $ga->verifyCode($gizli, $tekkod, 2);    // 2 = 2*30sec clock tolerance

	 if($checkResult):
	 $ekle=$db->prepare('UPDATE KULLANICITABLOADI SET g2=? WHERE uye_id=?');
	 $ekle->execute(array($gizli,$admin['uye_id']));
	  header('location:siteadminadresi.com/?do=dogrula&durum=basarili'));
	 exit;
	 else:
	  header('location:siteadminadresi.com/?do=dogrula&durum=basarisiz'));
	 exit;
	 endif;
	 
	 
endif;

?>


<?php 


endif;

?>

Bu kısımda henüz bir iki adımlı doğrulama tanımlamadığımız için tanımlama yapacağız. İlk forum eğer $admin['g2'] yani yeni oluşturduğumuz sütun dolu ise sadece doğrulama formu gösterecek. ve telefondan kodu girdiğinizde kod adminde yer alan g2 sütunu ile karşılaşıp doğruluğu onaylanırsa SESSION['dogrula'] oluşturacak ve anasayfaya yönlenecek. Yani kilidi kırmış olacaksınız ve oturumunuz boyunca bir daha şifre girmeniz gerekmeyecek. Eğer henüz g2 sütunu dolu değilse 2. form aktif olacak ve size bir QR kodu gözükecek. Bu kod ile Google Authenticator uygulaması üzerinden okutup siteniz için doğrulama kodu alabileceksiniz. QR kodunu okuttuktan sonra.

Bendeki gibi telefon üzerinde gözüken 6 haneli kodu girip kontrolünü sağlamanız gerekiyor. Eğer kodu doğru girerseniz bu bilgiler Adminde eklediğimiz songiris ve g2 bölümüne eklenecek ve bir sonraki aşama olan kilidi kaldır ekranı karşınıza gelecektir.

Telefondaki doğrulama kodunu girip kilidi kaldırırsanız artık admin paneline erişebilirsiniz. Google uygulamasını indirmek için;

https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en&gl=US


PHP Kodlama kategorisinde 14 Aralık 2020 - 17:59:19 tarihinde yayınlanmıştır. 197 Gösterim

Hakkımda

PHP,MYSQL,CSS,JS,JQUERY yazılım dillerine hakim, Şu sıralar PYHTON ve LINUX üzerine araştırma geliştirme yapan, sunucu optimizasyonu ile uğraşan dijital kod yazarıyım...
Daha fazla bilgi için Ben Kimim?

Yorumlar (0)

Bu yazıya henüz bir yorum yapılmamış, hemen bir tane yapmak ister misin ?

Yorum Yapın