• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于微信云數(shù)據(jù)庫的CRUD操作工具的設(shè)計(jì)與實(shí)現(xiàn)

    2023-04-27 04:00:42馮嘉潤(rùn)劉穎
    電腦知識(shí)與技術(shù) 2023年7期
    關(guān)鍵詞:多線程

    馮嘉潤(rùn) 劉穎

    關(guān)鍵詞:微信云數(shù)據(jù)庫;Java;SQL語句;SQL注入;多線程

    0 引言

    隨著微信小程序的不斷普及,小程序也成為眾多開發(fā)者的開發(fā)目標(biāo)。而在開發(fā)小程序的同時(shí),也會(huì)用到和小程序相對(duì)應(yīng)的微信云數(shù)據(jù)庫用來存儲(chǔ)小程序的數(shù)據(jù)信息[1],此時(shí)為了能夠更好地統(tǒng)計(jì)和處理這些數(shù)據(jù),通常會(huì)使用第三方的系統(tǒng)平臺(tái)來對(duì)這些數(shù)據(jù)進(jìn)行處理。但是目前官方并未提供對(duì)微信云數(shù)據(jù)庫操作的Java工具類,這讓開發(fā)者在處理微信云中的數(shù)據(jù)需要自己手動(dòng)去封裝這些接口[2]從而導(dǎo)致開發(fā)效率的降低。同時(shí),開發(fā)過程可能也會(huì)由于開發(fā)者的疏忽導(dǎo)致編碼的安全性不高引發(fā)不必要的安全漏洞。

    通過Java開發(fā)一款可以直接調(diào)用工具內(nèi)方法操作微信云數(shù)據(jù)庫的Jar包工具。用戶可以直接通過調(diào)用包內(nèi)的方法傳入對(duì)應(yīng)的SQL語句參數(shù)即可由工具代替用戶用已經(jīng)封裝好的方法請(qǐng)求微信云數(shù)據(jù)對(duì)應(yīng)的接口并獲取相應(yīng)的返回?cái)?shù)據(jù),同時(shí)為了讓系統(tǒng)不受字符拼接導(dǎo)致的SQL 注入[3],工具會(huì)對(duì)用戶傳入的SQL語句進(jìn)行特殊字符的過濾處理來保證系統(tǒng)的安全性[4]。

    1 需求分析

    該工具需要實(shí)現(xiàn)對(duì)云數(shù)據(jù)庫的操作,并打包成可以隨時(shí)調(diào)用的Java歸檔程序。為了能夠讓用戶更加簡(jiǎn)單地使用該工具,用戶使用前需要提供微信云數(shù)據(jù)庫的資源ID、賬號(hào)、密鑰,由本工具的云數(shù)據(jù)庫初始化方法代替用戶對(duì)云數(shù)據(jù)庫的初始化來獲取數(shù)據(jù)庫的連接實(shí)例。對(duì)數(shù)據(jù)的操作一般有四種情況,即增刪改查操作,所以該工具需要提供對(duì)云數(shù)據(jù)庫增刪改查的方法,為了防止有其他的操作情況如事務(wù)、回滾等,本工具還需提供一個(gè)可以執(zhí)行任意SQL的方法來滿足用戶需求。同時(shí)為了保證系統(tǒng)的安全性和SQL語句的唯一語義性,需要對(duì)傳入的SQL語句進(jìn)行安全性檢測(cè)與過濾。為了方便開發(fā)者能夠快速地定位自己的錯(cuò)誤,工具需要提供對(duì)SQL語句執(zhí)行情況以及執(zhí)行結(jié)果的日志記錄功能以方便后續(xù)開發(fā)者能夠快速地分析和定位錯(cuò)誤。

    綜上所述,該工具主要提供了初始化微信云數(shù)據(jù)庫實(shí)例的方法,執(zhí)行增、刪、改、查和執(zhí)行任意SQL語句的方法和對(duì)SQL 語句的安全性校驗(yàn)的方法以及SQL日志記錄的功能。

    2 技術(shù)選型

    該工具采用Java語言開發(fā),使用正則表達(dá)式對(duì)輸入的SQL語句進(jìn)行特殊字符過濾以確保輸入的SQL語句是合法且不具有危險(xiǎn)性的語句來防止SQL注入。工具使用到了Apache Jakarta Common 的子項(xiàng)目Apache HttpClient包作為底層發(fā)起網(wǎng)絡(luò)請(qǐng)求和獲得請(qǐng)求結(jié)果[5]的工具,由用戶輸入SQL語句之后調(diào)用本工具封裝好的網(wǎng)絡(luò)請(qǐng)求方法來獲得SQL語句執(zhí)行結(jié)果。執(zhí)行結(jié)果使用到了JSONObject類對(duì)其進(jìn)行JSON的解析與格式化[6],JSON格式化完畢之后即可通過數(shù)組訪問的方法來獲取指定的執(zhí)行結(jié)果。最后使用Java 命令將該工具打包成可直接調(diào)用的Jar包[7],方便其他用戶使用該工具。

    3 設(shè)計(jì)與實(shí)現(xiàn)

    3.1 工具功能設(shè)計(jì)

    根據(jù)需求分析,該工具需實(shí)現(xiàn)基本的增刪改查功能和任意SQL語句執(zhí)行方法來方便開發(fā)者直接調(diào)用。大致確認(rèn)該工具功能分為“添加SQL語句執(zhí)行方法”“刪除SQL語句執(zhí)行方法”“更新SQL語句執(zhí)行方法”“查詢SQL語句執(zhí)行方法”“任意SQL語句執(zhí)行方法”“日志記錄”。確定該工具的功能結(jié)構(gòu)如圖1。

    3.2 工具功能實(shí)現(xiàn)

    為了達(dá)到通過請(qǐng)求微信云數(shù)據(jù)庫接口來操作數(shù)據(jù),主要需要實(shí)現(xiàn)以下功能:通過發(fā)起Apache HttpCli?ent包封裝的方法中的Post請(qǐng)求來發(fā)送對(duì)微信云數(shù)據(jù)庫初始化以及操作的請(qǐng)求。在底層為了提高SQL語句的執(zhí)行效率采用多線程的方式去發(fā)起網(wǎng)絡(luò)請(qǐng)求來執(zhí)行SQL語句。為保障系統(tǒng)數(shù)據(jù)的安全性,需要采取對(duì)SQL語句的安全性校驗(yàn)。大致確認(rèn)工具功能需要實(shí)現(xiàn)以下三點(diǎn):“發(fā)起Post請(qǐng)求”“SQL語句安全性校驗(yàn)”“多線程執(zhí)行SQL語句”。

    3.2.1 發(fā)起Post 請(qǐng)求

    該工具需要發(fā)起對(duì)微信云數(shù)據(jù)庫操作接口的網(wǎng)絡(luò)請(qǐng)求和接收返回?cái)?shù)據(jù),此時(shí)需要用到Apache 的HttpCilent包請(qǐng)求微信云數(shù)據(jù)庫的操作接口,關(guān)鍵代碼如下:

    當(dāng)工具可以正常發(fā)起POST請(qǐng)求時(shí),首先需要通過POST請(qǐng)求向微信云數(shù)據(jù)庫發(fā)送一個(gè)包含云數(shù)據(jù)庫ID、密鑰、賬號(hào)的驗(yàn)證信息來獲取Token(身份臨時(shí)認(rèn)證信息),擁有Token之后才能對(duì)數(shù)據(jù)庫進(jìn)行操作。且該Token有效期只有兩個(gè)小時(shí),那么在執(zhí)行對(duì)數(shù)據(jù)庫的操作之前需要對(duì)Token進(jìn)行校驗(yàn),如果Token失效那么需要重新獲取Token,有效則直接發(fā)送操作數(shù)據(jù)庫的請(qǐng)求,關(guān)鍵代碼如下:

    3.2.2 SQL 語句安全性過濾

    數(shù)據(jù)庫是Web服務(wù)中非常重要的部分,許多重要的數(shù)據(jù)都存在于數(shù)據(jù)庫中。在Web漏洞中,SQL注入所占的比例是比較高的,且對(duì)服務(wù)的危害等級(jí)也是很高的,如果存在SQL注入漏洞可能會(huì)導(dǎo)致數(shù)據(jù)庫的信息泄露和影響應(yīng)用的正常使用。所以在使用SQL語句對(duì)數(shù)據(jù)庫進(jìn)行查詢的時(shí)候需要確保所查詢的SQL語句是無危害的,不會(huì)導(dǎo)致除原本SQL語義的其他語句被執(zhí)行。本工具中的SQL語句采用微信云數(shù)據(jù)庫的語法結(jié)構(gòu),如果未對(duì)SQL語句進(jìn)行安全校驗(yàn),那么原本的語義可能就會(huì)被攻擊者利用注入漏洞轉(zhuǎn)換為其他語義。

    如原本語句為:"db. collection('admin'). where({username:'"+name+"'}).get()",傳入name參數(shù)即可查詢username為name的用戶。如果不對(duì)輸入的name參數(shù)安全校驗(yàn),那么輸入的name 如果為“小明",age:10"”,那么原語句的SQL語句就會(huì)變?yōu)椋?db.collection('admin').where({username: "小明",age: "10"}).get()",該語句的語義就會(huì)由查詢用戶名為小明的用戶信息變?yōu)椴樵冇脩裘麨樾∶髑夷挲g為10歲的用戶信息,原有的SQL語句的語義發(fā)生的轉(zhuǎn)變,這就是字符拼接導(dǎo)致的SQL注入。本工具采用字符過濾的方式可以有效地避免這種漏洞,關(guān)鍵代碼如下:

    下面使用JUnit測(cè)試模塊測(cè)試該方法對(duì)輸入包含非法字符的SQL語句過濾效果,代碼如下:

    3.2.3 多線程執(zhí)行SQL 語句

    本工具對(duì)云數(shù)據(jù)庫進(jìn)行操作的原理是通過請(qǐng)求微信云數(shù)據(jù)庫對(duì)應(yīng)的API 來實(shí)現(xiàn)的增刪改查操作。但網(wǎng)絡(luò)操作通常比較費(fèi)時(shí),所以為提高執(zhí)行效率,本工具在底層采用線程池的方式來發(fā)起網(wǎng)絡(luò)請(qǐng)求,從而實(shí)現(xiàn)在需要調(diào)用多線程直接進(jìn)行調(diào)用,省去了創(chuàng)建多線程耗時(shí)的過程。關(guān)鍵代碼如下:

    同時(shí),執(zhí)行的SQL語句所返回的執(zhí)行結(jié)果在返回給用戶的同時(shí)也會(huì)輸出到控制臺(tái)方便開發(fā)者能夠快速地分析和定位錯(cuò)誤,如圖4。

    4 結(jié)束語

    該工具使用Java開發(fā),提供了基本的微信云數(shù)據(jù)庫的SQL語句執(zhí)行功能、云數(shù)據(jù)庫初始化功能。讓開發(fā)者在對(duì)微信云數(shù)據(jù)庫的第三方開發(fā)中能夠更加簡(jiǎn)單便捷。使用了線程池來提高SQL語句的執(zhí)行效率,在SQL執(zhí)行過程中對(duì)SQL語句進(jìn)行了安全校驗(yàn)確保SQL語句的語義一致以及云數(shù)據(jù)庫的安全。同時(shí)為了方便開發(fā)者能夠快速定位SQL語句,本工具會(huì)將每次執(zhí)行的SQL語句以及返回結(jié)果進(jìn)行輸出記錄。

    猜你喜歡
    多線程
    Java并發(fā)工具包對(duì)并發(fā)編程的優(yōu)化
    基于多線程文件傳輸關(guān)鍵技術(shù)研究與實(shí)現(xiàn)
    網(wǎng)頁爬蟲技術(shù)的關(guān)鍵技術(shù)研究探索
    一種基于多線程的高速磁盤鏡像算法
    iOS并發(fā)程序設(shè)計(jì)中幾種方法的特點(diǎn)及使用技巧研究
    電站鍋爐煤粉參數(shù)遠(yuǎn)程監(jiān)控系統(tǒng)的軟件設(shè)計(jì)與實(shí)現(xiàn)
    新沂市| 永宁县| 上栗县| 武义县| 威宁| 湘阴县| 松江区| 靖西县| 邯郸市| 彭水| 鄂托克前旗| 科尔| 龙里县| 秀山| 淄博市| 古丈县| 宁德市| 海安县| 隆昌县| 自治县| 基隆市| 湟源县| 宜宾县| 渭源县| 佛学| 泾源县| 白山市| 松溪县| 江北区| 平武县| 开原市| 蒙阴县| 威海市| 黔南| 南充市| 彭阳县| 镇赉县| 文安县| 惠水县| 嘉鱼县| 邹城市|