【重溫基礎的SQL注入】圖文詳細解說,java後臺用mybatis框架的SQL注入漏洞和效果展示,以及預防
阿新 • • 發佈:2019-01-28
1. SQL注入
1.1原因描述:
使用者名稱和密碼的引數是直接引用,可用拼接的方式。
1.2 拼接方式
' or '1'='1 (這個可以作為參考原型,變種很多,百度都有)
主要是拼接成這樣的SQL:
效果如此:即使沒有拼接查詢張三,依然能查到資料庫的張三,因為 'or' 後面 1=1永恆成立。
具體操作時分號要靈活使用,
例如圖一中,password沒加分號,那麼password中的 or 1=1 則不需要分號。
後臺的分號結構都不是固定的,想辦法拼湊,有的不加分號也可以。可進行多次嘗試。
1.3 避免方法
Mybatis中,將去掉圖一中的分號“ ' ”,並且把’$’ 改為 ’#’,讓引數作為值插入,而不是字串拼接。
1.4 補充
此方法還和後臺有關係:
上面的頁面能登入成功並且進入,因為資料庫只有一條資料,如果有多條資料
後臺頁面如下:
此時如果有兩條資料,就會報錯。
當然,如果有已知的使用者名稱,並且使用者名稱是資料庫存在並且唯一,而密碼進行sql注入,就不會出現這種情況。。
或者,如果後臺開發人員粗心這麼寫:
不管他資料庫有幾條資料,使用者名稱和密碼都可以隨便寫,都可以輕鬆繞過啦。。。
PS: SQL注入是幾年前非常流行的漏洞,現在已經非常非常少見,不排除運氣好,能遇到不知名的小網站貓進去。這裡僅作為安全基礎知識,熟悉一下。