2011-12-16 21 views
0

我已經做了所有的驗證,並顯示一條錯誤或確認消息。現在最後要說的是,我想從數據庫中檢查用戶名的可用性,所以我需要查詢我的服務器。如何使Ajax請求只有用戶名是免費的,

var b = $("#input_username_holder").val(); 
if (b != "Username" && b != "" && b.length > 6 && b.length < 17) { 
    $.ajax({ 
     type: "POST", 
     url: "check_username.php", 
     data: "b=" + b, 
    }).done(function(msg) { 
     $("#username_result").html(msg); 
    }); 
} 

現在,此代碼很適合顯示發生的任何錯誤。我想打一個Ajax請求,但請求只能進行用戶名是否可用:

if (fullname valid) { 
    if (username is available) { 
     $.ajax({ 
      type: "POST", 
      url: "register.php", 
      data: "a=" + a + "&b=" + b + "&c=" + c + "&d=" + d, 
     }).done(function(msg) { 
      $("#register_box").html(msg); 
     }); 
    } 
} 

我總是意識到威脅,用JS該驗證可畸形並且可能執行SQL注入整個數據庫,所以我總是盡我所能保護我的網站免受任何黑客攻擊。我做這樣的事情

$user_email = filter_input(INPUT_POST, 'usr_email', FILTER_SANITIZE_STRING); 

,此外...我通過這個函數傳遞值..

function filter($data) { 
    $data = trim(htmlentities(strip_tags($data))); 

    if (get_magic_quotes_gpc()) 
     $data = stripslashes($data); 

    $data = mysql_real_escape_string($data); 

    return $data; 
} 

這是足夠足夠,或者你最能表明我的東西的安全...

+3

你**從不**只用JavaScript進行驗證。永遠。我根本不需要訪問你的頁面來發送你的PHP文件一個'POST'請求,這個請求可能是畸形的,並且可能在你的整個數據庫上執行SQL注入。 – Blender 2011-12-16 17:18:41

回答

1

我建議做這樣的事情:

$.ajax({ 
    type: "POST", 
    url: "register.php", 
    data: {'a': a, 
     'b': b, 
     'c': c, 
     'd': d} 
}).done(function(msg) { 
    if (msg == 'invalid') { 
    $("#register_box").html('Username is invalid'); 
    } else if (msg == 'taken') { 
    $("#register_box").html('Username has been taken'); 
    } else { 
    $("#register_box").html('Success'); 
    } 
}); 

register.php手柄你的用戶名檢查等。如果出現錯誤,只需返回錯誤消息而不是成功消息。

但你絕對需要做服務器端驗證。如果你不這樣做,你會付出代價的。