這裏顯示兩個版本的差異處。
下次修改 | 前次修改 | ||
webdesign:head_rush_ajax_5 [2007/03/04 01:15] wenpei 建立 |
webdesign:head_rush_ajax_5 [2007/03/04 14:04] (目前版本) wenpei |
||
---|---|---|---|
行 106: | 行 106: | ||
Content-Length: 121 | Content-Length: 121 | ||
</code> | </code> | ||
+ | |||
+ | ==== SQL injection ==== | ||
+ | 在表單中輸入 | ||
+ | ' || 'a'='a' | ||
+ | 造成 | ||
+ | SELECT * FROM hraj_breakneck WHERE phone=' 「' || 'a'='a」 ' | ||
+ | SELECT * FROM hraj_breakneck WHERE phone='' || 'a'='a' | ||
+ | SELECT * FROM hraj_breakneck WHERE phone='' OR 'a'='a' | ||
+ | 其中「phone=''」永遠為 false,但「'a'='a'」永遠為 true | ||
+ | |||
+ | === 使用 JavaScript 檢查 === | ||
+ | 檢查是否有不應該出現的字元經過表單進入 SQL 查詢式中。 | ||
+ | |||
+ | 但惡意使用者可以透過自行建立的網頁傳送 POST 進 PHP,完全不會經過 JavaScript 檢查。 | ||
+ | |||
+ | === 強化 PHP === | ||
+ | http://tw.php.net/manual/tw/function.mysql-real-escape-string.php | ||
+ | |||
+ | mysql_real_escape_string -- Escapes special characters in a string for use in a SQL statement | ||
+ | $phone = mysql_real_escape_string($phone); | ||
+ | |||
+ | 若確定查詢的資料永遠只需要輸出一筆,則使用 | ||
+ | $row = mysql_fetch_array($queryResult); | ||
+ | 取代 | ||
+ | while ($row = mysql_fetch_array($queryResult)) { ... } |