如何防止android中的拒绝服务(DOS)攻击?

Posted

技术标签:

【中文标题】如何防止android中的拒绝服务(DOS)攻击?【英文标题】:How to prevent denial of services(DOS) attacks in android? 【发布时间】:2018-12-27 06:13:15 【问题描述】:

我在我的安卓应用程序中使用了地图。我传递了起点和终点纬度,并从地图 url 获取数据,然后解析响应。

但在审核下面标记为 DOS 攻击的代码时,会指出“此代码可能允许攻击者使程序崩溃或以其他方式使其对合法用户不可用。” 关注:如果攻击者推送过大的文件,那么它会逐行运行并且循环运行时间过长。 建议的解决方案:不允许读取超过特定文件大小的文件,这样它就不会读取超出某些限制的文件

这是我的代码:

    String url = "https://maps.googleapis.com/maps/api/directions/json"+ "?" + str_origin + "&" + str_dest + "&" +  "sensor=false";

  private String downloadDataFromUrl(String strUrl) throws IOException 
            String data = "";
            InputStream iStream = null;
            HttpsURLConnection urlConnection = null;
            try 
                URL url = new URL(strUrl);
                urlConnection = (HttpsURLConnection) url.openConnection();
                urlConnection.connect();
                iStream = urlConnection.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(iStream),1024);    
                StringBuffer sb = new StringBuffer();
                String line = "";
                while ((line = br.readLine()) != null) 
                    sb.append(line);
                

                data = sb.toString();

                br.close();

             catch (Exception e) 
                Log.d("Exception", e.toString());
             finally 
                iStream.close();
                urlConnection.disconnect();
            
            return data;
        

请提供解决方案。提前致谢。

编辑 1:通过调用 append(),它将 Untrusted 数据附加到使用默认支持数组大小 (16) 初始化的 StringBuilder 实例。这会导致 JVM 过度消耗堆内存空间。

【问题讨论】:

不等待 readLine 方法返回 null 而是检查读取的字节是否有问题? 没有。我的审计员​​说,在不检查文件大小的情况下读取文件是一种不好的做法。如果攻击者推送了 1GB 文件,那么它可能会进入一些永无止境的循环。 @comodoro 请检查编辑部分 【参考方案1】:

如果你从一个未知的 URL 下载,数据确实可以是任意的,BufferedReader.readLine() 可以遇到一行,只要程序无法处理它。 This question 表示限制BufferedReader 的行长可能不是微不足道的。

行数也可能太大,在这种情况下,行计数检查而不是 while 循环中的简单 null 检查似乎就足够了。

问题是为什么您允许用户输入任意 URL 并在不检查的情况下下载它。 URL 可以很容易地成为数 GB 的二进制文件。您的第一行表明您打算使用 Google Maps API,AFAIK 不会返回过大的行,从而导致 DOS 问题没有实际意义(除了在一些超安全的应用程序中,我认为 android 不适合使用)。

【讨论】:

以上是关于如何防止android中的拒绝服务(DOS)攻击?的主要内容,如果未能解决你的问题,请参考以下文章

防止恶意请求 - DOS 攻击

Android php插入记录在多次提交中防止DOS攻击和csrf攻击

高防服务器如何防御流量攻击??

任务:拒绝服务DoS

任务:拒绝服务DoS

如何阻止对 Web API 的 hack/DOS 攻击