Selamlar,
Generic PHP ile şirket içerisinde kullanılmak üzere bir uygulama yazdık, dışarıya açık değil.
Bu sistemin çalışma mantığında login sistemi tamamen LDAP ile yapılıyor ve içerideki tüm sayfalar ilk girişte almış olduğumuz SESSION verileri üzerinden işlem yapıyor. SESSION verileri daha sonradan değiştirilebildiği için bir güvenlik sorunu yaratılabilir diye düşünüyorum.
Bunu engellemenin bir yöntemi var mıdır? Yada bunu SESSION kullanarak daha güvenli bir hale nasıl getirebilirim? Her sayfada LDAP sorgusu şeklinde yapılabilir fakat buda AD sunucularına bir yük oluşturabilir.
Login sayfamda almış olduğum içerik ve SESSION verileri alt taraftadır;
if ($ldap_entries['count'] == 1) {
// Kullanıcının şifresini doğrulama
$user_dn = $ldap_entries[0]['dn'];
$ldap_auth_bind = ldap_bind($ldap_conn, $user_dn, $password);
if ($ldap_auth_bind) {
// kullanıcı bilgileri doğruysa aşağıdaki bölümleri DC'den çek
$name = htmlspecialchars($ldap_entries[0]['givenname'][0], ENT_QUOTES, 'UTF-8');
$surname = htmlspecialchars($ldap_entries[0]['sn'][0], ENT_QUOTES, 'UTF-8');
$unvan = htmlspecialchars($ldap_entries[0]['title'][0], ENT_QUOTES, 'UTF-8');
$email = htmlspecialchars($ldap_entries[0]['mail'][0], ENT_QUOTES, 'UTF-8');
$dahilino = htmlspecialchars($ldap_entries[0]['telephonenumber'][0], ENT_QUOTES, 'UTF-8');
$gsmno = htmlspecialchars($ldap_entries[0]['mobile'][0], ENT_QUOTES, 'UTF-8');
$engUnvan = htmlspecialchars($ldap_entries[0]['comment'][0], ENT_QUOTES, 'UTF-8');
$Sube = htmlspecialchars($ldap_entries[0]['physicaldeliveryofficename'][0], ENT_QUOTES, 'UTF-8');
$departmanBilgisi = htmlspecialchars($ldap_entries[0]['department'][0], ENT_QUOTES, 'UTF-8');
$firmaBilgisi = $ldap_entries[0]["company"][0];
// Oturumda kullanıcı bilgilerini değişkene atayıp sessiona kaydet
$_SESSION['name'] = $name;
$_SESSION['surname'] = $surname;
$_SESSION['unvan'] = $unvan;
$_SESSION['username'] = $username;
$_SESSION['mail'] = $email;
$_SESSION['telephonenumber'] = $dahilino;
$_SESSION['mobile'] = $gsmno;
$_SESSION['comment'] = $engUnvan;
$_SESSION['physicaldeliveryofficename'] = $Sube;
$_SESSION['department'] = $departmanBilgisi;
$_SESSION['company'] = $firmaBilgisi;
// Bir kez giriş yaptıktan sonra cookie üzerinde tutulacak bilgiler
setcookie('username_remember', $username, time() + (60 * 60 * 24 * 30), '/');
setcookie('name_remember', $name, time() + (60 * 60 * 24 * 30), '/');
setcookie('surname_remember', $surname, time() + (60 * 60 * 24 * 30), '/');
setcookie('unvan_remember', $unvan, time() + (60 * 60 * 24 * 30), '/');
setcookie('email_remember', $email, time() + (60 * 60 * 24 * 30), '/');
// 4 saat session süresi
ini_set('session.gc_maxlifetime', 14400);
ini_set('session.cookie_lifetime', 14400);
header('Location: index.php');
exit();
} else {
// Yanlış şifre
echo '
<script>
document.addEventListener("DOMContentLoaded", function () {
Swal.fire({
icon: "error",
title: "Hata",
text: "Kullanıcı adı veya şifrenizi kontrol ediniz.",
showConfirmButton: false,
timer: 1500
});
});
</script>
';
}
} else {
// Kullanıcı bulunamadı veya birden fazla sonuç var
echo '
<script>
document.addEventListener("DOMContentLoaded", function () {
Swal.fire({
icon: "error",
title: "Hata",
text: "Kullanıcı adı veya şifrenizi kontrol ediniz.",
showConfirmButton: false,
timer: 1500
});
});
</script>
';
}