我正在尝试找到一种在Android Webview中处理SSL证书错误的正确方法.我的目标是提供一种加载具有SSL证书错误的页面的方法,但是当用户尝试加载带有证书错误的URL时,让用户选择在警告他安全性之后加载该页面.
我在线程中找到的最接近的解决方案建议覆盖WebViewClient,如下所示:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(final WebView view, final SslErrorHandler handler, final SslError error) {
handler.proceed();
}
});
Run Code Online (Sandbox Code Playgroud)
但是,这在没有用户同意的情况下基本上禁用了WebView中的SSL.
这里参考的是我找到解决方案的线程:
在Android中使用WIFI时,Web视图在加载URL后显示空白/白页
Android WebView阻止从https重定向到http
我继续实施了一个略有不同的版本,提示用户:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(final WebView view, final SslErrorHandler handler, final SslError error) {
//Showing a first confirmation dialog
AndroidUtils.showYesNoDialog(
//First confirmation message
"WARNING - THIS PAGE IS NOT SECURE! Are you sure you want …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Android库,我想在我的代码中应用篡改检测机制,因为它调用了一些敏感的金融Web服务.
我要实现的是在运行时以编程方式计算apk(或其重要部分)的校验和,这样我就可以防止重新打包或重新编译的apk能够造成任何伤害(防篡改).
到目前为止,我想出的是计算校验和applicationInfo.publicSourceDir.但我不确定具有多个dex文件或多个splitApks的应用程序会发生什么.
以编程方式基于Android应用程序的代码库计算校验和的最可靠方法是什么?
我的应用仅收到来自 Android 10 用户的单一崩溃报告。这是堆栈跟踪:
Fatal Exception: java.lang.NullPointerException: Attempt to read from field 'int android.security.keymaster.ExportResult.resultCode' on a null object reference
at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePublicKeyFromKeystore(AndroidKeyStoreProvider.java:256)
at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(AndroidKeyStoreProvider.java:296)
at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(AndroidKeyStoreProvider.java:316)
at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(AndroidKeyStoreProvider.java:378)
at android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:105)
at java.security.KeyStore.getKey(KeyStore.java:1062)
at we.lmk.iqQ(we.lmk:19)
at we.Vmk.apply(we.Vmk:51)
at io.reactivex.internal.operators.single.SingleMap$MapSingleObserver.onSuccess(SingleMap.java:57)
at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:56)
at io.reactivex.Single.subscribe(Single.java:3603)
at io.reactivex.internal.operators.single.SingleMap.subscribeActual(SingleMap.java:34)
at io.reactivex.Single.subscribe(Single.java:3603)
at io.reactivex.internal.operators.single.SingleZipArray.subscribeActual(SingleZipArray.java:63)
at io.reactivex.Single.subscribe(Single.java:3603)
at io.reactivex.internal.operators.maybe.MaybeFilterSingle.subscribeActual(MaybeFilterSingle.java:40)
at io.reactivex.Maybe.subscribe(Maybe.java:4290)
at io.reactivex.internal.operators.maybe.MaybeMap.subscribeActual(MaybeMap.java:40)
at io.reactivex.Maybe.subscribe(Maybe.java:4290)
at io.reactivex.internal.operators.maybe.MaybeMap.subscribeActual(MaybeMap.java:40)
at io.reactivex.Maybe.subscribe(Maybe.java:4290)
at io.reactivex.internal.operators.maybe.MaybeFlatMapSingle.subscribeActual(MaybeFlatMapSingle.java:47)
at io.reactivex.Single.subscribe(Single.java:3603)
at io.reactivex.internal.operators.single.SingleFlatMap.subscribeActual(SingleFlatMap.java:36)
at io.reactivex.Single.subscribe(Single.java:3603)
at io.reactivex.internal.operators.single.SingleFlatMap.subscribeActual(SingleFlatMap.java:36)
at io.reactivex.Single.subscribe(Single.java:3603)
at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
at …Run Code Online (Sandbox Code Playgroud) Android N允许您将自己的活动链接到"设置"中的应用页面.只需添加一个<intent-filter>for android.intent.action.APPLICATION_PREFERENCES.Android N的"设置"应用会在您的应用中查找具有该活动的活动<intent-filter>.如果设置找到一个,它会在设置中的应用页面上添加一个齿轮图标,如果用户点击齿轮,它们将被带到您指定的活动.
我担心安全性,所以我提交了一个问题,寻找我们可以使用的权限android:permission,允许设置启动我们的活动,但不允许其他应用程序启动我们的活动(例如,WRITE_SECURE_SETTINGS).
然后cketti指出,您可以将活动标记为未导出,通过android:exported="false".令我惊讶的是,这很有效.
"设置"应用如何启动标记为未导出的活动?
我当然可以看到有一个权限可以控制它.但是,快速阅读"设置"应用程序的清单(主分支,n-developer-preview-5分支)并没有发现任何明显的问题.
所以:
是否有允许应用启动其他应用的非导出组件的权限?如果是这样,这是什么?
如果没有,设置如何将其关闭?
在 Google Play 商店控制台中上传构建时出现错误。错误如下。
泄露的 GCP API 密钥 您的应用程序包含泄露的 Google Cloud Platform (GCP) API 密钥。
罪魁祸首代码如下。
Places.initialize(getApplicationContext(), BuildConfig.GOOGLE_API_KEY);
Run Code Online (Sandbox Code Playgroud)
根据文档,我正在从 BuildConfig 读取密钥并限制该密钥。但仍然是同样的问题。我该如何解决这个问题..
我想将秘密数据存储在我的应用程序的私钥库中.
但是,当我正在编写代码来执行此操作时,Android Studio警告说KeyPairGeneratorSpec.Builder(context)需要API级别18,而我的目标是14.:-(
如何在Android API级别14到17的应用程序中存储秘密数据?
我在Google Play上有一个应用程序,今天我收到了Google的一封邮件说:
Google Play警告:您正在使用X509TrustManager的不安全实施
它说明了SSL证书问题以及解决问题的方法.
因为好奇,我问这个问题,
更多细节:
我的应用程序是使用Appcelerator Titanium构建的,google说这个实现是在ti.modules.titanium.network.NonValidatingTrustManager;.我确信我的代码中从未使用过这样的类.
android appcelerator android-security appcelerator-titanium trustmanager
我收到了来自Google的电子邮件,主题如下: Google Play Warning: SSL Error Handler Vulnerability". In this email, Google explains that my app has an ["unsafe implementation of the WebViewClient.onReceivedSslError handler"
这是我的方法实现(WebView Client):
public class MyBrowser extends WebViewClient {
boolean timeout;
public MyBrowser() {
timeout = true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
try {
progressBar.setVisibility(View.VISIBLE);
}catch(Exception e){
e.printStackTrace();
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
try{
progressBar.setVisibility(View.GONE); …Run Code Online (Sandbox Code Playgroud) 我收到了来自Google Play商店的电子邮件 - "Google Play警告:您正在使用易受攻击的libpng版本".
电子邮件包含以下信息 - https://support.google.com/faqs/answer/7011127
我没有在我的应用程序中使用libpng库.但是,在我的Android应用程序中,我使用的是OpenCV2.4.5库.在互联网上搜索后,我发现OpenCV库使用了libpng.
我的问题 - 将OpenCV2.4.5升级到OpenCV3.1.0将解决"易受攻击的libpng版本"警告?
android-security ×10
android ×8
java ×2
appcelerator ×1
dex ×1
google-play ×1
https ×1
keystore ×1
libpng ×1
ssl ×1
trustmanager ×1