這裏顯示兩個版本的差異處。
| 下次修改 | 前次修改 | ||
| 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)) { ... } | ||