研究投票實(shí)踐

背景

最近接觸到一個(gè)投票,怎么才能用技術(shù)的手段投票呢?這是我思考的問題。

Part 1

思考

  • 直接通過抓包查看接口能不能通過直接訪問接口達(dá)到目的?

步驟

  • 通過分享的鏈接抓取到投票詳情頁的
url =http://h5.thepage.cn/economicVote/detail.htmlcid=5a3371b85ab34500e2302574&vid=5a41f55c308cc6063331c901&type=yxlrw

現(xiàn)在我們拿取到詳情頁面,更方便操作。(直接訪問這個(gè)鏈接就可以進(jìn)行投票)

  • 通過抓包工具抓取到投票的接口
http://cloud.thepage.cn/vote?cid=5a3371b85ab34500e2302574&vid=5a41f55c308cc6063331c901&userid=89E08C9B639B0BE3A3D8D75378D0C798&userinfo=%7B%22origin%22%3A%22wx%22%2C%22token%22%3A%2289E08C9B639B0BE3A3D8D75378D0C798%22%2C%22headimgurl%22%3A%22http%3A%2F%2Fwx.qlogo.cn%2Fmmopen%2Fvi_32%2Fw1GXda9T4TUic2oKiab8xlWU69xAlHYU0XwGT3oX5AqYicbyjiarDYJvSFQvkMOuogoQw1KOuthdePrImQtiaDt0LzQ%2F0%22%2C%22nickname%22%3A%22%E5%94%A7%E5%94%A7%E5%8F%BD%22%2C%22sex%22%3A1%7D&aid=5a33710f0c83b900cf376354&nonceStr=2supuuyfte&timestamp=1514447634411&sign=FA677FD78F3F611FC62E76787B8916DC&_=1514447634413&callback=Zepto1514447626658

現(xiàn)在我們已經(jīng)拿到了投票的接口,試試我們能不能通過再次請求接口投票呢。

答案是:不行的!
1.png
  • 那么我關(guān)掉網(wǎng)頁可以再次投票嗎?答案是肯定的。(已修復(fù))

結(jié)論

  • 直接通過抓包查看接口不能通過直接訪問接口達(dá)到目的,但是我們可以通過重新就讓網(wǎng)頁達(dá)到目的。

Part 2

思考

  • 為什么直接訪問不行,那么而重新訪問頁面后就成功了?

步驟

  • 研究發(fā)現(xiàn)在關(guān)掉后再次請求的過程中其實(shí)變化的只是其中的token,nonceStr,timestamp,sign。那么token,nonceStr,timestamp,sign是從哪兒來的呢?

nonceStr和timestamp解密

  • 拿取網(wǎng)頁的js,查看頁面邏輯。在小超的幫助下其中一段代碼引起了我們的注意:
request: function(e, t, n) {
        var i = Math.random().toString(36).substr(2, 10);
        var r = (new Date).getTime();
        a.nonceStr = i;
        a.timestamp = r;

很容易能夠看出來nonceStr 是 生成十位字母加數(shù)字隨機(jī)數(shù)(所以可以猜想這個(gè)本生就是隨機(jī)的,后臺是不會做驗(yàn)證的)。
而timestamp就是現(xiàn)在的時(shí)間戳(后臺也不會驗(yàn)證)。
可以發(fā)現(xiàn)這2個(gè)參數(shù)是可以按照規(guī)則隨意修改的。

sign解密

  • 繼續(xù)解密js,在小超的幫助下這極端代碼引起了我們的注意:
     delete a.sign;
     var o = this.asciiSort(a);
     var s = md5(o).toUpperCase();
     a.sign = s;

很明顯sign在最后應(yīng)用之前是有asciiSort方法生成,然后再做MD5轉(zhuǎn)換,而帶入方法的參數(shù)就是刪除掉sign字段的a。

asciiSort: function(e) {
        var t = Object.keys(e);
        t = t.sort();
        var n = {};
        t.forEach(function(t) {
            n[t] = e[t]
        });
        var i = "";
        for (var r in n) {
            i += "&" + r + "=" + n[r]
        }
        i = i.substr(1);
        return i
    },
  • Bingo!
    所以sign的加密方式,就是把a(bǔ)的sign字段刪除后,按照asciiSort方法排序后,MD加密并轉(zhuǎn)換為大寫。

現(xiàn)在就差token了

token解密

  • 同樣這次在小詩,小彰和小奇的幫助下,了解了token生成的原理。


    2.png
  • 根據(jù)其判斷邏輯,其實(shí)這個(gè)token是通過微信接口返的code(這個(gè)其實(shí)是微信的授權(quán),類似返回的用戶令牌),然后再通過本地請求后臺接口/weixin/get,生成的。

  • 從新打開頁面能夠投票,最關(guān)鍵是因?yàn)閠oken變化了。(其他3個(gè)我們都可以自行修改,而token是無法自定義的,它包含微信的驗(yàn)證和本身后臺的驗(yàn)證)

  • 所以我們要完成投票,必須要獲取到token。

Part 3

突發(fā)

  • 本來在研究了幾個(gè)小時(shí)的機(jī)制問題,突然發(fā)現(xiàn)在同一個(gè)賬戶的情況下token不再發(fā)生變化。已經(jīng)不能夠通過之前的方式進(jìn)行投票。

  • 猜想:我們了解到其實(shí)token是有時(shí)效性的,也就是說,如果設(shè)置的時(shí)效性有一段時(shí)間,那么在一定的時(shí)間內(nèi),token是不會變化的。那么我們將不能通過變化的token來發(fā)起投票。

  • 問題:那么我們能夠獲取到其后臺生成token的方法嗎?

答案:暫時(shí)是不行的。

雖然暫時(shí)不能夠通過其他方式投票,但是研究投票實(shí)踐的整個(gè)過程是快樂的?;ㄙM(fèi)少量的時(shí)間獲得一些收獲也是非常值得的。最后再次感謝:小彰,小奇,小超,小詩,小淼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評論 19 139
  • 久違的新文章發(fā)布。。我的鍋這篇文章是在寫的太長,可以慢慢看一下,偽代碼,畢竟簡書上面,望大家見諒?。?!先看官方文檔...
    wyatt_plus閱讀 1,715評論 0 2
  • 引言 秋高氣爽,天氣轉(zhuǎn)涼,正是學(xué)習(xí)工作做的好時(shí)候。(~ ̄▽ ̄)~~(~ ̄▽ ̄)~ 我是個(gè)phper最近在寫微信支付...
    恩就是這個(gè)名閱讀 8,249評論 2 15
  • 傍晚剛好有事去朋友培訓(xùn)中心。剛從五年級晚托班前面走過?!袄蠋?!蔣老師!”轉(zhuǎn)身,發(fā)現(xiàn)小燁像一只大鳥撲過來,滿臉...
    婉葉老師閱讀 1,602評論 4 13
  • 宮崎駿大師的作品都是傳達(dá)愛與善的主題,但每一部都有自己獨(dú)特的風(fēng)格。《龍貓》對于日本動(dòng)畫走向世界具有里程碑的意義,是...
    麻婆電影閱讀 441評論 0 0

友情鏈接更多精彩內(nèi)容