* Site yöneticilerine ve site üyelerine ozel olan yönetim panellerini korumak için neler yapmalıyız?
Site yöneticileri ile üye giriş alanlarını birbirinden ayırmak daha mantıklı olur, üye giriş panelini gizlemek saçma olacağından sadece yönetim paneli giriş alanını gizlersin. Ancak giriş formunda tüm güvenlik önlemlerini aldıysan, buna gerek yok hatta yönetim paneline giriş linkini bilselerde sorun teşkil etmez.
* Panel linkini gizlemek ve sadece üyelerin bilmesi için neler yapabiliriz?
Yönetim panelini üye panelinden ayırmakta karar kıldıysan ve yinede gizlemek istiyorsan, htaccess parola korumalı yapabilirsin. Bana bu biraz paronoyakça geliyor onu da belirteyim. Yönetim paneli linkini en azından(yonetim,admin,panel,administrator) gibi isimler vermekten kaçınmalısın. Ekstra olarak sadece yönetici için çift parola önlemi koyabilirsin. Burada önemli olan harf,rakam,karakter içeren parolalar kullanmaya özen göstermek. Eğer bu formda da yazılım tarafında gerekli güvenlik önlemlerini almadıysan saydıklarımı yapmanın pek bir anlamı yok.
* Panelin root sayfasına htaceess ile şifre koyup (üyelere bunu iletmek kaydı ile) iki aşamalı giriş sistemi konusunda ne düşünüyorsunuz?
Bunun çok amatörce bir işlem olacağını düşünüyorum :)
Site güvenliği konusu yazmakla bitmez, hack işlemi sadece yazılım kaynaklı olmuyor. Sizin ile aynı sunucuda barınan bir başka sitenin güvenlik zaafiyeti de sizin hacklenmenize neden olabiliyor. Çok kapsamlı bir sorun.
Yazılım tarafında neler yapılabilir veya bizler neler yapıyoruz. PDO tek başına injection riskini sıfıra indirger mi? PDO'da prepare kullanıldığında modifiye edilmiş amacı değiştirilmiş karakterlerin filtrelendiği söyleniyor. Bu doğru ama, PDO yu prepare kullanmadan da kullananlar var. Bunu bir tarafa bırakalım prepare kullandığınızda da sql injection yeme ihtimalin var. Bununla ilgili geniş kapsamlı bir makale okumuştum linkini bulamadım. Orada anlatılan, kullanılan dünya dillerinden birinde ki karakterler modifiye edilerek girildiğinde başarılı sonuç veren hack senaryosu anlatılıyordu.
Burada php ye iş düşüyor. İd get yada post ediyorsanız int mi diye kontrol etmek gerek misal, bu da hacklenmenize neden olabiliyor. prepare daha güvenli kılmak adına var olsa da tek başına yeterli değil.
post edilen tek tırnakları ben hala filtreliyorum. Post işlemlerin de almış olduğum diğer önlemleri kod üzerinde görmek istersen;
function filterUrl($str){
$str = trim($str);
$str = strip_tags($str,"&");
$str = str_replace("'", "", $str);
return $str;
}
function get($name){
if(isset($_GET[$name])){
if (is_array($_GET[$name])){
return array_map(function($item){
return filterUrl($item);
}, $_GET[$name]);
}
return filterUrl($_GET[$name]);
}
return false;
}
function post($name){
if(isset($_POST[$name])){
if (is_array($_POST[$name])){
return array_map(function($item){
return filterUrl($item);
}, $_POST[$name]);
}
return filterUrl($_POST[$name]);
}
return false;
}
Bu şekilde artık $_POST['deger'] olan bir veriyi post('deger') olarak filtrelenmiş şekilde alabilirsin. Aynı şekilde $_GET['deger'] olan bir veriyi get('deger') şeklinde.
Daha önceki sorularında da yazmıştım. reCaptcha v3 çıktı mutlaka kullanmalısın tüm formlarında.
Mail veya sms ile 2FA doğrulamalı giriş yaptırma yöntemini kullanıyorum ekstradan. Üyelerime de kullandırtıyorum.
Form post edildikten sonra eğer ki bu form bir giriş alanıysa bildiğin üzere, bilgiler doğruysa görmesini istediği sayfaya yönlendiririz. Değilse bir şey yapmayız. Bu da yapılan en büyük yanlışlardan noredirect açığı oluşturur. exit() ile sonlandırmalısınız değilse kısmında. noredirect açığı çok tehlikeli panelinize şifresiz dahi girebilirim her işlemi yapabilirim.
Kullanıcı etkileşimi olan her yerde loglama yapmalısın, yarın bir gün birşeyler ters giderse loglara yoğunlaşarak anlayabilirsin. Bu işlemler hangi ip ile yapılmış vs. Sitemden örnek log sayfası. son satır şüpheli bir işlem.
Aklıma gelenler bunlar şimdilik, olursa yazarım.