Re: [請益] select的用法?消失

看板PHP作者時間13年前 (2011/03/10 00:11), 編輯推噓2(207)
留言9則, 4人參與, 最新討論串3/4 (看更多)
※ 引述《walilecow (三重捷運套房頂讓)》之銘言: : ※ 引述《waiting76 (waiting)》之銘言: : : 想請問一下 : : $show=mysql_query("select * from addressList",$conn); : : 由於這句是寫在函式裡面 : : 可是需要呼叫函式外面建立的資料表addressList : : 我就想說改成 : : $addressList=$_GET[addressList]; : : $show=mysql_query("select * from $addressList",$conn); : : 但是網頁跑出來是說不對 : : 是因為select後面不能加變數的關係嗎? : : 不知道如果要呼叫函式外面的資料表可以怎麼寫 : : 感謝閱讀~ : 如果是數字的話建議使用intval : 如果是字串建議使用addslashes : 例如: "SELECT * FROM table_name WHERE id=".intval($_GET['id']) : "SELECT * FROM `user` WHERE name=\"".addslashes($_GET['name'])."\"" 看到底下的推文就忍不住來回一下文了...XD 有人提到說 mysql_real_escape_string() 比較安全, 其實這個並不盡然啊... 因為攻擊是多樣性的... http://0rz.tw/5G3PW 這一篇是歷時了四年的討論串, 雖然只有二頁, 而且後面快離題了...XD 裡面所舉的一個例子: PHP Code: $sub = mysql_real_escape_string("%something"); // still %something mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'"); 這裡引發的又是另外一種的攻擊...(3F的回文中所引用到的PDF檔有詳細的說明) (建議把那篇PDF載下來閱讀) ==========我是分隔線============ 以我自己的實務經驗,addslashes再配合一些變數條件限定其實就蠻夠用了... 之前被很多資安廠商掃過,也沒有跳出過什麼問題出來...(不過也不代表絕對沒問題 囧) (機器掃瞄總是比較笨的...XD) 心得:多花點時間,多弄些條件限定(過濾),被攻擊的可能性就會少了一點~ -- ※ 發信站: 批踢踢實業坊(ptt.cc)

03/10 00:20, , 2F
再說 上面這個例子 m.r.e.s()不夠用 難道addslashes()
03/10 00:20, 2F

03/10 00:21, , 3F
就夠了嗎?
03/10 00:21, 3F

03/10 01:28, , 4F
我現在全部都用 prepared statement, 再也不用管 esacpe
03/10 01:28, 4F

03/10 02:55, , 5F
addslashes 並不安全.. PHP 官方建議用 mysql_real_**或PDO
03/10 02:55, 5F

03/10 02:58, , 6F
這樣寫可以被很多資安廠商掃得過還蠻誇張的,我們買的白箱測試
03/10 02:58, 6F

03/10 02:58, , 7F
源碼檢測軟體, addslashes是被列為高風險的
03/10 02:58, 7F

03/10 09:21, , 8F
機器掃瞄通常比較好過, 如果是人工檢測, 那就囧大了...= =
03/10 09:21, 8F

03/10 09:22, , 9F
當然我也不建議"只"使用addslashes來跳脫,畢竟風險太高了...
03/10 09:22, 9F
文章代碼(AID): #1DTwRCyf (PHP)
文章代碼(AID): #1DTwRCyf (PHP)