蔣嵩林
摘? 要: 現(xiàn)代社會(huì)中,網(wǎng)絡(luò)投票由于存在欺詐投票、數(shù)據(jù)篡改、投票數(shù)據(jù)丟失、結(jié)果無(wú)法驗(yàn)證等問(wèn)題,一直飽受用戶詬病。而對(duì)于以微信支付為代表的移動(dòng)支付,由于其安全便捷性,一直飽受用戶贊譽(yù)。如果將這兩者結(jié)合起來(lái),將會(huì)碰撞出怎樣的火花呢?本系統(tǒng)基于微信支付構(gòu)建投票系統(tǒng),每次投票時(shí)支付象征性的金額,同時(shí)發(fā)起退款確認(rèn)支付的真實(shí)性,并利用了微信歷史交易記錄的可查詢性,創(chuàng)造性地打造了一個(gè)安全有保證的投票系統(tǒng),為用戶提供優(yōu)質(zhì)的投票服務(wù)同時(shí)也降低了開(kāi)發(fā)成本。
關(guān)鍵詞: 投票系統(tǒng);微信支付
【Abstract】: In contemporary society, there are problems existed in the online voting systems such as repeated fraudulent voting, data tampering, loss of voting data, and failure to verify the outcome of the voting data, and these problems causes inconvenience to the users. Meanwhile, the mobile pay systems represented by Wechat pay are distinguished due to its safety and convenience. If we combine the voting system with Wechat pay, a huge difference will be made. My system is based on Wechat pay. When you want to vote, you just need to pay a little, then a refund will give to you to ensure that the voting is real. The system can double check the voting record by checking the trading record saved on the Wechat Sever. As a result, the system provides users with a safe and fair environment to vote and it also reduces the developing cost.
【Key words】: Voting system; Wechat pay
0? 引言
近些年,由于移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,以及網(wǎng)絡(luò)民主的流行,網(wǎng)絡(luò)投票變得越發(fā)流行起來(lái)。同時(shí),隨著微信用戶數(shù)的不斷增長(zhǎng),基于降低成本的需要,越來(lái)越多的網(wǎng)絡(luò)投票基于微信開(kāi)發(fā)平臺(tái)來(lái)實(shí)現(xiàn)。但是現(xiàn)今網(wǎng)絡(luò)投票仍存在投票管理和服務(wù)需求的多樣化、系統(tǒng)規(guī)模的擴(kuò)大化,伴隨著重復(fù)投票、欺詐投票、數(shù)據(jù)篡改、結(jié)果無(wú)法驗(yàn)證等數(shù)據(jù)的客觀性問(wèn)題和投票后數(shù)據(jù)安全性問(wèn)題得不到解決。因此本文借鑒了微信支付付款模式,并基于這種模式開(kāi)發(fā)出了安全可靠的投票系統(tǒng)。
1? 現(xiàn)狀分析
1.1? 常用微信防刷票技術(shù)[1]
現(xiàn)代同類(lèi)基于微信平臺(tái)防刷票技術(shù)一般有如下幾種:①OpenID驗(yàn)證。OpenID是加密后的微信號(hào),每個(gè)用戶對(duì)每個(gè)公眾號(hào)的 OpenID是唯一的,可以通過(guò)OpenID來(lái)判斷一個(gè)用戶是否已經(jīng)投過(guò)票,以此來(lái)限制同一個(gè)微信用戶重復(fù)投票。②限制關(guān)注公眾號(hào)才能投票。在投票時(shí)通過(guò)微信接口先判斷用戶有沒(méi)有關(guān)注公眾號(hào),沒(méi)有關(guān)注則跳轉(zhuǎn)至關(guān)注頁(yè)面,此方法可以防止沒(méi)有關(guān)注公眾號(hào)的“僵尸用戶”刷票。③判斷上一級(jí)頁(yè)面。通過(guò)http請(qǐng)求header中的
Referer變量,判斷投票操作的上級(jí)頁(yè)面,可以防止直接發(fā)送請(qǐng)求來(lái)進(jìn)行投票的部分自動(dòng)投票軟件。④判斷是否在微信客戶端上操作。通過(guò)請(qǐng)求頭部信息中的agent變量來(lái)判斷是否在微信客戶端中打開(kāi)投票頁(yè)面。拒絕非微信客戶端上的請(qǐng)求,以防止部分自動(dòng)投票軟件。⑤判斷IP地址或MAC地址,通過(guò)獲取用戶的IP或MAC地址,限制用戶的刷票行為。
1.2? 技術(shù)缺陷
對(duì)于①OpenID驗(yàn)證技術(shù),一般投票平臺(tái)都會(huì)同時(shí)承接多項(xiàng)投票業(yè)務(wù),如果其中一項(xiàng)投票的投票日志記錄了投票者的OpenID,并且發(fā)生了泄露,或者投票者通過(guò)偵聽(tīng)網(wǎng)站的手段獲得了OpenID,那么刷票者便可以借用這些OpenID刷本站其他項(xiàng)投票業(yè)務(wù)的票。
對(duì)于②限制關(guān)注公眾號(hào)才能投票,刷票者如果擁有大量微信賬號(hào),完全可以用一些“按鍵精靈”或者更高級(jí)的方法,模擬用戶手動(dòng)關(guān)注公眾號(hào)后再進(jìn)行刷票。并且,關(guān)注公眾號(hào)本身就有吸引粉絲的嫌疑,勢(shì)必招來(lái)用戶的厭惡。
對(duì)于③判斷上一級(jí)頁(yè)面和④判斷是否在微信客戶端上操作,這兩種方法更不值得一提,③的方法,通過(guò)抓包,觀察投票時(shí)上一級(jí)頁(yè)面的特點(diǎn),即可破解[2]。而④的方法,可以直接用爬蟲(chóng)模擬User-Agent頭就可以輕松破解[3]。
對(duì)于⑤判斷IP地址或MAC地址,現(xiàn)有IP代理和偽裝MAC地址的技術(shù)已經(jīng)使這兩種方法不堪一擊。
同樣,還有一些防刷票的方法,它們或者可以被輕松模擬破解,或者搜集了過(guò)多的用戶信息[4],大大增加了用戶投票程序的復(fù)雜度,對(duì)正常投票用戶比較不友好,而且如果服務(wù)器不夠安全,有很大的個(gè)人隱私泄露風(fēng)險(xiǎn)。
2? 微信支付設(shè)計(jì)模式
移動(dòng)支付由于其便捷性與安全性,一直以來(lái)廣受用戶青睞。微信平臺(tái)的支付系統(tǒng),由于其成熟的操作流程,同時(shí)依托其強(qiáng)大的社交網(wǎng)絡(luò),成為移動(dòng)支付市場(chǎng)的一方壟斷者。
微信支付的流程如下。
2.1? 預(yù)處理階段
商戶平臺(tái)首先生成付款圖文消息鏈接或二維碼,并將其展示給用戶。
當(dāng)用戶點(diǎn)擊消息或掃描二維碼后,將在微信內(nèi)置瀏覽器中打開(kāi)商戶H5頁(yè)面,同時(shí)微信客戶端在網(wǎng)頁(yè)內(nèi)請(qǐng)求生成支付訂單。
隨后商戶后臺(tái)系統(tǒng)自動(dòng)生成商戶訂單,并調(diào)用統(tǒng)一下單API,微信支付系統(tǒng)生成預(yù)付單隨后返回信息給商戶后臺(tái)系統(tǒng)。
商戶后臺(tái)系統(tǒng)生成JSAPI頁(yè)面調(diào)用的支付參數(shù)并簽名,將prepay_id, paySign等支付參數(shù)反饋到微信客戶端。
2.2? 發(fā)起支付
當(dāng)用戶點(diǎn)擊發(fā)起支付后,微信客戶端將向微信支付系統(tǒng)JSAPI接口請(qǐng)求支付,微信支付系統(tǒng)將檢查參數(shù)合法性和授權(quán)域權(quán)限,通過(guò)后便會(huì)返回驗(yàn)證結(jié)果,并要求支付授權(quán)。此時(shí)微信客戶端便會(huì)提示用戶輸入密碼。
2.3? 確認(rèn)支付
當(dāng)用戶輸入了支付密碼,微信客戶端便會(huì)直接向微信支付系統(tǒng)提交支付授權(quán),微信支付系統(tǒng)會(huì)驗(yàn)證支付授權(quán),并分別向微信客戶端和商戶后臺(tái)系統(tǒng)發(fā)送支付結(jié)果消息。
具體流程如圖1所示。
2.4? 退款
當(dāng)用戶誤操作或者因其它原因需要退款之時(shí),商戶可以通過(guò)微信支付API提交退款申請(qǐng),退款狀態(tài)變化如圖2所示。
3? 基于微信支付平臺(tái)的在線投票系統(tǒng)
系統(tǒng)將借用微信支付模式,采用“客戶端——投票服務(wù)器——第三方驗(yàn)證服務(wù)器”的構(gòu)架,將微信支付系統(tǒng)作為第三方驗(yàn)證服務(wù)器,每次投票時(shí)用戶需向投票支付系統(tǒng)支付象征性的費(fèi)用(如1毛或1分),同時(shí),當(dāng)系統(tǒng)將投票支付訂單號(hào)記錄在案,對(duì)訂單號(hào)產(chǎn)生賬號(hào)進(jìn)行判斷,如果該賬號(hào)已經(jīng)投過(guò)票,則將投票記為無(wú)效,并發(fā)起退款,如果該賬號(hào)尚未投票,則立刻發(fā)起退款,如退款成功則將用戶的投票標(biāo)記為有效,并記錄在數(shù)據(jù)庫(kù)中,否則標(biāo)記為無(wú)效,來(lái)確保支付信息在傳輸過(guò)程中不被篡改。這樣設(shè)計(jì)的用戶投票支付系統(tǒng)既具有可靠性(只要微信服務(wù)器不出故障),又同時(shí)具有方便性,因?yàn)槿缃褚苿?dòng)支付的普及性。此外,微信支付需要實(shí)名認(rèn)證,且同一個(gè)身份證最多只可認(rèn)證5名用戶,這讓那些刷票者手中大量未經(jīng)實(shí)名認(rèn)證的微信號(hào)頓時(shí)無(wú)用武之地,大大提高了投票的實(shí)名性,杜絕了大量刷票的行為。
投票結(jié)束后,系統(tǒng)還將自動(dòng)核對(duì)每一個(gè)訂單號(hào)的真實(shí)有效性,防止數(shù)據(jù)發(fā)生篡改。
這樣的投票系統(tǒng)還將投票服務(wù)范圍增加到了線下,使用時(shí),只需掃描二維碼,向你想要投票者支付象征性的費(fèi)用,就可以為你的理想候選者投上您神圣的一票。
本投票系統(tǒng)工作流程如下:
3.1? 預(yù)處理階段
首先,同一般微信支付付款流程,本系統(tǒng)首先生成投票圖文消息鏈接或二維碼,并將其展示給用戶。
當(dāng)用戶點(diǎn)擊消息或掃描二維碼后,將在微信內(nèi)置瀏覽器中打開(kāi)投票目標(biāo)的詳細(xì)信息頁(yè)面,同時(shí)微信客戶端在網(wǎng)頁(yè)內(nèi)請(qǐng)求生成投票訂單。
隨后商戶后臺(tái)系統(tǒng)自動(dòng)生成投票訂單,并調(diào)用統(tǒng)一下單API,微信支付系統(tǒng)生成預(yù)付單隨后返回信息給投票系統(tǒng)。
投票系統(tǒng)生成JSAPI頁(yè)面調(diào)用的支付參數(shù)并簽名,將prepay_id, paySign等支付參數(shù)反饋到微信客戶端。
3.2? 發(fā)起投票
當(dāng)用戶點(diǎn)擊發(fā)起投票后,微信客戶端將向微信支付系統(tǒng)JSAPI接口請(qǐng)求支付,微信支付系統(tǒng)將檢查參數(shù)合法性和授權(quán)域權(quán)限,通過(guò)后便會(huì)返回驗(yàn)證結(jié)果,并要求支付授權(quán)。此時(shí)微信客戶端便會(huì)提示用戶輸入密碼[8]。
3.3? 確認(rèn)投票成功
當(dāng)用戶輸入了支付密碼,微信客戶端便會(huì)直接向微信支付系統(tǒng)提交支付授權(quán),微信支付系統(tǒng)會(huì)驗(yàn)證支付授權(quán),并分別向微信客戶端和投票系統(tǒng)發(fā)送支付結(jié)果消息。投票系統(tǒng)在收到消息后會(huì)立刻發(fā)起退款,稍等片刻后,如果微信支付系統(tǒng)確認(rèn)退款成功,則將支付訂單號(hào)記錄在數(shù)據(jù)庫(kù)中,以備校驗(yàn)[9],同時(shí),向用戶發(fā)送提示,確認(rèn)投票成功。
3.4? 投票最后校驗(yàn)
當(dāng)投票結(jié)束,系統(tǒng)立即開(kāi)始查詢保存在微信服務(wù)器上的歷史交易訂單號(hào),并和投票系統(tǒng)服務(wù)器本地進(jìn)行同步,防止投票系統(tǒng)被入侵篡改[10]。
4? 結(jié)束語(yǔ)
微信支付與網(wǎng)絡(luò)投票相結(jié)合,經(jīng)過(guò)巧妙的設(shè)計(jì),有效解決了投票實(shí)際使用過(guò)程中出現(xiàn)的問(wèn)題,實(shí)現(xiàn)了投票結(jié)果可追溯。最終實(shí)現(xiàn)了投票系統(tǒng)的安全、公平、公正,并且較好地利用了現(xiàn)有資源,降低了開(kāi)發(fā)成本。
參考文獻(xiàn)
[1]肖卓明, 陳寧. 網(wǎng)絡(luò)投票防刷票技術(shù)探討[J]. 科技與創(chuàng)新, 2018, 20: 64-65.
[2]符天, 汪志, 王貞. Web服務(wù)的SQL注入攻擊及防御研究[J].軟件, 2018, 39(4): 44-47.
[3]胡云峰, 陳皖芬. 偽造HTTP請(qǐng)求報(bào)文協(xié)議頭對(duì)網(wǎng)絡(luò)投票系統(tǒng)刷票的可行性研究[J]. 文山學(xué)院學(xué)報(bào), 2012, 25(6): 69-71.
[4]吳三柱. 在線投票系統(tǒng)中防刷票技術(shù)研究[J]. 價(jià)值工程,2018,22:203-204.
[5]騰訊. 微信支付開(kāi)發(fā)文檔[OL]. (2019-01-10)[2019-01-21]. https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4.
[6]騰訊. 微信支付開(kāi)發(fā)文檔[OL]. (2019-01-10)[2019-01-21]. https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5
[7]Kosba A, Miller A, Shi E, et al. Hawk: The blockchain model of cryptography and privacy-preserving smart contracts[C]. Security and Privacy (SP), 2016 IEEE Symposium on. IEEE, 2016: 839-858.
[8]騰訊. 微信支付開(kāi)發(fā)文檔[OL]. (2019-01-10)[2019-01-21]. https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1.
[9]黨京, 孫弋. 基于區(qū)塊鏈的電子投票系統(tǒng)關(guān)鍵技術(shù)的實(shí)現(xiàn)[J]. 軟件,? 2018, 39(11): 140144.
[10]李靜彧, 李兆森. 基于區(qū)塊鏈存證的電子數(shù)據(jù)真實(shí)性探討[J]. 軟件, 2018, 39(6): 109-112.