Güvenlik - SQL

6 Cevap php

Hey, aşağıda bir oturum açma komut işleyen bir sayfa olduğunu ve bunu herhangi bir güvenlik delik koyduk merak ediyorum. Ben enjeksiyonlar ve diğerlerinden korumaya makaleleri okuma ve benim kod güvenli olduğundan emin olmak istedim edilmiştir.

Bu ajax sunulan ve doğru ya da değil varlık giriş dayalı JSON döndürür.

<?php
ob_start();
session_start();
include ("config.inc.php");
include ("jsonEncode.php");

// ausername and apassword sent from form
$ausername = '';
$apassword = '';
$ausername = mysql_real_escape_string(stripslashes($_GET['username']));
$apassword = mysql_real_escape_string(stripslashes($_GET['password']));

$sql    = "SELECT * FROM admin WHERE ausername='$ausername' AND apassword='$apassword' LIMIT 1";
$result = mysql_query($sql) or die(mysql_error());

$data   = mysql_fetch_array($result);
$count  = mysql_num_rows($result);

if($count==1){
    $_SESSION['ausername'] = $ausername;
    $_SESSION['apassword'] = $apassword;
    $_SESSION['admin_id']  = $data['a_id'];
    $a_id = $data['a_id'];
    $_SESSION['LastLogin'] = $data['last_login'];
    $query = "UPDATE admin SET last_login = Now() WHERE `a_id`= $a_id";
    mysql_query($query);
    //echo $query;
    $_SESSION['aloggedin'] = "1234";
    // valid
    $var = array('avalid' => 1, 'ausername' => $ausername, 'apassword' => $apassword);
    print php_json_encode($var);
}else{
    // invalid
    $var = array('avalid' => 0, 'ausername' => $ausername, 'apassword' => $apassword);
    print php_json_encode($var);
}
?>

6 Cevap

Aksi takdirde onların parolası URL görünecek ve URL'ler (onlar imi ya da örneğin bir sevk URL olarak başka bir sunucuya, gönderilen alabilirsiniz) çok güvenli değil, daha çok giriş formu ile GET daha POST yöntemini kullanmak isteyebilirsiniz.

Sen bölü şerit gerekmez. Sebebi ne olursa olsun sizin için kullanıcı adı alanında benzersiz bir kısıtlama yoksa, ve / veya saklanan in bölü var - Ayrıca bu sütunlar doldurulur bölü sıyırma sürece, aslında bir güvenlik açığı tanıttı ettik Kullanıcı adı veya şifre alanları ve bunların şifreleri bölü tek fark, bir kullanıcı başka olarak oturum alabilir.

Sen dize birleştirme, sizin SQL içine kullanıcı verilerini koymak bağlı parametreler kullanılarak yapılmalıdır.

Ayrıca, muhtemelen veritabanında şifre sağlamalarının depolama edilmelidir - orjinal metin parolalar.

Son olarak, güvenlik sorunu, ancak ayarı $ ausername ve $ APassword'' derhal onlara yeni değerler vermeden önce değil, tamamen anlamsızdır.

Ayrıca, oturumda şifre saklamak yok. Verilerinizin başkaları tarafından görülebilir böylece php oturum verileri varsayılan OS tmp / temp dizininde saklanır. Normalde, ben sadece oturumda adı tutmak ve gerektiğinde veritabanını sorgulamak gerekir. Bu bir kullanıcının bilgi değiştiğinde sorunları önler, ancak oturum güncellenmiş değil.

(Ben bir MSSQL bod değilim, bu yüzden bu noktaların herhangi MySQL alakasız olup olmadığını bilmiyorum)

Bu durumda sadece genel gözlemler yararlı, güvenlik ile yapmak değil gerçekten:

Eğer geri istiyorum sütunları listesi - - SEÇ * kullanmayın sadece a_id gerek & benziyor last_login. Sen vb gelecek, ya da kişisel notlar kendi fotoğraf ile bu tablodaki bir Blob ekleyebilirsiniz - Eğer geçmişte SELECT * yaptım ve resmi gerek yoktu tüm yerlerde performans öldürecek.

Ben LİMİTİ 1 yapmazdım - oldukça dups bu noktada olup olmadığını bilmek istiyorum, ve bir hata yükseltmek istiyorum.

Ben başka bir tablodaki last_login sütun Kullanıcı / parola tablo ile 01:01 bağlantılı koymak olacaktır. Onun sık sık değişim madde, ve bu biraz sıkça değişen bir "bilgi" sütunu Tepe yapabilecek kadar sahip (o değiştiğinde, yani eski değerleri depolamak) kullanıcı / Şifre tablo üzerinde bir denetim tablo tanıtmak için karar verirseniz.

Şahsen ben sütun adlandırma ve OTURUMU / değişken bir aynı tutmak isterim.

admin_id / a_id, LastLogin / last_login

Daha sonra ihtiyacınız olmadıkça Şahsen oturumda şifre saklamak olmaz. Ben kullanıcının sahip "izinleri" göstermek için bir şey saklamak, ve sonra onlar gibi pageX veya PageY görebilirsiniz eğer karar vermek için bu kullanmak istiyorsunuz

Yukarıdaki tüm iyi cevaplar.

Ben o sözü olmamıştır eklemek istediğim tek bir şey ... Ben hesap şifrenizi alıp yerine sorguda parola koyarak ve satır varsa bakarak daha bir PHP karşılaştırma yapmak eğilimindedir.