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 class="lazyload" src="https://www.kazimuslu.com.tr/public/img/lazyimg.png" data-url="<?=$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
Bu yazıya henüz bir yorum yapılmamış, hemen bir tane yapmak ister misin ?
Milyonlarca oyuncu tarafından oynanan BDO(Black Desert Online) için oyuna yeni başlayanlara yardımcı olması açısından rehber sitesi
Organik Sebzelerim Olmaya Başladı için Temel Coşkun dediki, Bereketli olsun bana da tadına bakmak nasip olur inşallah
UsluTV V2 Canlı TV Scripti için OSHAN SABIRLI dediki, Merhaba TV İzleme scripti ile ilgileniyorum. Bilgi verirseniz sevinirim.
Online Test Sınav Yazılımı için volkan dediki, merhabalar hocam volkan ben bu test çözme scriptinin fiyatı nedir öğrenebilir miyiz...benim bi iki ...
PHP ve Ajax Kullanarak Otomatik Resim Upload Sayfası Nasıl Oluşturulur? için erkan dediki, kodları denedim gayet başarılı çalışıyor. js veya diğer koddaki yolları verirken gerekli ayarları y...
Burada Yer Almak ister misin ? İletişim sayfasından bana ulaşabilirsin :)
UsluTV V2 Canlı TV Scripti için Kazım USLU dediki, Devam eden satışımız bulunmamakta maalesef.