java參數化查詢_小博老師解析Java核心技術 ——JDBC參數化查詢(二)

[步驟閱讀四]SQL注入

按照以上方式開發,確實已經完成了基本的用戶登錄業務需求,但是這么做的話可以會出現一個比較嚴重的問題,那就是容易被SQL注入。所謂SQL注入,就是在需要用戶填寫信息,并且這些信息會生成數據庫查詢字符串的場景中,惡意輸入破壞程序原有業務邏輯的數據庫查詢字符,最終達到欺騙程序執行惡意的SQL命令。

小博老師現在就為大家演示一下,在剛才開發的登錄程序中,通過SQL注入的方式來進行登錄:

c54fb1c3719690750d3dd4afb70d1018.gif

可見,我們不需要知道數據庫中用戶表的信息,就可以進行成功登錄。這個問題的根本原因在于,我們判斷用戶是否登錄成功,是通過將用戶填寫的賬戶名稱和密碼拼接到查詢語句:

select * from users where uname=‘賬戶名稱’ and upwd=’賬戶密碼’;

中執行,并且判斷查詢的結果集中是否有滿足條件的記錄。按照上圖所示,小博老師不填寫賬戶名稱,而在密碼中填寫?‘?or?‘1’=’1,那么拼接后的查詢語句就變成了:

select * from users where uname=’’?and upwd=’’?or?‘1’?=?‘1’;

這樣一來,or關鍵將where復合條件變為了“或則”的關系,后面跟上了一個恒成立的1=1,那么這個where條件就失去了意義,永遠為true。這樣一來,查詢語句就變成了查詢數據表中的所有記錄,結果集中當然就會一直有數據存在,邏輯判斷登錄成功。

[步驟閱讀五]參數化查詢防止SQL注入

為了防止這種被SQL注入的漏洞存在,我們經常可以使用參數化查詢的方式來實現程序的業務邏輯,接下來小博老師就為大家演示參數化查詢的使用方式,我們修改原有代碼如下:

// 加載JDBC驅動

Driver?driver?=?new?Driver();

// 創建數據庫連接對象

Connection?conn?= DriverManager.getConnection( "jdbc:mysql://127.0.0.1:3306/bwf?useUnicode=true&characterEncoding=utf8",

"root","");

// 創建數據庫預加載申明對象

PreparedStatement?stmt?=?conn.prepareStatement("select * from users where uname = ? and upwd = ? ");

// 為預加載申明對象 添加 參數(用戶填寫的賬戶名稱和密碼)

stmt.setString(1,?txtUname.getText());

stmt.setString(2,?txtUpwd.getText());

// 向數據庫發送查詢語句,查詢滿足條件的用戶記錄

ResultSet?rs?=?stmt.executeQuery();

// 判斷查詢的結果集中是否有滿足條件的記錄

if(rs.next()){

// 有滿足條件的記錄,登錄成功

JOptionPane.showMessageDialog(getContentPane(),?"登錄成功!");

}else{

// 沒有滿足條件的記錄,登錄失敗

JOptionPane.showMessageDialog(getContentPane(),?"賬戶名稱或密碼錯誤!請重新填寫!");

}

rs.close();

conn.close();

這樣一來,我們就可以防止被SQL注入的危險了:

b4bd1fde4f9d1af8c0a51de87666633d.gif

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275755.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275755.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275755.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Lightbox 效果

