Хорошо, у меня есть PHP код:Ajax обеспечивая другой результат, чем PHP ServerSide делает
$_you = $_GET['you'];
$_answer = $_GET['answer'];
$_pass = md5($_GET['pass']);
$sql = "select password from users where username='$_you'";
$query = mysqli_query($db_conx, $sql);
while ($row = mysqli_fetch_array($query)) {
$_oldpass = $row['password'];
}
if ($_pass !== $_oldpass) {
$_passresult = "not ok";
} else {
$_passresult = "ok";
}
$sql2 = "select answer from useroptions where username='$_you'";
$query2 = mysqli_query($db_conx, $sql2);
while ($row2 = mysqli_fetch_array($query2)) {
$_veranswer = $row2['answer'];
}
if ($_answer !== $_veranswer) {
$_answerresult = "not ok";
} else {
$_answerresult = "ok";
}
$_result = array("Password" =>$_passresult, "Answer" =>$_answerresult);
header("Content-Type: application/json");
echo json_encode($_result);
?>
И этот кусок (фрагмент) из JQuery, который вызывает выше PHP:
$.get("verifydp.php?u="+you+"&pass="+pass+"&answer="+answer, function(result) {
if (result.Password === "not ok") {
$('#requiredp').html('<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> Password is not correct');
$('#cpassword').css("border", "solid 1px #f60");
$('#cpassword').focus();
$('#cpassword').val('');
return false;
} else {
$('#requiredp').html('');
$('#cpassword').css("border", "solid 1px #ccc");
}
if (result.Answer === "not ok") {
$('#requireda').html('<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> This is not the correct answer.');
$('#answer').css("border", "solid 1px #f60");
$('#answer').focus();
$('#answer').val('');
return false;
} else {
$('#requireda').html('');
$('#answer').css("border", "solid 1px #ccc");
}
});
Как вы можете догадались, это небольшая проверка пароля, которую я сделал, это еще не сделано, поэтому не упоминайте о том, что она еще не безопасна на 100 процентов. Просто хотел попросить вашу помощь в следующей замечательной проблеме, которую я получаю при взаимодействии между этими двумя частями кода:
Это проверяет правильные или неправильные пароли и ответы, однако, когда я ввожу правильный пароль, он ударяет меня назад говоря, что пароль неверен. Самое смешное, однако, что когда я запускаю часть php самостоятельно, с теми же данными, это говорит мне, что пароль правильный. Таким образом, php передает «OK» в Ajax, и Ajax каким-то образом превращает его в «НЕ ОК», что затем приводит к следующему хаосу в остальных действиях скрипта. Кто-нибудь понял, почему это происходит? Любая помощь очень ценится, поскольку она делает мою голову в: -/ Если вам нужна дополнительная информация, просто дайте мне знать.
Спасибо, миллион!
Спасибо за ваш комментарий - однако, даже если часть ответа неисправна, она все равно будет обрабатывать раздел пароля, а затем просто перестать приходить к ответу? Или вообще остановить? Изменить: php дает правильные ответы - например: если я запускаю его непосредственно, он говорит {Пароль: ok, Answer: ok}, но я предупредил об ответе Ajax, и предупреждение сообщает «Не в порядке» по паролю. –
[Little Bobby] (http://bobby-tables.com/) говорит, что [ваш скрипт подвержен риску инъекций SQL.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent -SQL-инъекция-в-РНР). Даже [избегая строки] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) небезопасно! –
Вы действительно не должны использовать [хэши паролей MD5] (http://security.stackexchange.com/questions/19906/is-md5-considered-insecure), и вам действительно нужно использовать встроенные функции PHP (http: //jayblanchard.net/proper_password_hashing_with_PHP.html) для защиты паролей. Убедитесь, что вы [не избегаете паролей] (http://stackoverflow.com/q/36628418/1011527) или используйте какой-либо другой механизм очистки для них перед хэшированием. Выполнение этого * изменяет * пароль и вызывает ненужное дополнительное кодирование. –