iT邦幫忙

0

基本防止sql injection

各位前輩 大家好!!

小弟想請問以下兩個問題

Q1:防止使用者sql injection 在變數前面加上mysql_real_escape_string是不是就很夠用了??

Q2:剛剛查了一下使用mysql_query的話只會跑第一段的SQL指令所以就不用擔心使用者在欄位中填入;DROP DATABASE pubs --砍掉你的資料表嗎??

外獅佬 iT邦大師 1 級 ‧ 2015-06-05 16:07:29 檢舉
請不要自己『組SQL』,請愛用Parameter....
mysqli_stmt_bind_param
jojolin iT邦新手 5 級 ‧ 2015-06-06 02:15:16 檢舉
了解!! 感謝您 :)

1 個回答

0
wiseguy
iT邦超人 1 級 ‧ 2015-06-06 01:35:12
最佳解答

A1. 不夠。mysql_real_escape_string 只能防止資料讓 SQL 出錯,縱然有稍微防止 sql injection 的效果,但還是不夠的。最好就是別自己組 sql,用 stmt 系列指令來把變數放進 SQL。

A2. 你想的太單純。injection 可以在 select 的功能中,插入駭客想要的 table、column,抓出非預期的資料 (比如列出所有 TABLE 名稱)、再到 DELETE 的功能中,把 TABLE 名再插進去,就能刪掉資料了,這樣都是第一段指令喔。

看更多先前的回應...收起先前的回應...
jojolin iT邦新手 5 級 ‧ 2015-06-06 02:15:50 檢舉

感謝 大大的回覆 受益良多 馬上改程式~!!

jojolin iT邦新手 5 級 ‧ 2015-06-06 21:30:23 檢舉

wiseguy大大 你好
我想請問第二個問題的內容,還有什麼方法能有效的預防駭客插入那些指令呢??

jojolin iT邦新手 5 級 ‧ 2015-06-06 21:31:02 檢舉

BTW 我是使用mysql@@

wiseguy iT邦超人 1 級 ‧ 2015-06-07 17:28:15 檢舉

只要不自己以自串串接的方式組 SQL,駭客就幾乎沒機會"插"指令。

我要發表回答

立即登入回答