1.在php開啟魔術引號的設定
會自動把傳入參數值做必要的字元替換處理
2.或是自行在組合SQL字串前
自行把變數中的單引號
取代成連續兩個單引號
以符合SQL的字串規範
如果你使用的php版本大於5.2,那會有一些好用的東西,可以用來過濾、驗證使用者輸入的資料:
http://www.php.net/manual/en/book.filter.php
另外,我google到一些使用範例:
http://net.tutsplus.com/tutorials/php/sanitize-and-validate-data-with-php-filters/
要顧好網站安全,最初在制定規則的時候就要留心。例如:帳號密碼長度範圍,允許字元等,這樣就可以擋掉一些東西(例如你舉的問題)。
如果是比較舊的版本,還是有一些東西可以用:
另外,利用例如PDO這一類的資料庫抽象層,或是進一步使用ORM(ex. doctrine, propel etc.),都有"prepared statement"功能,利用bind parament動作傳入查詢參數的方式,除了可以重複使用prepared statement,他在內部也會做escape以預防SQL Injection。
總之,一切使用者輸入的資料都要小心,不可信任。(不論是post, get, cookie)即使是css也可以插入javascript,link也可以插入"javascript:"執行程式再跳轉,甚至可以利用動態轉型的規則寫出...看起來像亂碼但是實際可執行的javascript。沒有一個地方是安全的。在瀏覽器端做驗證也並不可靠,充其量只是提供便利。所以,能在伺服器程式端擋掉的東西,就盡量擋掉。