Обновление MySQL с использованием переменных SESSION через функцию jquery javascript - PullRequest
0 голосов
/ 13 марта 2009

В настоящее время у меня есть файл JavaScript "Score.js", который использует jQuery.js, который вызывается правильно по ссылке. Код в файле Score.js:

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

Эта функция вызывает updateScore.php:

<?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);

?>

Однако база данных обновляется неправильно. Если я заменю строку:

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

с:

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

Где 123pf - это значение, которое переменная SESSION содержит в файле php, вызывающем корректно обновляемый javascript. Почему использование переменной сеанса не работает? Я неправильно называю это в запросе?

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 13 марта 2009

Вы звоните session_start где-нибудь внутри updateScore.php?

Если вы еще не начали сеанс, я не верю, что переменные сеанса будут доступны.

1 голос
/ 13 марта 2009

также, у вас есть полный контроль над $ _SESSION ['logname']? Если нет, кто-то может легко изменить свое имя журнала, чтобы ввести SQL и повредить / скомпрометировать вашу базу данных. Например, если бы они могли установить свой логин таким образом, вы могли бы потерять свою пользовательскую таблицу:

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

Вы открываете себя мошенникам, играя таким образом. В этом сценарии любой пользователь может в любое время посетить updateScore.php, чтобы увеличить свою статистику, поскольку этот сценарий не проверяет ни свой ответ, ни проверку на токен, который JS создает, чтобы сказать, что оценка в порядке. Это плохая идея - сохранять такую ​​логику на внешнем интерфейсе (javascript), не проверяя ее на внутреннем интерфейсе (PHP); javascript и AJAX - очень полезные ярлыки, которые могут улучшить взаимодействие с пользователем, но им нельзя доверять в качестве единственных проверок достоверности.

0 голосов
/ 13 марта 2009

Возможно, это просто ошибка транскрипции, но код, который вы указали в своем вопросе, использует $ _SESSION [logname], это должно быть $ _SESSION ['logname'].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...