目錄
- SQL注入攻擊如何防止
- 什么是SQL注入攻擊
- 不安全代碼撰寫
- 攻擊方式
- 如何防止sql注入
- 代碼層
- 其他方法
- 最后
SQL注入攻擊如何防止
? SQL注入攻擊是黑客對資料庫進行攻擊常用的手段之一,隨著B/S模式應用開發的發展,由于沒有對用戶輸入資料的合法性進行判斷,使應用程式存在安全隱患,用戶可以提交一段資料庫查詢代碼,根據程式回傳的結果,獲得某些他想獲取的資料,這就是所謂的SQL Injection,即SQL注入,
什么是SQL注入攻擊
? 下面我們就通過實際生產中的例子來演示什么是SQL注入攻擊,
不安全代碼撰寫
? 當我們不注意sql攻擊的時候sql容易些成下面這樣:
public List<People> orderList (String peopleid){
String sql = " select id,name,age from people where people_id = " + peopleid;
return jdbcTemplate.query(sql,new BeanPropertyRowMapper(People.class));
}
這個時候我們將前端傳入的引數直接拼接到sql陳述句的后端,此時就容易出現sql注入攻擊,
攻擊方式
-
越過判斷條件查詢所有資料
- 通過前面的分析,由于是sql拼接,所以我們在攻擊的時候只需要在其后面拼接一個諸如:or 1=1的恒等式,即可查詢到所有的資訊,
-
查詢mysql版本號(version())
- 使用union拼接sql
-
查詢資料庫名(database())
- 使用union拼接sql
-
查詢mysql當前用戶的所有庫
- 也是使用union拼接sql
由此我們可以看出,只要使用拼接sql的方式,對方就有一百種方法來攻擊你,找到一些關鍵資料,
如何防止sql注入
代碼層
? 代碼層防止sql注入攻擊的最佳方案就是sql預編譯
public List<People> orderList (String peopleid){
String sql = " select id,name,age from people where people_id = ?" ;
return jdbcTemplate.query(sql,new BeanPropertyRowMapper(People.class));
}
? 這樣穿過來的引數 4 or 1 = 1 就會被當做是一個people_id,就不會出現SQL注入了,
其他方法
- 確認每種資料的型別,比如是數字的,資料庫則必須使用int型別來存盤
- 規定資料長度,能從一定程度上防止sql注入
- 嚴格限制資料庫權限,能最大程度上減少sql注入的危害
- 避免直接回應一些sql例外資訊,sql發生例外后,自定義例外進行回應
- 過濾引數中含有的一些資料庫關鍵詞
最后
- 如果覺得看完有識訓,希望能給我點個贊,這將會是我更新的最大動力,感謝各位的支持
- 歡迎各位關注我的公眾號【java冢狐】,專注于java和計算機基礎知識,保證讓你看完有所識訓,不信你打我
- 如果看完有不同的意見或者建議,歡迎多多評論一起交流,感謝各位的支持以及厚愛,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/105729.html
標籤:其他
上一篇:網路監控——資料包切片和資料脫敏
