<?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.";
}
}
?>
"isim" => htmlspecialchars($_POST["isim"]),
"soyisim" => htmlspecialchars($_POST["soyisim"])
htmlspecialchars(); kullanabilirsin.
PHP:"isim" => htmlspecialchars($_POST["isim"]), "soyisim" => htmlspecialchars($_POST["soyisim"])
Ö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.
htmlspecialchars($degisken, ENT_QUOTES);
PHP:htmlspecialchars($degisken, ENT_QUOTES);
Bu şekilde tırnak kullanımı engelleyebilirsin.
CSRF kullanımı için de login yaptırdığın kodların varsa gönderirsin ona göre örnek oluştururum. Anlamış olursun.
<?php
if($_POST)
{
$name =$_POST["kullanici_adi"];
$pass =$_POST["kullanici_sifre"];
$query = $db->query("SELECT * FROM adminler WHERE kullanici_adi='$name' && kullanici_sifre='$pass'",PDO::FETCH_ASSOC);
if ( $say = $query -> rowCount() ){
if( $say > 0 ){
session_start();
$_SESSION['oturum']=true;
$_SESSION['name']=$name;
$_SESSION['pass']=$pass;
header("Location:Yonetim-Paneli.php");
}else{
echo "oturum açılmadı hata";
}
}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>";
echo "<hr>";
}
}
else{}
?>
<form method="POST">
<div class="form-group">
<input type="text" class="form-control" name="kullanici_adi" placeholder="Kullanıcı Adınız" />
</div>
<div class="form-group">
<input type="password" class="form-control" name="kullanici_sifre" placeholder="Şifreniz" />
</div>
<div class="login-btn">
<button class="btn btn-primary">Giriş Yap</button>
<!--<span> Şifreni mi Unuttun?</span>
</div>-->
</form>
<?php
session_start();
session_destroy();
session_unset();
unset($_SESSION['oturum']);
header("Location:index.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. } } ?>
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
<?php
session_start();
if (!empty($_SESSION['oturum'])) { // empty = boşsa / !empty = boş değilse / isset = varsa / !isset = yoksa. Başına ünlem geliyorsa o durumun tersini yansıtır.
header("Location:Yonetim-Paneli.php"); // eğer oturum boş değilse panele yönlendirdik.
} ?>
<form action="islem.php" method="POST">
<div class="form-group">
<input type="text" class="form-control" name="kullanici_adi" placeholder="Kullanıcı Adınız" />
</div>
<div class="form-group">
<input type="password" class="form-control" name="kullanici_sifre" placeholder="Şifreniz" />
</div>
<div class="login-btn">
<input type="submit" class="btn btn-primary" value="Giriş Yap">
<!--<span> Şifreni mi Unuttun?</span></div>-->
</form>
<?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.
}
}
?>
Şöyle bir değişiklik yapalım tam olarak düzgün çalışsın o zaman:
Giriş formuyla kontrol sayfasını ayıralım.
giris.php:
PHP:<?php session_start(); if (!empty($_SESSION['oturum'])) { // empty = boşsa / !empty = boş değilse / isset = varsa / !isset = yoksa. Başına ünlem geliyorsa o durumun tersini yansıtır. header("Location:Yonetim-Paneli.php"); // eğer oturum boş değilse panele yönlendirdik. } ?> <form action="islem.php" method="POST"> <div class="form-group"> <input type="text" class="form-control" name="kullanici_adi" placeholder="Kullanıcı Adınız" /> </div> <div class="form-group"> <input type="password" class="form-control" name="kullanici_sifre" placeholder="Şifreniz" /> </div> <div class="login-btn"> <input type="submit" class="btn btn-primary" value="Giriş Yap"> <!--<span> Şifreni mi Unuttun?</span></div>--> </form>
islem.php:
PHP:<?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.
Test edip haber verirsin. Kolay gelsin.