私はこの問題を解決するためにまだ見つけていません。たとえば、私は現在、jQueryを使用して、Ajaxを介して私が書いたPHPスクリプトにデータを投稿しています。 Ajaxリクエストによって送信されたデータにmysql_real_escape_string()
を使用すると、ユーザー名は完全に削除され、MD5ではパスワードが再ハッシュされます。私の完全なコードは以下の通りです。私はmysql_real_escape_string()
の問題であると信じています。両方の入力から関数を削除すると、フォームはシームレスに動作するからです。どんな解決策の前に誰かがこの問題に遭遇しましたか?ありがとう!jQuery AjaxとPHPのサニタイズ
EDIT:
<?php
function dbConnect() {
$db = new mysqli("", "", "", "");
return $db;
}
$username = mysql_real_escape_string($_POST["username"]);
$sanPass = mysql_real_escape_string($_POST["password"]);
$password = md5($sanPass);
$db = dbConnect();
$query = "SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password';";
$res = $db->query($query);
$num = mysqli_num_rows($res);
if ($num == 0) {
echo "incorrect u=" . $username . " p=" . $password;
} else {
$row = $res->fetch_assoc();
$uuid = uniqid(rand(0, 10000));
setcookie("jBootUsername", $username);
setcookie("jBootUUID", $uuid);
setcookie("jBootIP", $_SERVER["REMOTE_ADDR"]);
$ip = $_SERVER["REMOTE_ADDR"];
$query = "INSERT INTO `sessions` (username, cookie, ip) VALUES ('$username', '$uuid', '$ip');";
$db->query($query);
echo "success";
}
?>
login.js:また、データは両方のフィールドのためのスクリプトに渡されている、私はecho print_r($_POST, true);
login.phpでこれを確認しました
$(document).ready(function() {
var $body = $('body'),
$content = $('#content'),
$form = $content.find('#loginform');
//IE doen't like that fadein
if(!$.browser.msie) $body.fadeTo(0,0.0).delay(500).fadeTo(1000, 1);
$("input").uniform();
$form.wl_Form({
status:false,
onBeforeSubmit: function(data){
$form.wl_Form('set','sent',false);
if(data.username || data.password){
$.ajax({
type: "POST",
url: 'functions/login.php',
data: 'username=' + data.username + '&password=' + data.password + '',
success: function(data) {
if (data == "success") {
document.location="home.php";
} else {
alert(data);
$.wl_Alert("Login invalid, please try again.",'info','#content');
}
}
});
}else{
$.wl_Alert('Please provide both a username and password to login.','info','#content');
}
return false;
}
});
});
私は、あなたのソリューションの両方を試してみた 'mysqli_real_escape_stringは()'も単なるテキストデータが含まれている全ユーザ名の入力を削除します。それはまた前と同じようにパスワードを再ハッシュします...何が間違っているのか分かりません。 –
@scjosh更新私の答え –
ありがとう、ダミアン。仕事は完璧です。 :) –