21

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

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

任务 - 隐藏潜在黑客的请求并阻止他代表应用程序执行请求。

4

4 回答 4

0

您并没有真正说明为什么要在您的问题中这样做,但对于其他人:想要这样做的最佳动机是因为您害怕您的应用程序成为攻击者的目标,因为他们以某种方式强迫您意图(或其他 RPC 接口)行为不端。

我可以说做到这一点的最好方法是为您的应用程序提供一个尽可能有限的接口:不要允许面向公众的意图或 RPC 接口操纵您的应用程序以发送您不想要的信息。

此外,您可以记录(可能通过应用程序中的包装器到 HTTP 设施)发送到服务器的 HTTP 请求。问题是,一旦您将信息记录在客户的设备上,您将如何处理它。能够正确识别应用程序何时做“坏”的事情几乎是不可能的,并且预设了对“坏”的定义,所以这是错误的追求。

因此,即使您可以登录,即使您可以使用 HTTPS,我也会说您应该调查攻击者可以用来操纵您的应用程序以将数据发送到您的 Web 服务的所有途径:从您实际发送数据的地方开始并通过应用程序向后工作!

于 2012-10-31T08:17:23.213 回答
0

据我了解,您的问题包括两个问题:

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

随着努力的增加,有几种可能性:

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

如何确保只有您的客户可以向服务器发出请求。我建议使用带有客户端身份验证的 https。您必须使用您的应用程序推出客户端证书,然后您的服务器可能会检查您的客户端的真实性。在这里,您可以找到相互 ssl 身份验证的一般介绍。

于 2012-10-31T08:03:07.490 回答
0

您可以加密消息以防止黑客攻击。如果客户端和服务器都在您的控制之下,那么您可以使用任何密钥加密技术。这仅适用于私有 HTTP 客户端(如 Android 应用程序)。但是对于像浏览器这样的通用 HTTP 客户端,您应该使用 HTTPS(HTTP + SSL)而不是 HTTP。

于 2018-05-27T06:44:51.943 回答
-1

扩展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 manifest 中,您应该将android:exported属性设置为false以防止其他应用程序使用它。

从这里引用以下内容:

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

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

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

这个属性也可以用在ActivityandProvider中。 这里(活动)和这里(提供者)是参考,但它与Service描述几乎一字不差,只是替换ActivityProvider替换Service

于 2015-02-17T16:38:57.500 回答