那么,我再繼續(xù)深一步,剛才說(shuō)到了數(shù)據(jù)庫(kù)。
我們保證了入庫(kù)前的所有變量必須是addslashes,但是,如果你不做下面的一件事。那么你再addslashes也是白搭
哪件事呢?
select * from table where id=$id
select * from table where id=I\'m
看,依然sql錯(cuò)誤,而且還被注入
我舉例子
沒(méi)錯(cuò),單引號(hào)封閉,無(wú)論你是什么類型的字段
在Discuz!的規(guī)范里,必須都加單引號(hào)
select * from table where id='$id'
WHERE后面的所有條件
變量必須加單引號(hào),這是規(guī)范。也許你少加一個(gè),并不會(huì)產(chǎn)生漏洞,也只是也許。
SQL
良好的代碼規(guī)范可增加自己的可讀性
DB::query("UPDATE ".DB::table('common_member_count')." set $giftunit = $remaining where uid = $_G[uid]");
Discuz!規(guī)定sql語(yǔ)句中的SQL關(guān)鍵詞必須大寫
DB::query("UPDATE ".DB::table('common_member_count')." SET $giftunit='$remaining' WHERE uid='$_G[uid]'");
修正過(guò)的