網上其實到處都是。 遮罩層: .transparent {filter:alpha(opacity0); -moz-opacity: 0.0; opacity: 0.0; z-index: 90;background-color:#000;float:left;top:0;left:0;position:absolute;width:100%; }主要業務層:.rollover5 {display:none; position:a…

前端搶飯碗系列之Vue項目如何做單元測試

大家好,我是若川。今天分享一篇vue項目如何做單元測試的好文,文章比較長,建議先收藏,需要時用電腦看。點擊下方卡片關注我、加個星標學習源碼系列、年度總結、JS基礎系列關于單元測試,最常見的問題應該就是“前端單元測…

React Native組件開發指南

React Native的組件開發一直處在一個比較尷尬的處境。在官方未給予相關示例與腳手架的情況下,社區中依然誕生了許許多多的React Native組件。因為缺少示例與規范,很多組件庫僅含有一個index.js文件。這種基礎的目錄結構也導致了一些顯而易見的問題&#…

java activiti jbpm_activiti和jbpm工作流引擎哪個比較好?

原標題:activiti和jbpm工作流引擎哪個比較好?在常用的ERP系統、OA系統的開發中,工作流引擎是一個必不可少的工具。之前在選擇工作流引擎時曾經在activiti和jbpm之間有過比較,當時做出的決定是使用jbpm,但實際開發過程中…

C/C++中善用大括號

C/C中善用大括號轉載于:https://www.cnblogs.com/satng/archive/2010/12/17/2138840.html

識別人聲_演唱人聲的5個技巧

識別人聲什么是聲樂伴奏? (What is Vocal Comping?) Vocal comping describes the process of combining multiple vocal takes into one “supertake” that has the best parts of each. This is called a “composite track,” or comp for short. Many instrum…

你知道source map如何幫你定位源碼么?

大家好,我是若川。今天分享一篇我們經常會忽略的定位原始代碼位置原理的文章。文章不長,例子不錯,可以先收藏,有空時動手試試。學習源碼系列、年度總結、JS基礎系列前言我們知道,代碼上線前要經過壓縮,美化…

OOP 中的 方法調用、接口、鴨式辯型、訪問者模式

2019獨角獸企業重金招聘Python工程師標準>>> 方法調用的四種方式 直接調用:通過類或者實例直接調用其方法。接口調用或者轉型調用:通過將實例回調給一個接口對象,或者轉型為一個父類的實例,來調用間接調用:…

Substitution控件MethodName無法取到Session的解決辦法

Substitution是對緩存頁面實現動態顯示部分內容的控件,使用方法:在后臺頁面添加靜態方法,private static string MethodName(HttpContext context),經典的用法是動態顯示的是當前的登錄用戶名字(非登錄用戶顯示其他的)…

java中想要保留2位小數_java使double保留兩位小數的多方法 java保留兩位小數

mport java.text.DecimalFormat;DecimalFormat df new DecimalFormat("######0.00");double d1 3.23456double d2 0.0;double d3 2.0;df.format(d1);df.format(d2);df.format(d3);3個結果分別為:3.230.002.00java保留兩位小數問題:方式一&#x…

游戲 新手引導 設計_我認為每個新手設計師都應該知道什么

游戲 新手引導 設計重點 (Top highlight)I should probably have titled this article “What I wish I knew as a newbie designer.” Anyway, I’ve been doing this graphic design thing for a little over a year now, and I know now, a few things that could have made…

畢業年限不長的前端焦慮和突破方法

大家好,我是若川。今天周六,分享一篇相對輕松的文章。經作者耳東蝸牛 授權轉載鏈接:https://juejin.cn/post/6968002742321152014也可點擊文末閱讀原文直達本篇文章來源于:周五和團隊成員[20年畢業]的一次閑聊。畢業不到一年&…

開源自然語言處理工具包hanlp中CRF分詞實現詳解

CRF簡介 CRF是序列標注場景中常用的模型,比HMM能利用更多的特征,比MEMM更能抵抗標記偏置的問題。 [gerative-discriminative.png] CRF訓練 這類耗時的任務,還是交給了用C實現的CRF。關于CRF輸出的CRF模型,請參考《CRF模型格式說明…

java 素數歐拉篩選_[C++]歐拉素數篩的理解與實現

在傳統的素數篩法中,我們使用了對于每一個數n,在 1~(√n) 范圍內進行取模檢查,這樣逐一判斷的復雜度為n(√n)。但如果我們需要更快的篩法時怎么辦?于是著名的歐拉篩誕生了。它能將復雜度降為**O(n)**級別。1.關鍵理解:…

交互規則_您必須永不中斷的10條交互設計規則

交互規則重點 (Top highlight)In life, there are certain rules you must never break. If you do there will be hell to pay. In User Interface design there are also rules to live by. They are called “heuristics” or general principles that improve usability in…

一個幫助我100%拿offer的面試學習法

大家好,我是若川。今天周日,再分享一篇相對輕松的文章。文中說的面試學習法有一定的借鑒意義。另外我也推薦大家每隔一段時間不為跳槽的更新自己簡歷,也是對自己一階段的梳理總結,畢竟功在平時。哈嘍大家好,我是大圣&a…

2010年終總結

還有兩天2010就要結束了,寫下自己的年終總結吧,以總結自己,展望明年。2010對我來說是怎樣的一年呢?忙碌的一年,鴨梨更大的一年,折騰的一年,復雜的一年,夢游的一年,痛并快…

java獲取apk啟動activity_兼容 Android 10 啟動 APK 實現方案

背景我們想啟動 APK 程序,有很多種方法,可以使用 Intent,也可以使用 adb shell 命令來啟動,還有通過反射來啟動 APk 程序。我們這里主要討論通過反射的方式來啟動 apk 程序。Android10 之前,我們通過反射來啟動 APK&am…

Android Studio中解決jar包重復依賴導致的代碼編譯錯誤

在原本的代碼中已經使用了OKHTTP和rxjava,然后今天依賴retrofit的時候一直報錯 Program type already present: okhttp3.internal.ws.RealWebSocket$1.class 說是我重復添加了OKHTTP的包,但其實我直接把OKHTTP的依賴注釋掉都沒用,只要依賴ret…

面試被問項目經驗不用慌,按這個步驟回答絕對驚艷

大家好,我是若川。常有小伙伴問,面試時項目經驗怎么回答,經常會分享這篇文章給TA。本文經授權轉載。面試、學習源碼系列、年度總結、JS基礎系列前言本篇文章的作者是來自阿里淘系用戶增長前端團隊的“亦遜”,18年作為雙非本科生通…