Re: [請益] 不知道哪裡錯

看板PHP作者 (霸格尼尼)時間18年前 (2007/03/13 01:03), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/5 (看更多)
※ 引述《yorjing (托兒所嬰兒)》之銘言: : ※ 引述《yorjing (托兒所嬰兒)》之銘言: : : 下面是小弟的程式碼 : : 程式碼有bug : : 小弟我抓不出來 : : http://homelf.kimo.com.tw/yorjing/guest_add_host.php.txt : : 錯誤訊息是 : : 無法執行查詢: UPDATE guestbook SET hcontent=uirirfi, htime=2007-03-12 19:13:36 WHERE reply_id=數字 : : 請問各位大大 : : 這段程式碼哪裡有錯 : : 小弟我抓不出來 : : 煩請各位大大幫小弟我指點迷津 : : 謝謝 : 推 buganini:這樣寫很危險的啊..... 03/12 22:51 : 請問 : 這樣寫的問題在哪邊? : 可以請大大指點一下嗎? 以下節錄自之前寄給Conanspe的信件 要把外部輸入的資料放進SQL時 千萬要注意 1. 要用引號 2. 要用mysql_real_escape_string()處理過 //有些人會用addslases(),但因為mysql_real_escape_string()還會針對不同編碼及資料庫設定做處理,所以建議用它 //並且這個函式要在資料庫連線建立(mysql_connect)之後才能使用 //應該也要在mysql_select_db之後 //因為它會去問MySQL關於編碼那些的設定值 Reasons: 1. 假設沒有引號 $sql='DELETE FROM `table` WHERE id='.$_GET['id']; 然後網址列我打?id=1%20OR1%3D1 %20是空白,%3D是等號 這樣$sql就變成 DELETE FROM `table` WHERE id=1 OR 1=1 於是你的資料就被刪光了 2. $sql='SELECT * FROM `table` WHERE id="'.$_GET['id'].'"'; 這次有用引號 我把id寫成 1"; DELETE FROM `table`; -- $sql就變成 SELECT * FROM `table` WHERE id="1"; DELETE FROM `table`; --" --之後會被當成註解 於是資料又被刪光了 囧 若有用那個函式處裡過 他會適當的幫引號或其他有特殊意義的字元加上\ 這種手法叫做SQL Injection 寫資料庫程式千萬要注意 針對單純的insert動作 可以用以下函式來簡化 function sql_insert($table,$res,$lnk=NULL){ $field_a=array(); $data_a=array(); foreach($res as $key => $val){ if(isset($val)){ $field_a[]='`'.$key.'`'; $data_a[]='\''.($lnk===NULL?mysql_real_escape_string($val):mysql_real_escape_string($val,$lnk)).'\''; } } $field=implode(',',$field_a); $data=implode(',',$data_a); $sql='INSERT INTO `'.$table.'` ('.$field.') VALUES ('.$data.');'; return $lnk===NULL?mysql_query($sql):mysql_query($sql,$lnk); } 使用方式 $data=array(); $data['id']=$id; $data['lala']=$lala; sql_insert('table',$data); 以上的動作等同於 mysql_query('INSERT INTO `table` (`id`,`lala`) VALUES ("'.mysql_real_escape_string($id).'","'.mysql_real_escape_string($lala).'")'); 這樣很方便吧~XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.22.93.130 ※ 編輯: buganini 來自: 163.22.93.130 (03/13 01:05) ※ 編輯: buganini 來自: 163.22.93.130 (03/13 01:28) ※ 編輯: buganini 來自: 140.131.149.15 (04/05 18:12)
文章代碼(AID): #15zOVO1V (PHP)
討論串 (同標題文章)
文章代碼(AID): #15zOVO1V (PHP)