2012-09-17 145 views
11

我有應用。我知道所有的網址,參數,http請求類型等(這是我的應用程序)。攔截Android應用發送的HTTP請求

如何攔截來自應用程序的所有請求?例如 - 我按了一個按鈕,可以看到服務器的請求文本。

任務 - 隱藏潛在黑客的請求,並阻止他代表應用程序執行請求。

+0

我建議使用https或其他加密技術來隱藏潛在黑客的隱藏請求。 –

+0

是的,我知道https – monyag

回答

0

據我瞭解,你的問題包括兩個問題:

如何檢查你的服務器和客戶機之間的流量。

有幾種可能性隨着努力:

  • 記錄:因爲它是你的應用程序,你簡直調用HTTP請求之前插入包含查詢記錄語句和參數。
  • 正在偵聽服務器端:因爲它是您的應用程序,您還可以控制服務器。有了這樣tcpdump工具,你就應該能夠轉儲交通和lateron分析它(例如用Wireshark
  • 聆聽客戶端:如果你想攔截的流量或「旁邊的」客戶端,你可以嘗試使用burpsuite攔截使用代理或直接在您的WIFI流量。

如何確保只有您的客戶可以向服務器發出請求。 我會建議使用https與客戶端身份驗證。您將不得不與您的應用一起推出客戶端證書,然後您的服務器可能會檢查客戶端的真實性。 Here您可以找到相互ssl身份驗證的一般介紹。

0

你並沒有真正澄清爲什麼你是在你的問題中這樣做,但對於其他人:想要這樣做的最好的動機是因爲你害怕你的應用程序是攻擊者的目標因爲他們以某種方式強迫你的意圖(或其他RPC界面)行爲不端。

我可以說這樣做的最好方式是爲您的應用程序提供一個儘可能有限的接口:不允許面向公衆的意圖或RPC接口操縱應用程序發送您不想要的信息。

此外,您可以通過HTTP應用程序中的封裝程序(可能是HTTP應用程序)發送到服務器。問題是,一旦你的信息記錄在客戶端的設備上,你打算用。能夠正確識別應用何時「做壞」的事情幾乎是不可能的,並且預先定義了什麼是「壞」,所以這是錯誤的追求。

因此,即使您可以登錄,並且即使您可以使用HTTPS,我也會說您應該調查攻擊者可以用來操縱應用程序以將數據發送到Web服務的所有途徑:開始位置你實際上發送數據,並通過應用程序後退工作!

0

擴展WebViewClient,我推翻方法shouldOverrideUrlLoading如下:

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 

    String mainPage = "https://www.secureSite.com/myData/"; 

    if (url.startsWith(mainPage)) { 
     view.loadUrl(url); 
     return false; 

    } else { 

     //some dialog building code here 

     view.stopLoading(); 
     return false; 
    } 
} // end-of-method shouldOverrideUrlLoading 

所以這段代碼的一點是,它評估您的應用程序開始加載每個URL。如果用戶找到鏈接或嘗試加載不屬於您的網域/指定網址的自己的網址,那麼它將不會匹配,也不會加載。

但是在您的android清單中,您應該將android:exported屬性設置爲false以防止其他應用程序使用它。下面

報價從here

安卓出口 無論其他應用程序的組件可以調用該服務或者與其進行交互 - 如果他們能做到「真」和「假」如果不。當值爲「false」時,只有具有相同用戶ID的相同應用程序或應用程序的組件才能啓動該服務或綁定到該服務。

默認值取決於服務是否包含意圖過濾器。沒有任何過濾器意味着它只能通過指定其確切的類名來調用。這意味着服務僅用於應用程序內部使用(因爲其他人不知道類名)。所以在這種情況下,默認值是「false」。另一方面,至少存在一個過濾器意味着該服務將用於外部使用,因此默認值爲「true」。

此屬性不是限制將服務暴露給其他應用程序的唯一方法。您還可以使用權限來限制可以與服務交互的外部實體(請參閱權限屬性)。

該屬性也可用於ActivityProvider。 (活動)和here(提供者)是參考文獻,但與Service說明相同,但與Service相同,只是用ActivityProvider代替Service