我得到这个消息后,在播放控制台更新应用程序。我正在分享一个错误所在的方法的代码,正如谷歌所建议的。我从未更新过这部分代码,以前也从未出现过任何问题。我不知道为什么它显示给我一个错误。我需要更新保存文件的方式吗?我希望在这里找到解决办法。
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();
}
谷歌有一个关于缓解意图重定向漏洞的页面,你应该仔细阅读。
简短的版本是,恶意应用程序可能会利用该漏洞访问私有应用程序组件或文件。
该文件解释了缓解该漏洞的三种可能方法。不幸的是,没有足够的上下文来确定三者中哪一个最适合你的应用。然而,第一点很简单:
“如果受影响的应用程序组件不需要接收来自其他应用程序的意图,则可以通过在清单中设置`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和我的片段被重新创建,这导致一些无意的行为。 有没有办法强制相机应用在通过意图推出时只能以人像方向打开? 谢谢,
由于“意图重定向”,我们的应用程序在最近几年多次被拒绝。“您的应用易受意图重定向攻击。” 我们找不到这个警告的位置。 你知道我们怎样才能解决这个问题吗 请引导我们找到解决方案。 非常感谢你的帮助。 我们的代码如下: