2010-08-06 66 views
0

所以我想知道如果我這是好的,或者如果theres另一個更好和安全的解決方案,從數據庫中獲取信息。php:從數據庫中抓取用戶信息,這段代碼是否安全?

if (isset($_SESSION['user_id'])) { 
$string = mysql_query("SELECT * FROM users WHERE id = '$_SESSION[user_id]'"); 
$v = mysql_fetch_array($string); 
} 

因爲我想也許它可能破解了「會話」,改變USER_ID到另一個,他們可以訪問任何用戶woops ...

謝謝

回答

4

這取決於user_id如何首先進入會話。作爲一個經驗法則,你不應該把任何unsanitized值放入查詢中。
您至少應該使用mysql_real_escape_string。 更好的是不使用the old and outdated mysql擴展名,但mysqli's prepared statements

+0

user_id在登錄時進入會話: $ _SESSION ['user_id'] = $ id;我忘記了轉義字符串,我是否應該對會話線做任何事情? – Karem 2010-08-06 15:38:27

+0

@Karem是的。上面的經驗法則確實適用於任何外部輸入。即使您認爲這可能是保存:清理所有用戶輸入。 – Gordon 2010-08-06 15:40:01

+0

消毒是什麼意思,請你解釋一下謝謝。 – Karem 2010-08-06 15:42:24

2

我建議逃脫user_id,只是爲了確保。您還應測試是否找到任何行(可選,取決於使用情況)。

0

來自用戶的每個數據都應該過濾,並且從不直接用於查詢;這將避免SQL注入。

假設$_SESSION['user_id']的內容是' OR id = '12' //;該查詢將變成SELECT * FROM users WHERE id = '' OR id = '12' //'。假設ID爲12的用戶帳戶具有允許用戶從網站中刪除內容的特定權限,您可以想象其後果。