sql注入是指把sql關(guān)鍵字以變量的形式拼接到要執(zhí)行的sql中,導(dǎo)致sql的執(zhí)行效果發(fā)生變化。
非法字符:’ or 1=1 --
解決:sql預(yù)編譯,參數(shù)化查詢嚎朽,對參數(shù)中的特殊字符進(jìn)行替換,雙引號替換單引號?
PreparedStatement柬帕、Statement比較
1.PreparedStatement比Statement?更快
sql在執(zhí)行之前會在數(shù)據(jù)庫進(jìn)行預(yù)編譯哟忍,以后再有類似的查詢可以重用室囊,不用再次編譯。
2.PreparedStatement參數(shù)化查詢
使用魁索?作為占位符融撞,可以用不同的參數(shù)進(jìn)行查詢。
3.PreparedStatement可以防止SQL注入式攻擊
使用PreparedStatement的參數(shù)化的查詢可以阻止大部分的SQL注入粗蔚。在使用參數(shù)化查詢的情況下尝偎,數(shù)據(jù)庫系統(tǒng)不會將參數(shù)的內(nèi)容視為SQL指令的一部分來處理,而是在數(shù)據(jù)庫完成SQL指令的編譯后鹏控,才套用參數(shù)運(yùn)行致扯,因此就算參數(shù)中含有破壞性的指令,也不會被數(shù)據(jù)庫所運(yùn)行当辐。