Sitem icin bir tane index.html hazırladım ındex'im de giriş yap yeri var eğer benim belirledigim şifreyi doğru girerse login.php ye aktaracak buraya kadar hepsi. Tamam sorun olan şey şu şifre yazmadan da giriş butonuna tikladigi zaman otomatik olarak gene login.php ye aktarıyor.
Kod:
Bu sayede tarayıcı gerekli olan bu verileri girmeden formu submitlemeyecektir. Tabii bu çok kolay aşılabilecek bir yöntem, o yüzden asıl korumayı login.php'de yapmanız gerekir. Örneğin login.php'de bu veriler girilmediyse hata vermeniz ve işleme devam etmemeniz gerekir.
Login.php'de şu tarz bir kontrol yapılabilir:
PHP:
<?php
if ( $_POST )
{
$username = trim($_POST["username"]);
$passwd = trim($_POST["passwd"]);
$errors = array();
if ( !$username )
{
$errors[] = "Kullanıcı adı boş bırakılamaz!";
}
if ( !$passwd )
{
$errors[] = "Şifre boş bırakılamaz!";
}
if ( count($errors) == 0 )
{
// Hatamız yok.
// İsleme devam edebiliriz.
}else{
// Hata var.
// Kullanıcıya hatayı yansıtın.
}
}else{
die("Direct initializition is not allowed!");
}
Alınan verilerin doğru güvenlik filtrelerinden geçtiğinden emin olun, örnekte trim dışında herhangi bir filtreleme kullanmadım ben. Söz konusu sitenizin güvenliği olduğunda client-side tarafı kodlara hiçbir zaman güvenmeyin. Çünkü kötü niyetli kullanıcı bunları çok kolay şekilde değiştirebilir veya manipüle edebilir. Bu yüzden her ama her zaman PHP tarafında kontrol yapmanız gerekir.
Bu sayede tarayıcı gerekli olan bu verileri girmeden formu submitlemeyecektir. Tabii bu çok kolay aşılabilecek bir yöntem, o yüzden asıl korumayı login.php'de yapmanız gerekir. Örneğin login.php'de bu veriler girilmediyse hata vermeniz ve işleme devam etmemeniz gerekir.
Login.php'de şu tarz bir kontrol yapılabilir:
PHP:
<?php
if ( $_POST )
{
$username = trim($_POST["username"]);
$passwd = trim($_POST["passwd"]);
$errors = array();
if ( !$username )
{
$errors[] = "Kullanıcı adı boş bırakılamaz!";
}
if ( !$passwd )
{
$errors[] = "Şifre boş bırakılamaz!";
}
if ( count($errors) == 0 )
{
// Hatamız yok.
// İsleme devam edebiliriz.
}else{
// Hata var.
// Kullanıcıya hatayı yansıtın.
}
}else{
die("Direct initializition is not allowed!");
}
Alınan verilerin doğru güvenlik filtrelerinden geçtiğinden emin olun, örnekte trim dışında herhangi bir filtreleme kullanmadım ben. Söz konusu sitenizin güvenliği olduğunda client-side tarafı kodlara hiçbir zaman güvenmeyin. Çünkü kötü niyetli kullanıcı bunları çok kolay şekilde değiştirebilir veya manipüle edebilir. Bu yüzden her ama her zaman PHP tarafında kontrol yapmanız gerekir.
Baya bir edit yapıldı derken, boş mu kontrolü yapılmadı o zaman. Yoksa boş girdiğinde hata verdirirdiniz diye düşünüyorum.
HTML kısmında arkadaşın bahsettiği gibi required ile çözebilirsiniz.
PHP kısmında da login.php'de ekstradan boş olup olmadığını kontrol ederseniz geri yönlendirip hatayı bastırabilirsiniz.