2012-05-02 54 views
0

我下面的教程,Creating a Secure Login System the Right Way,有關如何創建一個登錄系統。在代碼中,他們對用戶名字段使用mysql_real_escape_string將它傳遞給數據庫的查詢,即前,在MySQL中選擇時是否需要使用我的'sql_real_escape_string'?

$username = mysql_real_escape_string($username); 

這是必要的,因爲我不添加任何東西到數據庫中,我只是檢查,如果該用戶已經存在?

的原因,我不只是把它留在反正就是當我使用上面的代碼,它使得我的文字空白,所以發送一個空字符串到數據庫中。我不知道這是爲什麼,所以我想,如果我可以放棄它,我會的。

下面是有關數據庫連接的建議是開放從評論者(密碼等被改變):

function dbConnect(){ 
    $connection = mysql_connect('localhost', 'username', 'password'); 
    $database=mysql_select_db('database', $connection); 

    return $connection; 
} 

$username = $_POST['username']; 
$password = $_POST['password']; 
$password = md5($password); 

$username = mysql_real_escape_string($username); 

$query = mysql_query("SELECT * 
     FROM members 
     WHERE username = '$username' 
     AND password = '$password'",dbConnect()); 
+1

查詢可以取消或標記爲註釋的,另一種可能是由於該附加。嵌套查詢(子查詢)也可能起作用,所以通過來自外部源的sql傳遞的每個數據都應該被驗證和/或消毒。 – Hajo

+0

好的謝謝。請你回答第二部分,爲什麼會讓我的字符串變空? – Nicola

+2

'mysql_real_escape_string()'只會在$ username爲空時纔會返回空白。問題在於別處。 –

回答

0

是的,這是必要的,因爲username可能包含SQL不允許特殊字符需要轉義像'/例如

實施例:

在用戶名不逸出'McDonald's WOU ld導致非法SQL語句:

select * from your_table where username = 'McDonald's' 
1

您可能想要使用PDO with prepared statements。已準備好的語句就像SQL查詢中的佔位符,稍後您將發送將被插入這些位置的數據。這使得轉義字符串過時。

正如我在上面的評論已經提到:用戶輸入每一個SQL查詢很容易受到攻擊SQL injection

1

正確的代碼是:

dbConnect(); 
$username = mysql_real_escape_string($_POST['username']); 
$password = md5($_POST['password']); 

$sql = "SELECT * FROM members WHERE username = '$username' AND password = '$password'"; 
$res = mysql_query($sql) or trigger_error(mysql_error().$sql); 
+0

多數民衆贊成在此非常感謝你,它現在的作品。我是不知道的連接位,我認爲的mysql_query函數必須包括數據庫連接 – Nicola

+0

@Nicola它可以使用一個明確的連接了。您可以使用*變量*來存儲連接,並將其與mysql_connect()一起使用。否則拉斯打開連接將被用於 –

+0

的權利,我想我需要做一些連接和不同的方式來連接閱讀 – Nicola

相關問題