看板 PHP 關於我們 聯絡資訊
※ 引述《JYHuang (夏天到了,冷不起來了說)》之銘言: : ※ 引述《foxzgerald (O⊥M)》之銘言: : : 另外. $sql 字串最好先脫序. 特別是這些查詢字串中的一些變數來自於使用者輸入 : : ($_POST 或是 $_GET 之類的) .. 如果不先脫序. 很容易被 sql injection 攻擊 : : 相關資訊請看 mysql-query 的第二個範例.或者 google :) : 請問,所謂的脫序是不是泛指將$sql中的特殊符號(例如 ' ) : 做註記處理 (變成\')。 : 使人無法透過url和表單中的變數去中斷並改變mysql_query($sql)的執行結果? : 透過mysql_escape_string就可以阻絕掉基本的sql injection嗎? 基本上是的。更安全的做法是依照各種變數的屬性制定不同的 filter, 以身分證字號為例:常用的檢測方式便能夠避免 SQL injection。 因此,若使用者輸入的資料天生具備可過濾的特徵,最好先過濾掉, 而 mysql_real_escape_string() 則當作輔助措施。 mysql_real_escape_string() 除了具有阻絕 sql injection的效果外, 由於 binary 檔案(如:圖檔、影片...etc)可能含有脫序字元, 因此直接 insert 進 db 時,小則會發生錯誤、大則引起災難, 此點也必須要注意。 另外要注意的是:PHP.ini 中 magic_quotes_gpc/magic_quotes_sybase 是否開起。 因為這兩個會自動脫序....有時會因為這功能的美意幫了倒忙 http://tw.php.net/manual/en/function.mysql-real-escape-string.php 此點在『Example 1402. A "Best Practice" query』中有詳細範例。 : 另外,我還是看不太懂mysql_escape_string和mysql_real_escape_string的差異 : 是差別在mysql_real_escape_string可以引用參照字嗎? : 謝謝 :) 這兩個應該是一樣的東西,我剛去查 http://tw.php.net/manual/en/function.mysql-escape-string.phpChangeLog 發現: Version Description ----------------------------------------------------------------------- 4.3.0 This function became deprecated, do not use this function. Instead, use mysql_real_escape_string(). mysql_escape_string() 已經不建議使用;建議改用 mysql_real_escape_string() -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.119.199.121 ※ 編輯: foxzgerald 來自: 140.119.199.121 (05/11 00:48)