Bir jquery aracılığıyla OTURUM değişkenleri kullanarak MySQL güncelleniyor javascript fonksiyonu

3 Cevap php

Ben şu anda bir link üzerinden doğru şekilde çağrıldığını jquery.js, kullanımı yapan bir javascript dosyası 'score.js' var. Score.js in kodu:

function originalUpdateScore(answer,correct){
if (answer == correct) 
{    
$.post('updateScore.php');  
}
window.location.reload(true);
}

Bu işlev 'updateScore.php' çağırır:

<?php
include("dbstuff.inc");
$con = mysqli_connect($host, $user, $passwd, $dbname)
or die ("Query died: connection");  

$updateScore = "UPDATE `user` SET `tempScore`=`tempScore`+1
	WHERE (user.Username='$_SESSION[logname]')";

mysqli_query($con, $updateScore);

?>

Ancak veritabanı doğru güncellenmektedir değildir. Ben satırı değiştirin eğer:

$updateScore = "UPDATE `user` SET `tempScore`=`tempScore`+1 
               WHERE (user.Username='$_SESSION[logname]')";

ile:

$updateScore = "UPDATE `user` SET `tempScore`=`tempScore`+1 
               WHERE (user.Username='123pf')";

123pf OTURUM değişken doğru günceller javascript çağıran php dosyasında içeren değerdir. Neden oturum değişkeni çalışmadı kullanarak yapar? Ben sorguda yanlış çağırarak muyum?

Şimdiden teşekkürler.

3 Cevap

Ayrıca, $ _SESSION üzerinde complete kontrol ['logname'] var mı? Değilse, birileri kolayca veritabanı uzlaşma / SQL ve hasara enjekte onların LogName değişebilir. Bu olmak için onların LogName ayarlamak mümkün olsaydı Örneğin, sizin kullanıcı tablo kaybedebilirsiniz:

$_SESSION['logname']="'; DROP TABLE user;-- ";

Böyle oynayarak sağa dolandırıcı kadar kendinizi açıyoruz. Bu komut ne JS skor Tamam olduğunu söylemek inşa ettiği bir belirteç için kendi cevap ne çekleri denetler beri bu senaryoya göre, herhangi bir kullanıcı, kendi istatistikleri artırmak için herhangi bir zamanda updateScore.php ziyaret edebilirsiniz. O da arka uç (PHP) üzerinde kontrol etmeden ön-uç (javascript) hakkında mantık bu tür tutmak için kötü bir fikirdir; javascript & AJAX kullanıcı deneyimini geliştirmek çok yararlı kısayollar, ama onlar tek geçerliliği, dama gibi güvenilir olamaz.

Muhtemelen sadece transkripsiyon hatası var, ancak söz göstermiştir kodu [logname] $ _SESSION kullanır, bu $ _SESSION ['logname'] olmalıdır.