当前位置: 首页 > 知识库问答 >
问题:

应用意图问题|你的应用包含意图重定向漏洞

钱欣然
2023-03-14

我得到这个消息后,在播放控制台更新应用程序。我正在分享一个错误所在的方法的代码,正如谷歌所建议的。我从未更新过这部分代码,以前也从未出现过任何问题。我不知道为什么它显示给我一个错误。我需要更新保存文件的方式吗?我希望在这里找到解决办法。

       public void saveDocument(ScannedDocument scannedDocument) {

        Mat doc = (scannedDocument.processed != null) ? scannedDocument.processed : scannedDocument.original;

        Intent intent = getIntent();
        String fileName;
        boolean isIntent = false;
        Uri fileUri = null;

        if (intent.getAction().equals("android.media.action.IMAGE_CAPTURE")) {
            fileUri = ((Uri) intent.getParcelableExtra(MediaStore.EXTRA_OUTPUT));
            Log.d(TAG, "intent uri: " + fileUri.toString());
            try {
                fileName = File.createTempFile("onsFile", ".jpg", this.getCacheDir()).getPath();
            } catch (IOException e) {
                e.printStackTrace();
                return;
            }
            isIntent = true;
        } else {
            String folderName = mSharedPref.getString("storage_folder", FOLDER_NAME);
            File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString()
                    + "/" + folderName);
            if (!folder.exists()) {
                folder.mkdirs();
                Log.d(TAG, "wrote: created folder " + folder.getPath());
            }
            fileName = folder.getAbsolutePath()
                    + "/DOC-"
                    + new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date())
                    + ".jpg";
        }

        Mat endDoc = new Mat(Double.valueOf(doc.size().width).intValue(),
                Double.valueOf(doc.size().height).intValue(), CvType.CV_8UC4);

        Core.flip(doc.t(), endDoc, 1);

        Imgcodecs.imwrite(fileName, endDoc);
        endDoc.release();

        try {
            ExifInterface exif = new ExifInterface(fileName);
            exif.setAttribute("UserComment", "Generated");
            String nowFormatted = mDateFormat.format(new Date().getTime());
            exif.setAttribute(ExifInterface.TAG_DATETIME, nowFormatted);
            exif.setAttribute(ExifInterface.TAG_DATETIME_DIGITIZED, nowFormatted);
          //  exif.setAttribute("Software", "OpenNoteScanner " + BuildConfig.VERSION_NAME + "");
            exif.saveAttributes();
        } catch (IOException e) {
            e.printStackTrace();
        }

        if (isIntent) {
            InputStream inputStream = null;
            OutputStream realOutputStream = null;
            try {
                inputStream = new FileInputStream(fileName);
                realOutputStream = this.getContentResolver().openOutputStream(fileUri);
                // Transfer bytes from in to out
                byte[] buffer = new byte[1024];
                int len;
                while ((len = inputStream.read(buffer)) > 0) {
                    realOutputStream.write(buffer, 0, len);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return;
            } catch (IOException e) {
                e.printStackTrace();
                return;
            } finally {
                try {
                    inputStream.close();
                    realOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }

        animateDocument(fileName, scannedDocument);

        Log.d(TAG, "wrote: " + fileName);

        if (isIntent) {
            new File(fileName).delete();
            setResult(RESULT_OK, intent);
            finish();
        } else {
            addImageToGallery(fileName, this);
        }

        refreshCamera();
    }


共有1个答案

曹乐意
2023-03-14

谷歌有一个关于缓解意图重定向漏洞的页面,你应该仔细阅读。

简短的版本是,恶意应用程序可能会利用该漏洞访问私有应用程序组件或文件。

文件解释了缓解该漏洞的三种可能方法。不幸的是,没有足够的上下文来确定三者中哪一个最适合你的应用。然而,第一点很简单:

“如果受影响的应用程序组件不需要接收来自其他应用程序的意图,则可以通过在清单中设置`android:exported=“false”将该应用程序组件设置为私有。”

我从未更新过这部分代码,以前也从未出现过任何问题。

这可能意味着这是一种相对较新的Android漏洞,或者说自从你上次发布应用程序以来,谷歌检测它的方法变得更加严格。

我需要更新保存文件的方式吗?

可能是的。或者可能有一种缓解措施就足够了。

我希望在这里找到解决办法。

我链接到的谷歌文档中有一些可能的解决方案。

1-是否真的有可能利用应用程序中的漏洞进行攻击还没有定论。关键是谷歌Play商店的扫描/分析/测试方法已经发现了他们认为存在的问题。他们的目标是保护Play Store用户

 类似资料:
  • 我最近在Google Play商店上推出了一款游戏,直到现在它还很不错。我刚刚收到一封来自谷歌的电子邮件,上面说“你的一个或多个应用程序包含一个故意重定向漏洞,将用户数据置于危险之中”,并告诉我我需要在8月13日之前修复它。 我个人不收集或要求任何用户数据或信息。然而,我在我的游戏中使用了谷歌Admob广告与Facebook调解和Unity广告,这可能是造成这个问题的原因。那么,我的问题是如何克服

  • 谷歌拒绝了我的应用程序,我在提交应用程序作为生产版本时遇到了这个安全错误: 隐含的内部意图 您的应用程序包含隐式内部意图漏洞。有关详细信息,请参阅此Google帮助中心文章。 我应用了这里列出的所有建议:修复隐式悬而未决的漏洞 但错误依然存在。 我的服务: 清单: 这项服务在很多地方都是通过以下三种方式启动的:(根据谷歌的建议,我添加了PendingEvent.FLAG_IMMUTABLE) 方法

  • 我在Unity中创建了我的应用程序,然后导出项目,然后在Android Studio中生成签名apk。 我想把我的应用上传到谷歌Play商店,但由于安全漏洞,它被拒绝了。 该漏洞是意图重定向,建议我遵循以下步骤之一:https://support.google.com/faqs/answer/9267555 我的应用程序使用firebase(db和auth),我想这可能会导致该漏洞(但我不确定,因

  • 我正在创建一个只打算在肖像模式下运行的应用程序。在应用程序中,我使用一个意图调用Android原生相机应用程序。当手机处于纵向方向时,应用程序按预期工作。当手机处于横向方向时,相机应用程序以横向方向启动,这导致当相机意图关闭时,主activity和我的片段被重新创建,这导致一些无意的行为。 有没有办法强制相机应用在通过意图推出时只能以人像方向打开? 谢谢,

  • 由于“意图重定向”,我们的应用程序在最近几年多次被拒绝。“您的应用易受意图重定向攻击。” 我们找不到这个警告的位置。 你知道我们怎样才能解决这个问题吗 请引导我们找到解决方案。 非常感谢你的帮助。 我们的代码如下: