1. 故事回顧
這些天,微博上有很多人在試着使用這個辦法耍流氓看能不能買到下鋪火車票, 更有人公然發帖說自己成功拿到了火車票,如下圖所示:
於是,出於好奇,我也從代碼層面看了一下,到底發生了什么?這到底是偽技術帖還是真屌絲逆襲?!
2. 技術分析
首先,使用瀏覽器定位元素,我用的辦法就是用chrome右鍵審查元素,找到席別下面的dropdownlist,然后下面有一個把隱藏的dropdown list ,把樣式從nono 改成了block, 當然,如果onchange 方法后面如果有disable 的話,
也刪掉。IE應該不用,因為壓根不支持。東西就出來了, 好,終於說完,下面說正題。
從代碼里可以看到,onchange="selectSeatDetail('1')方法,默認選的值是1進去,其實,他只是為了給下面我選的input 初始化值用。
// 設置鋪別隱藏域的值 function setSeatDetail(index) { $("#passenger_" + index + "_seat_detail").val( $("#passenger_" + index + "_seat_detail_select").val()); }
具體的資源文件如下圖,而同時,微博網友們看到的神算法其實不過是一個設置和生成上下鋪dropdownlist 的代碼(不過光從注釋看來,還真挺唬人的,代碼我就不解釋了,懶得解釋,自己看),
根本不是什么用以計算生成你是上中下鋪的算法代碼, 而碼農我堅信,真正的隨機算法,應該TMD也必然TMD的在后台(有不同意見的人拿有事實有根據的磚了拍)。這是我試過兩次之后得到的結果,
當然,也會出現下鋪,但我認為這就是運氣好而已。
嗯,解決這個問題之后,再看看最終表單提交的方法。subit_form_confirm, 光從字面和注釋判斷,恐怕這還不是算隨機鋪位的地方,雖然這里有一個URL指向了一個 webservies ,方法名叫:checkorderInfo。
這只不過是表單提交前確認操作,的那也就意味着,進一步的動作,是從服務器端完成的。
、
當然,有人問了,動動手腳,直接傳想要的值給webserves, 好吧,看看下面這個警告。
補充內容: 感謝樓下的朋友提醒,我也受教了,於是專門去查閱了一些關於跨域的資料,但是我必須得強調,這篇分析文章只是針對網友發的那一篇所謂的技術帖,討論的也只是它的辦法到底行不行。
回到正題,所謂的javascript 跨域問題,有如下四種:
- JSONP跨域GET請求
- 通過iframe實現跨域
- flash跨域HTTP請求
- window.postMessage
我想樓下大放厥詞的朋友,大概說的是第四種,直接通過IE8實現跨域,當然同時我也懷疑你是這個帖子的擁護者,是不是真的用它買到了下鋪?誰試誰知道。且不說,以下四種都涉及到安全問題,對方完全可以白名單,過濾掉不安全頁面信息,只做單純分析。
先說JSONP(json with padding),需要有格式限制,你不知道另一域的格式,怎么約定格式? 不行!
第二種,iframe 實現跨域,會留下歷史記錄,我還不想死! 不行!
第三種,第四種,基本不用考慮,因為在接收的窗口,需要設置一個事件處理函數來接收發過來的消息,顯然這不可能成功。
好了,至此,我想我的結論已經得出了,從我的分析看來,這個所謂的技術帖, 是一個不折不扣的偽技術帖!鑒定完畢!