2011-03-27 51 views
1

我試圖從Natwest的網上銀行服務中使用PHP/cURL提取信息 - 這個想法是,如果它實際上可以做,那麼我可以做一個更加移動化的網站,訪問該服務的友好站點,或者可能是Android應用。cURL和刮檢查框架支持的網站

這些頁面顯然使用了一些涉及Javascript,框架集和誰知道還有什麼的安全功能。據我所知,Javascript中沒有cookie操作(我可以看到),但是頁面源代碼中生成的URL發生了一些事情......並且每當我嘗試查看將成爲部分的頁面時cURL只顯示框架集頁面。如果我在請求登錄頁面時選擇不遵循重定向,我只會收到一條消息,指出「對象已移動」 - 並指向框架集頁面的鏈接。任何想法,我要去錯了嗎?

<? 

$ckfile = tempnam ("/tmp", "COOKIE"); 

// INITIAL REQUEST TO SITE TO GET COOKIE 

$ch = curl_init(); 

$userAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)" 
    . "AppleWebKit/534.16 (KHTML, like Gecko) " 
    . "Chrome/10.0.648.151 Safari/534.16"; 

curl_setopt($ch,CURLOPT_USERAGENT, $userAgent); 
curl_setopt($ch, CURLOPT_URL, 'http://www.nwolb.com'); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_AUTOREFERER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
$data = curl_exec($ch); 


// EXTRACTING OTHER POSS REDIRECTS/FRAMESET URLs FROM RESULTING PAGE... 

// A Javascript function on the default.aspx page specifies a 
// top.window.document redirect, I store this in $newurl in case it's needed 
preg_match('/top\.window\.document\.location\.href = \'(?P<url>.*)\';/', $data, $newurl); 

// It's the login page I want, the Frameset page does specify a link, 
// but (what I assume is) the frame-breaking protection sends me back to 
// the frameset page every time... 
preg_match('/login.aspx\?(?P<referer>.*)"><\/frame>/', $data, $loginurl); 

//Subsequent request, attempting to bring up the login page 
curl_setopt($ch, CURLOPT_URL, 'https://www.nwolb.com/login.aspx?' . $loginurl['referer']); 
$data = curl_exec($ch); 

curl_close($ch); 

?> 

這是一個值得放棄的實驗,還是可能實現? PHP是這份工作的正確工具嗎?或者,試試像Ruby上的Watir這樣的產品會更好嗎?

回答

1

只因爲你可以並不意味着你應該。銀行業務受到嚴格監管,通過提供刮刮銀行網站的應用程序,您本質上是提供銀行服務,並且可能會發現自己與銀行一樣受到監管 - 更不用說爲通過您的應用程序發生的任何違規承擔責任。

您也將違反Natwest的服務條款,任何刮擦其(或任何其他銀行)網站的應用程序很可能會發現自己很快就被起訴不存在。

也就是說,如果你真的想刮這個網站,你應該看看底部的「輔助功能」鏈接。屏幕閱讀器和屏幕刮屏之間沒有太大區別。

+0

嗯,你養好指出我將通過代理提供銀行服務的事實,並且可能很快就會被關閉/被起訴。我其實並沒有想到... 我不會經歷它。如果有解決方案,我仍然對解決方案感興趣...純粹是因爲你永遠不知道將來會出現什麼。您提到的「輔助功能」鏈接基本上告訴人們,該網站與具有輔助功能選項的瀏覽器/操作系統兼容,並且如果聽力困難,他們可以使用電話服務。 – t0mgerman 2011-03-27 04:09:39

+0

哎呀 - 你是對的。我誤以爲「加載可訪問性頁面」功能意味着「爲屏幕閱讀器加載頁面」而不是其實際內容 - 「加載說'我們支持屏幕閱讀器'的頁面」。但策略是合理的 - 如果您發現支持移動設備或屏幕閱讀器的頁面,他們通常對iframe,腳本,嵌入式媒體等的依賴程度要低得多。 – 2011-03-27 04:23:39

0

是的,肯定可以自動執行此操作。但是,當銀行決定在未來更新其網站時,您的服務可能會中斷。

要找出需要什麼數據嘗試使用類似TamperDataHttpFox的Firefox擴展來監控您的登錄。 然後複製腳本中所有必需的數據和標題。確保設置用戶代理和引用標頭,因爲它們通常是必需的。

0

get_browser - 告訴一下用戶的瀏覽器能夠

<?php 
$browser = get_browser(null, true); 
print_r($browser); 
?> 

上例的輸出類似於:

Array 
(
    [browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) 
    [browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) 
    [parent] => Firefox 0.9 
    [platform] => WinXP 
    [browser] => Firefox 
    [version] => 0.9 
    [majorver] => 0 
    [minorver] => 9 
    [cssversion] => 2 
    [frames] => 1 
    [iframes] => 1 
    [tables] => 1 
    [cookies] => 1 
    [backgroundsounds] => 
    [vbscript] => 
    [javascript] => 1 
    [javaapplets] => 1 
    [activexcontrols] => 
    [cdf] => 
    [aol] => 
    [beta] => 1 
    [win16] => 
    [crawler] => 
    [stripper] => 
    [wap] => 
    [netclr] => 
) 

refrence:PHP手冊