Son kullanma tarihi geçmiş, bayatlamış bir tarayıcı kullanıyorsanız, Mercedes kullanmak yerine tosbağaya binmek gibi... Web sitelerini düzgün görüntüleyemiyorsanız eh, bi' zahmet tarayıcınızı güncelleyiniz. Modern Web standartlarını karşılayan bir tarayıcı alternatifine göz atın.
Merhaba. İyi sosyaller dilerim. PHP'ye yeni başlamış birisi olarak kafama takılan bir soruya cevap arıyorum. Aşağıda belirttiğim gibi veritabanına veri ekliyorum. Benim için herhangi bir hata veya problem oluşmuyor. Malum kodlar çok basit. Bu kadar basit olması bende şüphe uyandırıyor. Kodların bu kadar basit olması herhangi bir zafiyet oluşturur mu? Verilerimi kaydetmenin daha güvenli bir yolu var mıdır?
PHP:
<?php
if (isset($_POST["veri_ekle"]))
{
$veri_ekle = $db->prepare("insert into VeriListesi set
isim=:isim,
soyisim=:soyisim
");
$kontrol_et = $veri_ekle->execute(array(
"isim" => $_POST["isim"],
"soyisim" => $_POST["soyisim"]
));
if($kontrol_et)
{
echo "veri eklendi";
}
else
{
echo "bir hata var gibi görünüyor.";
}
}
?>
Öncelikle teşekkür ederim. Dün bu konu hakkında çeşitli projelere bakarken şöyle basit bir proje buldum. Bahsettiğim proje. yorumları okuduğumda çok kolay bir şekilde SQL ınjection yapılabileceğinden bahsedilmiş. Bunu önleyebilmem adına önerebileceğiniz kaynak veya kaynaklar varsa belirtebilir misiniz?
CSRF token olayını öğrendim. Yeniyim diye sanırım kafamı karıştırdı biraz. Daha temelden anlamamı sağlayacak kaynak olursa çok sevinirim.
Öncelikle teşekkür ederim. Dün bu konu hakkında çeşitli projelere bakarken şöyle basit bir proje buldum. Bahsettiğim proje. yorumları okuduğumda çok kolay bir şekilde SQL ınjection yapılabileceğinden bahsedilmiş. Bunu önleyebilmem adına önerebileceğiniz kaynak veya kaynaklar varsa belirtebilir misiniz?
CSRF token olayını öğrendim. Yeniyim diye sanırım kafamı karıştırdı biraz. Daha temelden anlamamı sağlayacak kaynak olursa çok sevinirim.
Daha sonra giriş yapan kişinin erişmesini istediğim sayfaların en başına şu kodları ekliyorum. (nedenini bilmiyorum bu kodları ekleyince Technopat hata veriyor ve cevap veremiyorum. O yüzden resim olarak eklemek zorunda kaldım.)
Kodlarını sadeleştirip, istediğin şekle getirdim. Yanlarına da açıklamalarını yazdım. Bu şekilde kullanırken CSRF Token kullanmana gerek yok. Takıldığın bir yer olursa veya çalışmazsa bana hata mesajını iletebilirsin. Aceleyle yaptım müsait değildim.
PHP:
<?php
if (isset($_POST)) { // post işlemi varsa işlemlere başladık.
$name = htmlspecialchars($_POST["kullanici_adi"], ENT_QUOTES); // gelen kullanıcı adı verisini özel karakterlerden arındırarak değişkene atadık.
$pass = htmlspecialchars($_POST["kullanici_sifre"], ENT_QUOTES); // gelen kullanıcı şifresi verisini özel karakterlerden arındırarak değişkene atadık.
$sorgu = $db->prepare("SELECT * FROM adminler WHERE kullanici_adi=:kullanici_adi AND kullanici_sifre=:kullanici_sifre"); //sorgu oluşturduk ve parametrelerle veritabanı kontrolü yaptırdık.
$sorgu->bindParam(':kullanici_adi', $name); // kullanici_adi parametresine $name değişkenini atadık.
$sorgu->bindParam(':kullanici_sifre', $pass); // kullanici_sifre parametresine $pass değişkenini atadık.
$sorgu->execute(); // derledik.
if ($sorgu->rowCount() > 0) { //üstteki sorguya uyan 0'dan fazla bir kayıt olup olmadığını kontrol ettik.
$sonuc = $sorgu->fetch(); //veritabanındaki verileri $sonuc değişkenine atadık.
$_SESSION['oturum'] = true; // oturum sessionunu true yaptık kontrolü buradan yapabiliriz.
$_SESSION['kullanici_adi'] = $sonuc['kullanici_adi']; // kullanici_adi sessionuna veritabanında giriş yapan kullanıcıya ait kullanici_adi verisini atadık.
$_SESSION['kullanici_sifre'] = $sonuc['kullanici_sifre']; // kullanici_sifre sessionuna veritabanında giriş yapan kullanıcıya ait kullanici_sifre verisini atadık.(buna gerek yok şifreyi almasak da olur sadece örnek için ekledim)
// $_SESSION['kullanici_diger_bilgi'] = $sonuc['kullanici_diger_bilgi'];
// veritabanından kullanıcıya ait verileri burada verdiğim örnekle sessiona atayabilirsin.
header("Location:Yonetim-Paneli.php"); // giriş yapan kullanıcıyı panele yönlendirdik.
} else {
echo "<div style='color:red; height:40px; border-radius:20px; font-size:21px;'><p><center>Kullanıcı adı veya şifre hatalı</center></p></div><hr>"; // hata mesajı yazdırdık.
}
}
?>
Kodlarını sadeleştirip, istediğin şekle getirdim. Yanlarına da açıklamalarını yazdım. Bu şekilde kullanırken csrf token kullanmana gerek yok. Takıldığın bir yer olursa veya çalışmazsa bana hata mesajını iletebilirsin. Aceleyle yaptım müsait değildim.
PHP:
<?php
if (isset($_POST)) { // post işlemi varsa işlemlere başladık.
$name = htmlspecialchars($_POST["kullanici_adi"], ENT_QUOTES); // gelen kullanıcı adı verisini özel karakterlerden arındırarak değişkene atadık.
$pass = htmlspecialchars($_POST["kullanici_sifre"], ENT_QUOTES); // gelen kullanıcı şifresi verisini özel karakterlerden arındırarak değişkene atadık.
$sorgu = $db->prepare("SELECT * FROM adminler WHERE kullanici_adi=:kullanici_adi AND kullanici_sifre=:kullanici_sifre"); //sorgu oluşturduk ve parametrelerle veritabanı kontrolü yaptırdık.
$sorgu->bindParam(':kullanici_adi', $name); // kullanici_adi parametresine $name değişkenini atadık.
$sorgu->bindParam(':kullanici_sifre', $pass); // kullanici_sifre parametresine $pass değişkenini atadık.
$sorgu->execute(); // derledik.
if ($sorgu->rowCount() > 0) { //üstteki sorguya uyan 0'dan fazla bir kayıt olup olmadığını kontrol ettik.
$sonuc = $sorgu->fetch(); //veritabanındaki verileri $sonuc değişkenine atadık.
$_SESSION['oturum'] = true; // oturum sessionunu true yaptık kontrolü buradan yapabiliriz.
$_SESSION['kullanici_adi'] = $sonuc['kullanici_adi']; // kullanici_adi sessionuna veritabanında giriş yapan kullanıcıya ait kullanici_adi verisini atadık.
$_SESSION['kullanici_sifre'] = $sonuc['kullanici_sifre']; // kullanici_sifre sessionuna veritabanında giriş yapan kullanıcıya ait kullanici_sifre verisini atadık.(buna gerek yok şifreyi almasak da olur sadece örnek için ekledim)
// $_SESSION['kullanici_diger_bilgi'] = $sonuc['kullanici_diger_bilgi'];
// veritabanından kullanıcıya ait verileri burada verdiğim örnekle sessiona atayabilirsin.
header("Location:Yonetim-Paneli.php"); // giriş yapan kullanıcıyı panele yönlendirdik.
} else {
echo "<div style='color:red; height:40px; border-radius:20px; font-size:21px;'><p><center>Kullanıcı adı veya şifre hatalı</center></p></div><hr>"; // hata mesajı yazdırdık.
}
}
?>
Zaman ayırıp teker teker açıklama yapmışsınız çok teşekkür ederim. İlk denediğimde şu şekilde hata verdi.
Kod:
Warning: Undefined array key "kullanici_adi" in C:\xampp\htdocs\taslakprojem\giris-yap.php on line 24.
Warning: Undefined array key "kullanici_sifre" in C:\xampp\htdocs\taslakprojem\giris-yap.php on line 25
İf (isset($_post)) --> if($_post) şeklinde değiştirince hata kalkıyor. Bu şekilde kullanılması bir problem oluşturur mu yoksa zaten doğrusu mu bu? Ayrıca doğru bilgilerle giriş yaptığımda giriş yapmıyordu. $_sessıon['oturum'] = true; üstüne session_start(); ekleyince normal bir şekilde giriş yapar oldu. Şuan da herhangi bir hata yok.
İf (isset($_post)) --> if($_post) mevzusuna açıklık getirilirse mutlu olurum.
Zaman ayırdığınız için size tekrardan çok teşekkür ediyorum.
<?php
session_start();
if (isset($_POST['submit'])) { // eğer gelen bir submit varsa aşağıdaki kodları çalıştırdık.
$name = htmlspecialchars($_POST["kullanici_adi"], ENT_QUOTES); // gelen kullanıcı adı verisini özel karakterlerden arındırarak değişkene atadık.
$pass = htmlspecialchars($_POST["kullanici_sifre"], ENT_QUOTES); // gelen kullanıcı şifresi verisini özel karakterlerden arındırarak değişkene atadık.
$sorgu = $db->prepare("SELECT * FROM adminler WHERE kullanici_adi=:kullanici_adi AND kullanici_sifre=:kullanici_sifre"); //sorgu oluşturduk ve parametrelerle veritabanı kontrolü yaptırdık.
$sorgu->bindParam(':kullanici_adi', $name); // kullanici_adi parametresine $name değişkenini atadık.
$sorgu->bindParam(':kullanici_sifre', $pass); // kullanici_sifre parametresine $pass değişkenini atadık.
$sorgu->execute(); // derledik.
if ($sorgu->rowCount() > 0) { //üstteki sorguya uyan 0'dan fazla bir kayıt olup olmadığını kontrol ettik.
$sonuc = $sorgu->fetch(); //veritabanındaki verileri $sonuc değişkenine atadık.
$_SESSION['oturum'] = true; // oturum sessionunu true yaptık kontrolü buradan yapabiliriz.
$_SESSION['kullanici_adi'] = $sonuc['kullanici_adi']; // kullanici_adi sessionuna veritabanında giriş yapan kullanıcıya ait kullanici_adi verisini atadık.
$_SESSION['kullanici_sifre'] = $sonuc['kullanici_sifre']; // kullanici_sifre sessionuna veritabanında giriş yapan kullanıcıya ait kullanici_sifre verisini atadık.(buna gerek yok şifreyi almasak da olur sadece örnek için ekledim)
// $_SESSION['kullanici_diger_bilgi'] = $sonuc['kullanici_diger_bilgi'];
// veritabanından kullanıcıya ait verileri burada verdiğim örnekle sessiona atayabilirsin.
header("Location:Yonetim-Paneli.php"); // giriş yapan kullanıcıyı panele yönlendirdik.
} else {
echo "<div style='color:red; height:40px; border-radius:20px; font-size:21px;'><p><center>Kullanıcı adı veya şifre hatalı yönlendiriliyorsunuz...</center></p></div><hr>"; // hata mesajı yazdırdık.
// BU YORUM SATIRININ YERİNE AŞAĞIDA VERDİĞİM KODU GİRMELİSİN.
}
}
?>
Technopat hatası nedeniyle yazamadığım için yorum satırına ekleyeceğin kod burada:
[MEDIA]
Giriş formuna action ve submit butonu ekledik. islem.php içerisine de eğer submit yapıldıysa kontrolü yaptık.
Ayrıca formun üstüne bir de oturum kontrolü ekledik. Yani daha önceden giriş yapmış birisi giris.php sayfasına girmeye çalışırsa otomatik olarak panele yönlendirilecek. Eğer giriş yapılmamışsa form gözükecek.
<?php
session_start();
if (isset($_POST['submit'])) { // eğer gelen bir submit varsa aşağıdaki kodları çalıştırdık.
$name = htmlspecialchars($_POST["kullanici_adi"], ENT_QUOTES); // gelen kullanıcı adı verisini özel karakterlerden arındırarak değişkene atadık.
$pass = htmlspecialchars($_POST["kullanici_sifre"], ENT_QUOTES); // gelen kullanıcı şifresi verisini özel karakterlerden arındırarak değişkene atadık.
$sorgu = $db->prepare("SELECT * FROM adminler WHERE kullanici_adi=:kullanici_adi AND kullanici_sifre=:kullanici_sifre"); //sorgu oluşturduk ve parametrelerle veritabanı kontrolü yaptırdık.
$sorgu->bindParam(':kullanici_adi', $name); // kullanici_adi parametresine $name değişkenini atadık.
$sorgu->bindParam(':kullanici_sifre', $pass); // kullanici_sifre parametresine $pass değişkenini atadık.
$sorgu->execute(); // derledik.
if ($sorgu->rowCount() > 0) { //üstteki sorguya uyan 0'dan fazla bir kayıt olup olmadığını kontrol ettik.
$sonuc = $sorgu->fetch(); //veritabanındaki verileri $sonuc değişkenine atadık.
$_SESSION['oturum'] = true; // oturum sessionunu true yaptık kontrolü buradan yapabiliriz.
$_SESSION['kullanici_adi'] = $sonuc['kullanici_adi']; // kullanici_adi sessionuna veritabanında giriş yapan kullanıcıya ait kullanici_adi verisini atadık.
$_SESSION['kullanici_sifre'] = $sonuc['kullanici_sifre']; // kullanici_sifre sessionuna veritabanında giriş yapan kullanıcıya ait kullanici_sifre verisini atadık.(buna gerek yok şifreyi almasak da olur sadece örnek için ekledim)
// $_SESSION['kullanici_diger_bilgi'] = $sonuc['kullanici_diger_bilgi'];
// veritabanından kullanıcıya ait verileri burada verdiğim örnekle sessiona atayabilirsin.
header("Location:Yonetim-Paneli.php"); // giriş yapan kullanıcıyı panele yönlendirdik.
} else {
echo "<div style='color:red; height:40px; border-radius:20px; font-size:21px;'><p><center>Kullanıcı adı veya şifre hatalı yönlendiriliyorsunuz...</center></p></div><hr>"; // hata mesajı yazdırdık.
// BU YORUM SATIRININ YERİNE AŞAĞIDA VERDİĞİM KODU GİRMELİSİN.
}
}
?>
Technopat hatası nedeniyle yazamadığım için yorum satırına ekleyeceğin kod burada:
[MEDIA]
Giriş formuna Action ve submit butonu ekledik. islem.php içerisine de eğer submit yapıldıysa kontrolü yaptık.
Ayrıca formun üstüne bir de oturum kontrolü ekledik. Yani daha önceden giriş yapmış birisi giris.php sayfasına girmeye çalışırsa otomatik olarak panele yönlendirilecek. Eğer giriş yapılmamışsa form gözükecek.