SQL注入前端
利用現有的應用程序,將惡意的SQL命令注入到存在安全問題的應用程序的後臺數據庫,使得對數據庫的操做不按照設計者的意圖去操做。
源代碼:select id from users where username = '"+username +"' and password = '" + password +" SQL注入:select id from users where username = 'abc' or 1 = 1-- and password = '123' 注入後你隨便輸入用戶名和密碼即可以登陸
前端:對用戶輸入的信息進行校驗,避免使用操做數據庫的字段、對單引號和雙"-"進行轉換等。sql
後臺:數據庫
1. 永遠不要使用動態拼裝sql,可使用參數化的sql或者直接使用存儲過程進行數據查詢存取。安全
好比mybatis中: <if test="goodsName != null"> AND goods_name LIKE CONCAT('%','${goodsName}','%') </if> <if test="goodsName != null"> AND goods_name LIKE CONCAT('%',#{goodsName},'%') </if>
2. 應用程序拋出的異常進行分裝,避免暴露數據庫結構。mybatis
3. 不一樣應用程序使用不一樣的數據庫權限。加密
4. 對於機密的信息進行加密,好比密碼等。spa