J'ai eu l'avertissement de Google Play.
Comment puis-je gérer "la vulnérabilité du gestionnaire d'erreurs SSL" d'implémentation non sécurisée du gestionnaire WebViewClient.onReceivedSslError.
"Veuillez corriger cette vulnérabilité dès que possible et incrémenter le numéro de version de l'APK mis à niveau. Pour gérer correctement la validation du certificat SSL, modifiez votre code pour invoquer SslErrorHandler.proceed () chaque fois que le certificat présenté par le serveur répond à vos attentes et invoquez SslErrorHandler. .cancel () sinon. "
J'ai reçu le même avertissement aujourd'hui et me dit que le problème Provient du kit de développement logiciel de l'un de mes réseaux publicitaires (InMobi, je songe vraiment à les laisser tomber car ils ont beaucoup d'informations frauduleuses et automatiques. rediriger les bannières, et maintenant ceci ...):
com.inmobi.commons.analytics.iat.impl.net.AdTrackerWebViewLoader$MyWebViewClient
Quelle est la classe concernée dans votre cas? S'il s'agit de l'une de vos propres classes, vous devrez lire la technique documentation et corriger votre implémentation.
Si, comme moi, vous n'êtes que la victime d'une de vos bibliothèques externes, contactez les développeurs pour leur demander de fournir une bibliothèque fixe (ou supprimez la bibliothèque).
Vous devez d’abord vérifier que vous utilisez correctement le gestionnaire WebViewClient.onReceivedSslError.
Si vous n'utilisez pas la bibliothèque WebViewClient ou si vous l'utilisez déjà correctement, le problème provient probablement d'une bibliothèque tierce. Vous pouvez d’abord utiliser cette commande linux dans le répertoire racine de votre projet pour identifier les bibliothèques qui pourraient être responsables du problème:
find . -name '*.jar' -exec zipgrep -i onreceivedsslerror {} \;
Cela listera les fichiers dans tous vos fichiers jar ayant la chaîne "OnReceivedSslError".
Après cela, vous pourrez vérifier si les recommandations de Google pour traiter la vulnérabilité sont respectées dans chaque fichier correspondant.
Si vous n'avez pas besoin de manipuler les éléments de onReceivedSslErr(WebView,SslErrorHandler,SslError)
, supprimez cette méthode pour éviter que Google Play warning.Otherwise
ne l'exécute pas directement. Voici un exemple de @sakiM, Webview pour éviter une alerte de sécurité google play lors de l'implémentation de onReceivedSslError
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.notification_error_ssl_cert_invalid);
builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.proceed();
}
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
}
});
final AlertDialog dialog = builder.create();
dialog.show();
}
Si la méthode onReceivedSslErr
a été appelée par la 3ème bibliothèque, contactez simplement le fournisseur.
Bonjour, voici la dernière solution pour résoudre votre problème. J'espère que ça va aider quelqu'un:
// COPIER COLLER CE CODE ET SUPPRIMER LA méthode onReceivedError ().
/**
* Notify the Host application that an SSL error occurred while loading a
* resource. The Host application must call either handler.cancel() or
* handler.proceed(). Note that the decision may be retained for use in
* response to future SSL errors. The default behavior is to cancel the
* load.
*
* @param view The WebView that is initiating the callback.
* @param handler An SslErrorHandler object that will handle the user's
* response.
* @param error The SSL error object.
*/
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
//final AlertDialog.Builder builder = new AlertDialog.Builder(OnlinePayment.this);
String msg="";
if(error.getPrimaryError()==SslError.SSL_DATE_INVALID
|| error.getPrimaryError()== SslError.SSL_EXPIRED
|| error.getPrimaryError()== SslError.SSL_IDMISMATCH
|| error.getPrimaryError()== SslError.SSL_INVALID
|| error.getPrimaryError()== SslError.SSL_NOTYETVALID
|| error.getPrimaryError()==SslError.SSL_UNTRUSTED) {
if(error.getPrimaryError()==SslError.SSL_DATE_INVALID){
msg="The date of the certificate is invalid";
}else if(error.getPrimaryError()==SslError.SSL_INVALID){
msg="A generic error occurred";
}
else if(error.getPrimaryError()== SslError.SSL_EXPIRED){
msg="The certificate has expired";
}else if(error.getPrimaryError()== SslError.SSL_IDMISMATCH){
msg="Hostname mismatch";
}
else if(error.getPrimaryError()== SslError.SSL_NOTYETVALID){
msg="The certificate is not yet valid";
}
else if(error.getPrimaryError()==SslError.SSL_UNTRUSTED){
msg="The certificate authority is not trusted";
}
}
final AlertDialog.Builder builder = new AlertDialog.Builder(OnlinePayment.this);
builder.setMessage(msg);
builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.proceed();
}
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
}
});
final AlertDialog dialog = builder.create();
dialog.show();
}