[討論] 防止 SQL injection 方式

看板PHP作者 (小惡魔)時間17年前 (2008/06/26 16:30), 編輯推噓12(12020)
留言32則, 11人參與, 最新討論串1/1

06/24 17:32,
sql字串第一行多了where
06/24 17:32

06/25 10:24,
同樓上,把sql echo 出來 丟到MYSQL 執行 就知道哪
06/25 10:24

06/25 11:47,
從一開始就要習慣, $_POST、$_GET 不要直接拿來用.
06/25 11:47

06/25 16:05,
樓上這句話很重要(SQL injection可是很恐怖的!)
06/25 16:05

06/25 19:15,
謝謝大大指教,問題已解
06/25 19:15

06/25 22:47,
希望你還有注意到 $_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

06/26 18:11, , 1F
推:)
06/26 18:11, 1F

06/26 19:19, , 2F
最佳辦法 直接打開 magic_quotes_gpc
06/26 19:19, 2F

06/26 20:34, , 3F
Prepared Statements 的方式, 如下:
06/26 20:34, 3F


06/26 21:43, , 5F
打開 magic_quotes_gpc 絕對是一個最爛方法
06/26 21:43, 5F

06/26 21:45, , 6F
寫PHP的我想沒多少人喜歡用這個
06/26 21:45, 6F

06/26 23:22, , 7F
上面的程式不就是做打開magic_quotes_gpc的事嗎?
06/26 23:22, 7F

06/26 23:23, , 8F
上面應該是要避免有人沒開,沒開的話就用自己寫的來做
06/26 23:23, 8F

06/27 00:38, , 9F
不建議這樣使用,還是乖乖自己寫function 篩選吧
06/27 00:38, 9F

06/27 01:26, , 10F
mysql_escape_string <- 這個呢?雖然只限MySQL使用
06/27 01:26, 10F

06/27 02:32, , 11F
最佳辦法是貼紙條在螢幕上「不直接用$_POST、$_GET」
06/27 02:32, 11F

06/27 02:33, , 12F
剛開始起步, 就得養成注意這些事情的習慣..
06/27 02:33, 12F

06/27 12:25, , 13F
if(!get_magic_quotes_gpc())←就是檢查不存在的話
06/27 12:25, 13F

06/27 12:26, , 14F
才做自訂的方法,這樣做很ok呀,沒什麼問題
06/27 12:26, 14F

06/27 13:28, , 15F
請務必要用關閉 magic_quotes_gpc 的方法...
06/27 13:28, 15F

06/27 13:29, , 16F
06/27 13:29, 16F

06/27 19:55, , 17F
原PO的方法在設計上要避免雙反斜\\的結果
06/27 19:55, 17F

06/27 19:57, , 18F
一般在資料庫存取前再處理即可防sql injection
06/27 19:57, 18F

06/27 19:57, , 19F
顧名思義嘛:p
06/27 19:57, 19F

06/27 21:31, , 20F
五樓不想打開也沒關係啊 請加原po這一段 完全跟打開
06/27 21:31, 20F

06/27 21:31, , 21F
magic_quotes_gpc 做一樣的事 這才叫最爛的方法吧?
06/27 21:31, 21F

06/27 21:33, , 22F
還有請不要把自己的不喜歡 推到別人也不喜歡...
06/27 21:33, 22F

06/27 21:53, , 23F
kylekai 的連結我看了
06/27 21:53, 23F

06/27 21:59, , 24F
http://0rz.tw/1b4lH 以後magic_quotes會被移除
06/27 21:59, 24F

06/27 22:00, , 25F
到那時會有更好的方法?
06/27 22:00, 25F

06/27 22:07, , 26F
我再找些相關資料... PHP6 確定沒有magic_quotes
06/27 22:07, 26F

06/27 22:08, , 27F
而被移除的理由是 效能.. 因為不是輸入都存到DB
06/27 22:08, 27F

06/27 22:09, , 28F
理由 來自官網 http://0rz.tw/b34lg
06/27 22:09, 28F

06/27 22:15, , 29F
而日後防止SQL injection 的方法 自己加addslashes
06/27 22:15, 29F

06/27 22:15, , 30F
原po指的加在每一頁 跟開magic_quote 沒兩樣...
06/27 22:15, 30F

06/27 22:16, , 31F
改成 放在要存到 DB 的處理頁面即可
06/27 22:16, 31F

06/27 22:17, , 32F
有輸入欄位 又不存入db 還滿少的 除了文字記錄 :p
06/27 22:17, 32F
文章代碼(AID): #18OrEhoR (PHP)
文章代碼(AID): #18OrEhoR (PHP)