robot
最新文章(10)
這並不是一個創新
Tossug 2/9 SVG 加 XBL 分享
SVG and XBL No Widget
OpenSource 與嵌入式系統
Internet 的工人智慧
GCC Spec Files
Android Native code 的繪圖方法
Android Native code 不用 NDK
基於隱私的一種 DRM
Build Android SDK on FreeBSD
首頁
新編
最新留言
Entries RSS
重要關鍵字(10)
coding (120)
Python (93)
FreeBSD (71)
WEB (61)
雜記 (48)
URL (48)
hardware (46)
javascript (36)
Linux (31)
blog (30)
所有關鍵字
新增 URL
登入 Yahoo! 奇摩
by thinker
2 Columns
關鍵字:
coding
科技進步,電腦和網路幫我們節省不少時間,許多重複的動作和遠距離的資料交換,都因科技而獲解決。但是,因為私人策略和利益因素,人們設下許多的障礙,讓原本有機會更方便的服務無法更進一步。 因為家人在做網拍的關係,發現拍賣網站提供的服務並不周延,造成使用上的不方便。於是我希望能透過 script,讀取網路上的資料,以提供更方便、更有效的工具。要讀取拍賣網站,最大的阻礙是登入。有些私人資料需要登入之後才能取得,因此 script 要能登入網站,才能正確的動作。 登入麻煩的地方,在於需要記錄許多的 cookie 和傳遞資料。最怕的是使用 script 傳遞資料,吾人實在沒有時間去模擬一個 $javascript$ 的環境。還好,這次的目標 Yahoo! 奇摩並沒有複雜的使用 $javascript$。 == Javascript == 在 Yahoo! 奇摩的登入畫面可以看到一個 form [attach:yahoologin.png] 如果你直接 submit 該 form,會啟動一段 $javascript$,讓 browser 連接 {{{ http://edit.tpe.yahoo.com/config/login?.intl=tw&sr........ }}} 這樣的網址。如果你仔細看一下 form 的內容,原來是使用 POST 的 HTTP command 將資料傳送到 http://tw.login.yahoo.com/cgi-bin/login.cgi 。而且,如果你仔細看 $javascript$ 的內容,也會發現如果遇到非 Netscape 4.0 以上的 browser,會改用該 form,而不是重新組出一串 $URL$,使用 GET 的方式傳送資料。事實上,現在的 Yahoo! 奇摩不支援 NS 4 以下的 browser。試著將 browser 的 $javascript$ support 關掉,就會發現根本無法登入。從 $javascript$ 來看,如果使用不到 NS 4 的版本,會直接 submit 該 form,就和關掉 $javascript$ 一樣。 == MD5 == 除此之外, form 面有一個名為 .challenge 的 object,用來存放一段每次都會變動的亂數。個人猜想,這個亂數主要是保護 passwd 的內容,避免傳輸過程被攫取。passwd 的內容必使用下面方式編碼: {{{ passwd = MD5(MD5(passwd) + .challenge) }}} 因此,每次 login 時,都要先取得 login 畫面,parse form 內部所有的 object 的值,然後做一些計算。另外還需要加入下面的 object {{{ .intl=tw .hash=1 .js=1 .md5=1 }}} 這些都是必需傳送出去的 form object 內容。 == cookie == 如果你將 browser 的 cookie 清空,在第一次 submit 登入畫面時,會出現下面畫面,要你再登入一次: [attach:firstlogin.png] 這個就是要防止你我這樣的 $robot$ 製造者 :) 其實,你只要使用其它 browser 登入之後,讀取 Yahoo! 奇摩所送出的 cookie {{{ F=a=6U7Wk.csvSTKBsYAURj........ }}} 讓你的 script 送出這段 cookie,就可以順利 login 了。這種方式,就是要防止 $robot$ 的使用。 == 結論 == 之後只要將 login 之後所取得的 cookie 送出,就可以順利取得登入帳號的資料。所謂「道家一尺,魔高一丈」再複雜的防制措施,也只能防君子。
最後更新時間: 2006-06-25 10:47:50 CST |
引用
查詢:
COMMENTS: