Re: [新聞] 抽獎被抓包!網友攤開程式碼 發現大獎根本抽不到消失

看板Gossiping作者時間8年前 (2015/12/20 21:53), 8年前編輯推噓7(8119)
留言28則, 15人參與, 最新討論串7/8 (看更多)
※ 引述《flydragon198 (Richard)》之銘言: : ※ 引述《dick58582001 (TwMarco)》之銘言: : : http://tinyurl.com/zcef2qe 三立 : : 抽獎被抓包!網友攤開程式碼 發現大獎根本抽不到 : : 網路抽獎活動現在非常盛行,近日,東森購物網舉辦了「絕讚iPhone轉轉樂」的抽獎活動 : : ,許多網友都衝著豐富的獎品參加該抽獎活動。但就有網友在臉書上爆料,該抽獎活動完 : : 全抽不到大獎,因為把程式碼打開來看,裡面的程式早已設計好;該消息一出,引發許多 : : 網友熱議,大呼「太讓人驚呆了!」事後,東森購物網也發文致歉,表示是設定時誤植才 : : 釀成這樣的烏龍。 : : 「絕讚iPhone轉轉樂」的抽獎獎品相當吸睛,包括iPhone6S的1元券、2000元折價券等, : : 但網友就踢爆,這些大獎通通都抽不到,因為這個抽獎的程式碼裡,早就設計好!消息一 : : 出,引起許多網友討論,直說:「太過分了!」另外,曾任柯文哲競選團隊網路部工程師 : : 的王景弘(TonyQ),也在臉書上表示,該程式寫了幾種對應結果,但偏偏沒寫到一元券 : : 的結果,這也代表,主辦單位根本沒想讓人有機會中獎;更有網友搞笑的說,如果這樣騙 : : 人的廣告還能有iPhone中獎者的話,就更好笑了,因為就證明他是「內定的」。 : : 消息曝光後,ETMall東森購物網已在臉書道歉,他們表示,這次抽獎活動的獎品機率,是 : : 設定程式時的失誤,而為了表達歉意,他們也提出彌補辦法,希望可以平息大家的怒氣。 : 稍微簡單講解一下這個程式碼給不懂程式碼的人看 : funtction lastto(returncode) //玩這個遊戲,後端系統會回傳一個數字 : { : if(parseInt(returncode) == -99) //如果回傳的數字是-99,會顯示系統忙碌 : { : alert("系統忙碌中,請稍候再試!"); : } : else if (parseInt(returncode) == -1) : { : alert("現在非活動期間內!"); : } : else if (parseInt(returncode) == 1) //如果回傳1,應該是會顯示折價300 : { : showPopWin('../R6Images/facebook/FB_iphone/300.html',250,345,'',true); : } : else if (parseInt(returncode) == 2) //如果回傳2,應該是會顯示折價500 : { : showPopWin('../R6Images/facebook/FB_iphone/500.html',250,345,'',true); : } : else if (parseInt(returncode) == 3) //如果回傳3,應該是會顯示折價800 : { : showPopWin('../R6Images/facebook/FB_iphone/800.html',250,345,'',true); : } : else if (parseInt(returncode) == 4) //如果回傳4,應該是會顯示折價2000 : { : showPopWin('../R6Images/facebook/FB_iphone/2000.html',250,345,'',true); : } : else : { : alert("每人只能玩一次囉!"); : } : jQuery('#popupTitleBar').css('padding-top','0') : isPlayer = -25; : } : 所以只有回傳上面這些數字會顯示出來對應的訊息或網頁[B,例如300折價券 : 如果returncode回傳5,6,[B7,8這些,都會跳出"每人只能玩一次囉!" : 再怎麼抽獎都就是上面那些結果,所以 : 誤植?少屁了,就剛好只把折價部分的程式碼寫出來,最好會是誤植 : 我是不知道你們信不信啦,總之我是信了XDDDDDDDDDDDDDDD 誤植 不好意思,本魯只是個因為興趣使然會寫點程式的小嫩咖 有幾個問題想請教專業的大大............ 這個判斷系統回傳數字與對應獎項的程式,有必要寫到那麼多個if判斷式嗎? 可不可以先定義一個類似hash or dictionary 的物件,包含可能對應的結果 e.g. returncodes = {'-99':'系統忙碌中,稍後在式','-1':'現在非活動期間內', \ '1':'/xx/xx/1.img','2':'/xx/xx/2.img', '3':'/xx/xx/3.img'} 然後透過程式下列程式碼,來print出回應 value = returncode() #get returncode from server value = str(value) #change variable type from int to string if str(value) in returncodes.keys(): print(returncodes[value]) else: print ('每人只能完一次') 這樣程式碼應該會比較簡潔,要擴充獎項也會容易許多, 只要把要擴充的獎品,加到hashable的物件裡面就可以了。 不知道實務上,這樣做會有怎樣的缺點? 第二個問題是,實際在開發這種樂透app時, 從伺服器端要一個returncode, 然後由使用者終端這裡判斷程式,給出對應獎項是很正常的作法嗎? 因為如果使用者懂得root手機,就可以看到程式碼, 使用者只要偽造一個回傳的值,就可以欺騙程,拿到自己想要的特定獎品。 顛倒過來,把判斷獎項的程式嗎,放在伺服器端, 由終端這裡,送出一個returncode不是安全許多? 終端這裡的程式碼只要類似這樣就可以了: retuncode = random(0, 10000) #從0~10000之間隨機選取一個數字 prize = send(returncode, servername) #把returncode傳給伺服器,並得到伺服器的回傳值 print (prize)[B 而伺服器那邊要寫一個接受終端發出的returncode的程式 和判斷獎項的程式: prizes ={'one':'count 100', 'two':'count 200'; 'three':'count 300'\ 'ip:'iphone[D' } if prize in prizes: send(prinzs[prize], terminal_name) else: send('Nothing', terminal_name) 這樣也不比較不用擔心程式碼曝光。 這是本魯的一點粗淺想法,希望有高手可以分享一下實物上的作法 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.136.176.152 ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1450619635.A.86F.html

