拦截来自Android应用程序发送的HTTP请求

25

我有一个应用程序,我知道所有的url、参数、http请求类型等(这是我的应用程序)。

如何拦截应用程序发送的所有请求?例如,我按下了一个按钮,就可以看到发送到服务器的请求文本。

任务是隐藏请求,防止潜在的黑客执行来自应用程序的请求。


我建议使用https或其他加密方式来隐藏请求,以防止潜在黑客的攻击。 - Taras Shevchuk
4个回答

0

您可以加密消息以保护免受黑客攻击。如果客户端和服务器都在您的控制下,则可以使用任何秘密密钥加密技术。这仅适用于私有HTTP客户端(如Android应用程序)。但是,在通用HTTP客户端(如浏览器)的情况下,您应该使用HTTPS(HTTP + SSL)而不是HTTP。


0

据我所知,您的问题包含两个问题:

如何检查服务器和客户端之间的流量。

有几种可能性,难度逐渐增加:

  • 日志记录:由于这是您的应用程序,您可以在调用http请求之前插入包含查询和参数的日志记录语句。
  • 侦听服务器端:由于这是您的应用程序,您也控制着服务器。使用tcpdump等工具,您应该能够转储流量并稍后进行分析(例如使用Wireshark)。
  • 侦听客户端:如果您想在客户端内部或“旁边”拦截流量,可以尝试使用burpsuite通过代理或直接在WIFI中拦截流量。

如何确保只有您的客户端可以向服务器发出请求。 我建议使用带有客户端身份验证的https。您需要为您的应用程序提供一个客户端证书,然后您的服务器可以检查客户端的真实性。在这里,您可以找到关于双向SSL认证的一般介绍。


-1

你在问题中并没有真正说明你为什么要这样做,但对于其他人来说,想要这样做的最好动机是因为你担心你的应用程序成为攻击者的目标,因为他们以某种方式强制你的Intent(或其他RPC接口)表现不当。

我能说的最好方法是向你的应用程序提供尽可能有限的接口:不要允许公共面向意图或RPC接口操纵你的应用程序发送你不想要的信息。

此外,你可以记录(通过你的应用程序中的HTTP设施包装器,也许)发送到服务器的HTTP请求。问题是,一旦你在客户端设备上记录了信息,你会怎么处理它。能够正确识别应用程序何时做出“错误”行为几乎是不可能的,并且预设了“错误”的定义,因此这是不正确的路线。

因此,即使你可以记录,即使你可以使用HTTPS,我认为你应该调查攻击者可以用来操纵你的应用程序向你的Web服务发送数据的所有途径:从实际发送数据的地方开始,逆向遍历整个应用程序!


-2
扩展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。如果用户找到一个链接或尝试加载自己的URL,而该链接不属于您的域名/指定的URL,则它将不匹配并且不会加载。

但在您的Android清单中,您应该将android:exported属性设置为false,以防止其他应用程序使用它。

以下是此处的引用:

android:exported 是否允许其他应用程序的组件调用该服务或与其交互 — 如果可以,则为"true",否则为"false"。当值为"false"时,只有同一应用程序的组件或具有相同用户ID的应用程序才能启动该服务或绑定到它。

默认值取决于服务是否包含意图过滤器。没有任何过滤器意味着只能通过指定其精确类名来调用它。这意味着该服务仅用于应用程序内部使用(因为其他人不会知道类名)。因此,在这种情况下,默认值为"false"。另一方面,至少存在一个过滤器意味着该服务是为外部使用而设计的,因此默认值为"true"。

此属性并不是限制服务对其他应用程序暴露的唯一方式。您还可以使用权限来限制可以与服务交互的外部实体(请参阅权限属性)。

这个属性可以在 ActivityProvider 中使用。参考 这里(activity)和 这里(provider),但基本上与 Service 描述的文字一字不差,只需将 ActivityProvider 替换为 Service


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接