Articles of android security

Google Play安全警报 – 您的应用正在使用HostnameVerifier的不安全实施

最近我的一个应用程序收到了来自Google Play的安全警报,如下所示。 您的应用程序正在使用HostnameVerifier的不安全实现。 有关修复漏洞和截止日期的详细信息,请参阅Google Play帮助中心文章的链接。 以下是我的代码。 HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier(){ public boolean verify(String arg0, SSLSession arg1) { return true; }}); 任何人都可以通过示例解释,我应该做些什么更改来修复此警告?

使用Robospice在Android上固定证书

我正在阅读Android上的证书固定,我很困惑。 我没有使用okhttp或改装,所以我必须手动完成。 这里有一个教程: https : //www.owasp.org/index.php/Certificate_and_Public_Key_Pinning#Android ,他们将证书添加到可信证书列表中。 但是当我们检查服务器上安装的证书的sha256的base64时,还有另一个教程: https : //medium.com/@appmattus/android-security-ssl-pinning-1db8acb6621e哪种方法是正确的? 为什么我们不能像浏览器那样从头中的服务器接收sha256并将其存储在某个地方?

如何以编程方式获取使用率访问权限

我的应用程序需要具有使用权限访问权限才能获得有关用户手机上当前正在运行的应用程序的信息。 我可以使用以下代码在以下链接的帮助下成功实现它。 用法访问应用 这是我的工作代码 public void showDialog() { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { @SuppressWarnings(“WrongConstant”) UsageStatsManager usm = (UsageStatsManager) getSystemService(“usagestats”); long time = System.currentTimeMillis(); List appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time – 1000 * 1000, time); if (appList.size()==0) { AlertDialog alertDialog = new AlertDialog.Builder(this) .setTitle(“Usage Access”) .setMessage(“App will not run without usage access permissions.”) .setPositiveButton(“Settings”, new DialogInterface.OnClickListener() { […]

UnrecoverableKeyException无法获取有关私钥的信息,KeyStoreException:无效的密钥blob

在我们的应用程序中,我们一直遇到Android Keystore中的数据突然变得无法访问的问题。 我们看到的具体例外情况如下: java.security.UnrecoverableKeyException: Failed to obtain information about private key at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePublicKeyFromKeystore(AndroidKeyStoreProvider.java:223) at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(AndroidKeyStoreProvider.java:259) at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(AndroidKeyStoreProvider.java:269) at android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:94) at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:474) at java.security.KeyStore.getEntry(KeyStore.java:1560) at .EncryptionInteractor.generateKeys(EncryptionInteractor.java:104) at .EncryptionInteractor.generateKeys(EncryptionInteractor.java:100) at .EncryptionInteractor.init(EncryptionInteractor.java:93) at .EncryptionInteractor.(EncryptionInteractor.java:80) at .EncryptionInteractor.init(EncryptionInteractor.java:65) at ..onCreate(APPLICATION_CLASS.java:17) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5791) at android.app.ActivityThread.-wrap1(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) […]

使用Google + Facebook登录的Android应用程序的Spring启动REST api安全性

我正在构建一个包含2层的应用程序: – 1.原生Android应用程序 – 包含通过Facebook + Google登录以减少痛苦登记的能力。 2.使用Spring Boot的Java Server – 典型的MVC端点,例如REST api + UI管理屏幕。 Facebook( FacebookSdk )和谷歌( GoogleApiClient )登录部分正在使用以下Android依赖项进行工作和测试: – dependencies { compile ‘com.facebook.android:facebook-android-sdk:4.6.0’ compile ‘com.google.android.gms:play-services-auth:9.0.0’ …. } API我们有: – /api/signin – 当用户使用Facebook + Google成功 /api/signin 并在users数据库表中创建条目时调用。 还有许多其他API端点,例如优惠 /api/offers/ – 向已注册的用户返回优惠。 我不确定最佳实践方式: – android应用程序如何对/ api / signin REST端点进行API调用(即哪些标头等可以发送到我认为是没有安全性的端点,因为未注册的用户将会遇到此问题)。 另外,在users db表中可以保存哪些字段? Android应用程序如何调用例如/ api / offers […]

Google Play开发者控制台拒绝了我的应用更新

我试图理解并解决为什么我的应用程序被拒绝我知道它是关于SSL的,但我似乎无法find导致它的依赖项。 我正在使用下一个设置: Android N(24) 布。 MixPanel。 Quickblox。 Crashlytics Analytics(分析)。 任何帮助,将不胜感激。 更新:这是来自警报部分 安全警报 您的应用程序具有WebViewClient.onReceivedSslError处理程序的不安全实现。 具体来说,该实现忽略了所有SSL证书validation错误,使您的应用程序容易受到中间人攻击。 攻击者可以使用JavaScript更改受影响的WebView内容,读取传输的数据(例如登录凭据),以及在应用程序内部执行代码。 要正确处理SSL证书validation,只要服务器提供的证书符合您的期望,就更改代码以调用SslErrorHandler.proceed(),否则调用SslErrorHandler.cancel()。 包含受影响的应用程序和类的电子邮件警报已发送到您的开发者帐户地址。 请尽快解决此漏洞并增加已升级APK的版本号。 有关SSLerror handling程序的更多信息,请参阅开发人员帮助中心中的文档。 对于其他技术问题,您可以发布到https://www.stackoverflow.com/questions并使用标签“android-security”和“SslErrorHandler。”如果您使用的是负责此操作的第三方库,请通知第三方并与他们合作解决问题。 要确认您已正确升级,请将更新后的版本上传到开发者控制台,并在五小时后再回来查看。 如果应用尚未正确升级,我们将显示警告。 请注意,虽然这些特定问题可能不会影响使用WebView SSL的每个应用程序,但最好是及时了解所有安全修补程序。 如果应用程序存在漏洞,使用户面临泄密风险,则可能会被视为违反了我们的恶意行为政策和开发者分发协议第4.4节。 请确保发布的所有应用均符合开发者分发协议和开发者计划政策。 如果您有任何疑问或疑虑,请通过Google Play开发者帮助中心与我们的支持小组联系。 影响APK版本2。

在Android中存储密钥

我正在为Android编写应用程序,我必须存储两个密钥,我将使用它来加密/解密某些消息。 (我必须存储私钥RSA)。 我读了: https://developer.android.com/training/articles/keystore.html#WhichShouldIUse 还有一节标题为: 在Keychain或Android Keystore Provider之间进行选择 但是,我不确定我应该选择什么来获得最安全的解决方案。 请帮帮我 。

控制第三方API对Android系统资源的访问?

当您在Android项目中导入第三方API(数据包dependency injection,生成的库,源代码等)时,您会认为它们的行为与广告一样。 大多数时候代码不是开源的,它是混淆的或只是编译。 有没有办法控制此API对重要系统资源的访问,如网络,联系人,video和音频,位置? 最好的方法是为系统资源提供proxy 。 这将带来以下好处: 可以通过在代理中提供模拟数据来执行测试 如果不需要,您的应用程序将不必提供API所需的所有权限,并且代理将允许API因为通过模拟权限授予而不会中断 过滤本地收集的有关用户的可能数据,并将其发送到API主页回购,用于广告或恶意 我未能find如何实现这样的解决方案,因为用户定义的活动和服务无法控制第三方API的服务,甚至无法阻止它们直接调用任何Android公共接口。 解决方案不应该要求root访问权限,因为您不希望将此控件置于您自己的应用程序的边界之外。 这个问题的内容与几个问题有关,这些问题解决了这个广泛问题的特殊性( 内容提供者的日志数据 , 网络请求 – 让我在研究答案的同时考虑这个问题) 注意 :简短的答案是否定的,但是一个人可以有足够的创造力(可能会针对本机级别的黑客可能会解决此问题 – idk)

我的Google Play控制台中有关libpng的安全警报

我在谷歌播放控制台收到一个关于2个应用程序(由buildbox制作的游戏)的安全警报,警报说我的应用程序使用了一个版本的libpng,它提出了一个安全漏洞,我在我的项目中找不到这个lib,任何解决方案请 ? 他们也给了我这个链接https://support.google.com/faqs/answer/7011127

android Google Play警告:SSLerror handling程序漏洞

我在我的应用程序中使用gorbin / ASNE SDK。 我最近收到了Google发来的一封电子邮件,内容如下:“Google Play警告:SSLerror handling程序漏洞”。 在这封电子邮件中,谷歌解释说我的应用程序有[“WebViewClient.onReceivedSslError处理程序的不安全实现”] 他们建议我[“要正确处理SSL证书validation,只要服务器提供的证书符合您的期望,就更改代码以调用SslErrorHandler.proceed(),并调用SslErrorHandler.cancel()否则”] 这是我的方法实现: public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } 有什么帮助吗?