雖然大家都在說,在查詢中使用它之前逃避你的字符串是絕對必要的,但我認爲還有更多需要關注的東西。
這仍然允許非用戶嘗試不同的電子郵件地址,看看會有什麼結果。
我推薦加密電子郵件,並在URL中使用加密版本的電子郵件。
所以,當你向他們發送的鏈接:
$enc_key = 'SOME KEY I USE';
$email = mysql_real_escape_string($email);
$result = $db->query("SELECT AES_ENCRYPT('$email', '$enc_key') as email");
$enc_email = mysql_fetch_assoc($result);
$enc_email = $enc_email['email'];
$url = "http://www.example.com/confirm.html?key=$enc_email";
然後檢查是否有用戶在確認您:
$enc_key = 'SOME KEY I USE';
$enc_email = mysql_real_escape_string($_GET['key']);
$result = $db->query("UPDATE users SET active = 1 WHERE AES_ENCRYPT(email, '$enc_key') = '$enc_email'");
來源
2011-06-17 17:59:52
ben
打電話給我[Bobby Tables](http://xkcd.com/327/)。或者使用[PDO](http://stackoverflow.com/questions/6379433/mysql-prepared-statements)。 –
另外檢查準備好的聲明:http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html – Phil
潛在的最終破壞。至少使用mysql_real_escape_string。我打算以此作爲答案,但十億人已經說過同樣的話。在將其發送到數據庫之前始終驗證您的輸入。 – stephenbayer