软件安全实验三
實驗三防止SQL注入
1.實驗目的
學習關于防止SQL的知識,進行SQL注入實驗,通過實驗體會到SQL注入的危害,學會解決防范SQL注入實驗的方法
2.實驗環境
Windows10,eclipse,火狐,MySQL
3.實驗原理
SQL注入是比較常見的網絡攻擊方式之一,它不是利用操作系統的BUG來實現攻擊,而是針對程序員編程時的疏忽,通過SQL語句,實現無帳號登錄,甚至篡改數據庫。
3.1思路:
(1)尋找到SQL注入的位置
(2)判斷服務器類型和后臺數據庫類型
(3)針對不通的服務器和數據庫特點進行SQL注入攻擊
3.2實驗實例
(1)設計一個登錄界面,要求輸入用戶名和密碼
(2)可以這樣輸入實現免帳號登錄
圖 1登錄界面
3)點登陸,如若沒有做特殊處理,那么這個非法用戶就很得意的登陸進去了
圖 2正常登錄
圖 3失敗登錄
圖 4注入成功
后臺認證程序中會有如下的SQL語句:
String sql = "select * from user_table where username=
’ “+userName+” ’ and password=’ “+password+” '";
當輸入了上面的用戶名和密碼,上面的SQL語句變成:
SELECT * FROM user_table WHERE username=
‘’or 1 = 1 – and password=’’
(5)分析SQL語句:
條件后面username=”or 1=1 用戶名等于 ” 或1=1 那么這個條件一定會成功;然后后面加兩個-,它將后面的語句注釋,讓他們不起作用,這樣語句永遠都能正確執行,用戶輕易騙過系統,獲取合法身份。
(6)防止方法
使用Java包里的filter功能.它使用戶可以改變一個 request和修改一個response. Filter 不是一個servlet,它不能產生一個response,它能夠在一個request到達servlet之前預處理request,也可以在離開 servlet時處理response。所以用戶發出的任何request都必然經過filter處理,我們就在filter處理用戶request包含的敏感關鍵字,然后replace掉或是讓頁面轉到錯誤頁來提示用戶,這樣就可以很好的防sql注入了
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mMJdfVr6-1649239983883)(https://raw.githubusercontent.com/lmy12367/img/main/imgwps6E15.tmp.jpg)]
圖 5filter防止代碼
圖 6成功防注入
4.實驗心得
通過本次實驗體驗了一下SQL的防注入實驗方法,也在實驗過程了解了防止SQL的很多方法遠不止通過Java的包防止SQL防注入;看了很多教程等寒假有時間再去試試其他的SQL防注入實驗;目前的主流前端框架vue和后端ssm框架都有更加方便快捷的方法,在我實驗過程中了解到了通過vue的axios去組織但是我前端界面沒有用vue去重構所以沒有通過這種方法,我選擇使用調用Java的包去進行過濾操作。
5.代碼
public class LoginFilter implements Filter{public void destroy() {}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)servletRequest;HttpServletResponse response = (HttpServletResponse)servletResponse;HttpSession session = request.getSession();Object object = session.getAttribute("currentUser");String path = request.getServletPath();if(object == null&&path.indexOf("login")<0&&path.indexOf("bootstrap")<0&&path.indexOf("images")<0) {response.sendRedirect("login.jsp");}else {filterChain.doFilter(servletRequest, servletResponse);}}public void init(FilterConfig arg0) throws ServletException {}}t, servletResponse);
}
}
}
總結
- 上一篇: 变频调速设计matlab,变频调速系统M
- 下一篇: 有意思的复活节彩蛋[摘]