各位前輩 大家好!!
小弟想請問以下兩個問題
Q1:防止使用者sql injection 在變數前面加上mysql_real_escape_string是不是就很夠用了??
Q2:剛剛查了一下使用mysql_query的話只會跑第一段的SQL指令所以就不用擔心使用者在欄位中填入;DROP DATABASE pubs --砍掉你的資料表嗎??
A1. 不夠。mysql_real_escape_string 只能防止資料讓 SQL 出錯,縱然有稍微防止 sql injection 的效果,但還是不夠的。最好就是別自己組 sql,用 stmt 系列指令來把變數放進 SQL。
A2. 你想的太單純。injection 可以在 select 的功能中,插入駭客想要的 table、column,抓出非預期的資料 (比如列出所有 TABLE 名稱)、再到 DELETE 的功能中,把 TABLE 名再插進去,就能刪掉資料了,這樣都是第一段指令喔。