12/20 21:55, , 1F
對應到另一個table或database 沒有寫在code裡的
12/20 21:55, 1F

12/20 21:56, , 2F
先推不然別人以為我看得懂
12/20 21:56, 2F
※ 編輯: sexyrickysky (140.136.176.152), 12/20/2015 21:58:33

12/20 21:57, , 3F
你對工讀生的要求太多了
12/20 21:57, 3F

12/20 21:58, , 4F
假設錯誤 因為就沒有要放別的獎項XD
12/20 21:58, 4F

12/20 21:58, , 5F
嗯嗯,最後一行實務誤植為實物,其他跟我想得差不多
12/20 21:58, 5F

12/20 22:00, , 6F
工讀生會的話還會只當工讀生嗎?
12/20 22:00, 6F

12/20 22:00, , 7F
烏龍企畫的機率很高 寫在code裡還不能控制中獎數
12/20 22:00, 7F

12/20 22:01, , 8F
全部寫在sever端就好 造假也沒人知道
12/20 22:01, 8F

12/20 22:02, , 9F
樓上 中獎數不重要 這邊重點是給你折價卷誘使繼續買
12/20 22:02, 9F

12/20 22:02, , 10F
看不懂
12/20 22:02, 10F

12/20 22:03, , 11F
除了被發現以外 這個企劃和獎品設計沒啥問題
12/20 22:03, 11F

12/20 22:06, , 12F
給你折價卷快點買的概念
12/20 22:06, 12F

12/20 22:07, , 13F
最好回應訊息,處理程序都在後端...怎可以在前端處理這事?
12/20 22:07, 13F

12/20 22:10, , 14F
講中文好嗎QQ
12/20 22:10, 14F

12/20 22:10, , 15F
沒減少就要偷笑了 還增加勒
12/20 22:10, 15F

12/20 22:13, , 16F
一看就覺得是趕鴨子上架的寫法 太露骨了就好像沒穿衣服
12/20 22:13, 16F

12/20 22:15, , 17F
第一點非常合理 這才是最快的寫法
12/20 22:15, 17F

12/20 22:15, , 18F
第二點基本上沒有擔心的必要 redirect的網址只有給使用者
12/20 22:15, 18F

12/20 22:16, , 19F
確認獎項的功能而已 而實際上很有可能那幾個頁面發出的API
12/20 22:16, 19F

12/20 22:16, , 20F
都是同一隻 之後伺服器會用使用者的登入token去判斷上一隻
12/20 22:16, 20F

12/20 22:17, , 21F
API抽到了什麼獎 再回給前端兌換用的代碼或QRcode等等
12/20 22:17, 21F

12/20 22:18, , 22F
他這邊硬要導一頁個人認為也蠻蠢的 直接把body的內容換掉
12/20 22:18, 22F

12/20 22:18, , 23F
又快又簡單 還省下中間讀取和多發一次API的時間
12/20 22:18, 23F

12/20 22:20, , 24F
如果他中獎的判斷真的是用不同的頁面去看而沒有對之前的
12/20 22:20, 24F

12/20 22:20, , 25F
如果他中獎的判斷真的是用不同的頁面去看而沒有對之前的
12/20 22:20, 25F

12/20 22:20, , 26F
結果作比對的話 那真的是蠢到有點誇張
12/20 22:20, 26F
有點專業,看了好多次稍微搞懂。 所以您的意思是不是指, 他的終端這裡的樂透原始程式碼只是將使用者轉到特定網頁, 告訴使用者得到什麼獎項,真正的折價券之類的代碼或序號, 還是由伺服器這裡發出。 就算我偽造一個retuncode,欺騙終端程式, 我雖然看到了得獎畫面,可是我實際上是沒有拿到真正可以用的折價卷序號? 而終端這裡樂透程式,實際上可以不用寫, 只要寫一個程式,在接收伺服器發出的折價券代碼的同時, 也將使用者得獎的畫面show出來就好? ※ 編輯: sexyrickysky (140.136.176.152), 12/20/2015 22:29:29

12/21 13:01, , 27F
可讀性
12/21 13:01, 27F

12/21 13:01, , 28F
才沒幾樣幹嘛弄個Map
12/21 13:01, 28F
文章代碼(AID): #1MThBpXl (Gossiping)
討論串 (同標題文章)
完整討論串 (本文為第 7 之 8 篇):
文章代碼(AID): #1MThBpXl (Gossiping)