Arsen Lüpen
Hectopat
- Katılım
- 28 Şubat 2021
- Mesajlar
- 81
Daha fazla
- Cinsiyet
- Erkek
== admin
olarak ayarlarsanız çok kolay SQL Injection yersiniz.if(isset($_POST['login'])) {
$user_name = $_POST['user_name'];
$user_mail = $_POST['user_mail'];
$user_password = $_POST['user_password'];
$q = $db->query("SELECT * FROM admins WHERE user_name='$user_name' && user_mail='$user_mail' && user_password='$user_password' && user_role=1",PDO::FETCH_ASSOC);
$admin = $q -> rowCount();
$qq = $db->query("SELECT * FROM admins WHERE user_name='$user_name' && user_mail='$user_mail' && user_password='$user_password' && user_role=0",PDO::FETCH_ASSOC);
$calisan = $qq -> rowCount();
if( $admin > 0 ){
$sorgu = $db->prepare("SELECT * FROM admins WHERE user_name = ?");
$sorgu->bindParam(1, $user_name, PDO::PARAM_STR);
$sorgu->execute();
$cikti = $sorgu->fetch(PDO::FETCH_ASSOC);
$_SESSION['adminoturumu']=true;
$_SESSION['user_name']=$cikti['user_name'];
$_SESSION['user_mail']=$cikti['user_mail'];
$_SESSION['user_role']=$cikti['user_role'];
header( "Refresh:2;url=admin_sayfasi.php" );
echo 'Admin girişi yapıldı yönlendiriliyorsunuz...';
} elseif( $calisan > 0) {
$sorgu = $db->prepare("SELECT * FROM admins WHERE user_name = ?");
$sorgu->bindParam(1, $user_name, PDO::PARAM_STR);
$sorgu->execute();
$cikti = $sorgu->fetch(PDO::FETCH_ASSOC);
$_SESSION['calisanoturumu']=true;
$_SESSION['user_name']=$cikti['user_name'];
$_SESSION['user_mail']=$cikti['user_mail'];
$_SESSION['user_role']=$cikti['user_role'];
header( "Refresh:2;url=calisan_sayfasi.php" );
echo 'Çalışan girişi yapıldı yönlendiriliyorsunuz...';
} else {
header( "Refresh:2;url=giris_sayfasi.php" );
echo 'Bilgileriniz hatalı...';
}
}
Direkt== admin
olarak ayarlarsanız çok kolay SQL ınjection yersiniz.
Güvenliği arttırın.
Sorunuza gelirsek veri tabanı üzerinde yer alan bir kullanıcı rolü durumu olması lazım. Duruma göre ilgili sayfaya erişim izni vermeniz gerkiyor.
Eğer çalışan ve admin üyeleri aynı tabloya ekliyorsanız okey ama pek mantıklı gelmiyor bu şekilde bilginiz olsun.
@Eray T hocamın dediği gibi bu ve önceki kodlarında da çok önemli güvenlik açıkları var. Ben sana yine çalışan haliyle yazayım gerisi sana kalsın
Tablonda user_role 1 ise admi 0 ise çalışan buna göre düzenleyebilirsin.
PHP:if(isset($_POST['login'])) { $user_name = $_POST['user_name']; $user_mail = $_POST['user_mail']; $user_password = $_POST['user_password']; $q = $db->query("SELECT * FROM admins WHERE user_name='$user_name' && user_mail='$user_mail' && user_password='$user_password' && user_role=1",PDO::FETCH_ASSOC); $admin = $q -> rowCount(); $qq = $db->query("SELECT * FROM admins WHERE user_name='$user_name' && user_mail='$user_mail' && user_password='$user_password' && user_role=0",PDO::FETCH_ASSOC); $calisan = $qq -> rowCount(); if( $admin > 0 ){ $sorgu = $db->prepare("SELECT * FROM admins WHERE user_name = ?"); $sorgu->bindParam(1, $user_name, PDO::PARAM_STR); $sorgu->execute(); $cikti = $sorgu->fetch(PDO::FETCH_ASSOC); $_SESSION['adminoturumu']=true; $_SESSION['user_name']=$cikti['user_name']; $_SESSION['user_mail']=$cikti['user_mail']; $_SESSION['user_role']=$cikti['user_role']; header( "Refresh:2;url=admin_sayfasi.php" ); echo 'Admin girişi yapıldı yönlendiriliyorsunuz...'; } elseif( $calisan > 0) { $sorgu = $db->prepare("SELECT * FROM admins WHERE user_name = ?"); $sorgu->bindParam(1, $user_name, PDO::PARAM_STR); $sorgu->execute(); $cikti = $sorgu->fetch(PDO::FETCH_ASSOC); $_SESSION['calisanoturumu']=true; $_SESSION['user_name']=$cikti['user_name']; $_SESSION['user_mail']=$cikti['user_mail']; $_SESSION['user_role']=$cikti['user_role']; header( "Refresh:2;url=calisan_sayfasi.php" ); echo 'Çalışan girişi yapıldı yönlendiriliyorsunuz...'; } else { header( "Refresh:2;url=giris_sayfasi.php" ); echo 'Bilgileriniz hatalı...'; } }
Yanlış olabilir aceleyle yazdım kontrol et bir çalışmıyorsa tekrar bakalım. Maça yetişiyorum da
Eğer çalışan ve admin üyeleri aynı tabloya ekliyorsanız okey ama pek mantıklı gelmiyor bu şekilde bilginiz olsun.
@Eray T hocamın dediği gibi bu ve önceki kodlarında da çok önemli güvenlik açıkları var. Ben sana yine çalışan haliyle yazayım gerisi sana kalsın
Tablonda user_role 1 ise admi 0 ise çalışan buna göre düzenleyebilirsin.
PHP:if(isset($_POST['login'])) { $user_name = $_POST['user_name']; $user_mail = $_POST['user_mail']; $user_password = $_POST['user_password']; $q = $db->query("SELECT * FROM admins WHERE user_name='$user_name' && user_mail='$user_mail' && user_password='$user_password' && user_role=1",PDO::FETCH_ASSOC); $admin = $q -> rowCount(); $qq = $db->query("SELECT * FROM admins WHERE user_name='$user_name' && user_mail='$user_mail' && user_password='$user_password' && user_role=0",PDO::FETCH_ASSOC); $calisan = $qq -> rowCount(); if( $admin > 0 ){ $sorgu = $db->prepare("SELECT * FROM admins WHERE user_name = ?"); $sorgu->bindParam(1, $user_name, PDO::PARAM_STR); $sorgu->execute(); $cikti = $sorgu->fetch(PDO::FETCH_ASSOC); $_SESSION['adminoturumu']=true; $_SESSION['user_name']=$cikti['user_name']; $_SESSION['user_mail']=$cikti['user_mail']; $_SESSION['user_role']=$cikti['user_role']; header( "Refresh:2;url=admin_sayfasi.php" ); echo 'Admin girişi yapıldı yönlendiriliyorsunuz...'; } elseif( $calisan > 0) { $sorgu = $db->prepare("SELECT * FROM admins WHERE user_name = ?"); $sorgu->bindParam(1, $user_name, PDO::PARAM_STR); $sorgu->execute(); $cikti = $sorgu->fetch(PDO::FETCH_ASSOC); $_SESSION['calisanoturumu']=true; $_SESSION['user_name']=$cikti['user_name']; $_SESSION['user_mail']=$cikti['user_mail']; $_SESSION['user_role']=$cikti['user_role']; header( "Refresh:2;url=calisan_sayfasi.php" ); echo 'Çalışan girişi yapıldı yönlendiriliyorsunuz...'; } else { header( "Refresh:2;url=giris_sayfasi.php" ); echo 'Bilgileriniz hatalı...'; } }
Yanlış olabilir aceleyle yazdım kontrol et bir çalışmıyorsa tekrar bakalım. Maça yetişiyorum da
Tablo yapını yaz istersen ona göre düzenleyip atayım sana müsait olunca. Eğitim seti için de bakarım bi söylerim sana.Vallahi PHP de çok yeniyim daha 1 2 ay oldu. Güvenlik kısmını yeni yeni öğreniyorum.
O zaman rol oluşturmadan, iki ayrı tablo oluşturup ikisi içinde giriş işlemi yapmam lazım değil mi? Mantıklı değil dediniz ya.
Peki ben güncel olarak phpyi nasıl öğrenebilirim? Yani ilk başta youtubedan video izliyordum ama videolar çok eskiydi en yenileri 1 2 yıllıktı. Udemyden ders aldım ordan devam ettim sonra. 2023 yılında yenilenen bir dersti günceldi yani. Şimdi bakıyorum şu yaptıklarınıza benim öğrendiklerimden çok farklı. Bir de diyorsunuz güvenlik açıkları var diye.
Bu arada teşekkür ederim. Aynı tabloda olmaları çok mantıklı değil deyince iki farklı tablo oluşturdum bende çalışanlar ve yöneticiler için.
Vallahi PHP de çok yeniyim daha 1 2 ay oldu. Güvenlik kısmını yeni yeni öğreniyorum.
O zaman rol oluşturmadan, iki ayrı tablo oluşturup ikisi içinde giriş işlemi yapmam lazım değil mi? Mantıklı değil dediniz ya.
Peki ben güncel olarak phpyi nasıl öğrenebilirim? Yani ilk başta youtubedan video izliyordum ama videolar çok eskiydi en yenileri 1 2 yıllıktı. Udemyden ders aldım ordan devam ettim sonra. 2023 yılında yenilenen bir dersti günceldi yani. Şimdi bakıyorum şu yaptıklarınıza benim öğrendiklerimden çok farklı. Bir de diyorsunuz güvenlik açıkları var diye.
Bu arada teşekkür ederim. Aynı tabloda olmaları çok mantıklı değil deyince iki farklı tablo oluşturdum bende çalışanlar ve yöneticiler için.
Fehmi uyar izle. Çok sağlam anlatıyor.
Tablo yapını yaz istersen ona göre düzenleyip atayım sana müsait olunca. Eğitim seti için de bakarım bir söylerim sana.
Fehmi uyar izle. Çok sağlam anlatıyor.
Tamamdır teşekkür ederim.
İzledim iyi de sürekli hatalarla karşılaştım. Eski diye mi acaba belki de benim gözümden bir şeyler kaçtı. Tavsiyen için teşekkür ederim.
Tablo yapını yaz istersen ona göre düzenleyip atayım sana müsait olunca. Eğitim seti için de bakarım bir söylerim sana.
Açtığın tabloları iletirsen yazayım. Şunun gibi:@dgknbzglu yaparsan sevinirim. Bir de anlatırsan aradaki farkları iyi olur benim açımdan. Öğrenmiş olurum bende. Şimdiden teşekkür ederim.
admin_tablosu
id
user_name
user_mail
user_password
user_role
uye_tablosu
id
user_name
user_mail
user_password
user_role