看板 PHP 關於我們 聯絡資訊
wayway2004 :sql字串第一行多了where 06/24 17:32
arrack :同樓上,把sql echo 出來 丟到MYSQL 執行 就知道哪 06/25 10:24
KC73 :從一開始就要習慣, $_POST、$_GET 不要直接拿來用. 06/25 11:47
ybite :樓上這句話很重要(SQL injection可是很恐怖的!) 06/25 16:05
leoangela :謝謝大大指教,問題已解 06/25 19:15
KC73 :希望你還有注意到 $_POST 和 $_GET 的問題. 06/25 22:47
針對回文的 SQL injection 方式討論 我想這是現在網站最缺乏的東西了~ 網站安全已經是現在蠻熱門的議題 我自己解決方法,就是 include 一段程式碼在每一個 php 頁面 這個作法我覺得相當不錯,這是從 phpBB 的程式碼節錄的~ XD 我抄襲了 哈哈 code 如下: if( !get_magic_quotes_gpc() ) { if( is_array($_GET) ) { while( list($k, $v) = each($_GET) ) { if( is_array($_GET[$k]) ) { while( list($k2, $v2) = each($_GET[$k]) ) { $_GET[$k][$k2] = addslashes($v2); } @reset($_GET[$k]); } else { $_GET[$k] = addslashes($v); } } @reset($_GET); } if( is_array($_POST) ) { while( list($k, $v) = each($_POST) ) { if( is_array($_POST[$k]) ) { while( list($k2, $v2) = each($_POST[$k]) ) { $_POST[$k][$k2] = addslashes($v2); } @reset($_POST[$k]); } else { $_POST[$k] = addslashes($v); } } @reset($_POST); } if( is_array($_COOKIE) ) { while( list($k, $v) = each($_COOKIE) ) { if( is_array($_COOKIE[$k]) ) { while( list($k2, $v2) = each($_COOKIE[$k]) ) { $_COOKIE[$k][$k2] = addslashes($v2); } @reset($_COOKIE[$k]); } else { $_COOKIE[$k] = addslashes($v); } } @reset($_COOKIE); } } 大家可以自己收下吧 ~ XD 這是我解決方式~ 大家討論看看還有無其他方法 文章同步於我的 blog:http://blog.wu-boy.com/2008/06/26/285/ -- 感動了千萬人的漫畫 http://0rz.tw/b84cp 父母寫給兒女的一封信 http://0rz.tw/354h7 爆笑msn圖片 http://0rz.tw/ff4dS 你家的狗可以這樣嗎? http://0rz.tw/f449H 超完美便當 http://0rz.tw/4f4j8 吊不完的車 http://0rz.tw/d34gf -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.107.20
mosquito520 :推:) 06/26 18:11
ileadu :最佳辦法 直接打開 magic_quotes_gpc 06/26 19:19
skywalking :Prepared Statements 的方式, 如下: 06/26 20:34
skywalking :http://devzone.zend.com/node/view/id/686 06/26 20:34
chph :打開 magic_quotes_gpc 絕對是一個最爛方法 06/26 21:43
chph :寫PHP的我想沒多少人喜歡用這個 06/26 21:45
mizuiro :上面的程式不就是做打開magic_quotes_gpc的事嗎? 06/26 23:22
mizuiro :上面應該是要避免有人沒開,沒開的話就用自己寫的來做 06/26 23:23
arrack :不建議這樣使用,還是乖乖自己寫function 篩選吧 06/27 00:38
GALINE :mysql_escape_string <- 這個呢?雖然只限MySQL使用 06/27 01:26
KC73 :最佳辦法是貼紙條在螢幕上「不直接用$_POST、$_GET」 06/27 02:32
KC73 :剛開始起步, 就得養成注意這些事情的習慣.. 06/27 02:33
liaosankai :if(!get_magic_quotes_gpc())←就是檢查不存在的話 06/27 12:25
liaosankai :才做自訂的方法,這樣做很ok呀,沒什麼問題 06/27 12:26
kylekai :請務必要用關閉 magic_quotes_gpc 的方法... 06/27 13:28
kylekai :請看 http://tinyurl.com/3vc22a 06/27 13:29
JeffMcBride :原PO的方法在設計上要避免雙反斜\\的結果 06/27 19:55
JeffMcBride :一般在資料庫存取前再處理即可防sql injection 06/27 19:57
JeffMcBride :顧名思義嘛:p 06/27 19:57
ileadu :五樓不想打開也沒關係啊 請加原po這一段 完全跟打開 06/27 21:31
ileadu :magic_quotes_gpc 做一樣的事 這才叫最爛的方法吧? 06/27 21:31
ileadu :還有請不要把自己的不喜歡 推到別人也不喜歡... 06/27 21:33
ileadu :kylekai 的連結我看了 06/27 21:53
ileadu :http://0rz.tw/1b4lH 以後magic_quotes會被移除 06/27 21:59
ileadu :到那時會有更好的方法? 06/27 22:00
ileadu :我再找些相關資料... PHP6 確定沒有magic_quotes 06/27 22:07
ileadu :而被移除的理由是 效能.. 因為不是輸入都存到DB 06/27 22:08
ileadu :理由 來自官網 http://0rz.tw/b34lg 06/27 22:09
ileadu :而日後防止SQL injection 的方法 自己加addslashes 06/27 22:15
ileadu :原po指的加在每一頁 跟開magic_quote 沒兩樣... 06/27 22:15
ileadu :改成 放在要存到 DB 的處理頁面即可 06/27 22:16
ileadu :有輸入欄位 又不存入db 還滿少的 除了文字記錄 :p 06/27 22:17