我有一个链接,将在WebView
中打开。问题在于,除非我像这样覆盖onReceivedSslError
,否则它无法打开:
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
我收到了来自Google Play的安全警报,内容如下:
安全警告 你的应用程序存在WebViewClient.onReceivedSslError处理程序的不安全实现。具体而言,该实现忽略了所有SSL证书验证错误,使你的应用程序容易受到中间人攻击。攻击者可以更改受影响的WebView的内容,读取传输的数据(例如登录凭据)并使用JavaScript在应用程序内执行代码。
为了正确处理SSL证书验证,请更改你的代码,在服务器提供的证书符合你的期望时调用SslErrorHandler.proceed(),否则调用SslErrorHandler.cancel()。已向你的开发者帐户地址发送包含受影响的应用程序和类的电子邮件警报。
请尽快解决此漏洞并增加升级APK的版本号。有关SSL错误处理程序的更多信息,请参阅我们在开发人员帮助中心的文档。对于其他技术问题,你可以发布到https://www.stackoverflow.com/questions并使用标签“android-security”和“SslErrorHandler”。如果你正在使用负责此问题的第三方库,请通知第三方并与他们合作解决该问题。
为确认你已正确升级,请将更新的版本上传到开发者控制台,并在五小时后返回检查。如果应用程序没有正确升级,我们将显示警告。
请注意,虽然这些特定问题可能不会影响每个使用WebView SSL的应用程序,但最好保持所有安全补丁的最新状态。具有暴露用户受到威胁的漏洞的应用程序可能被视为违反内容政策和开发人员分发协议第4.4节的危险产品。
请确保所有已发布的应用程序符合开发者分发协议和内容政策。如果你有问题或疑虑,请通过Google Play开发者帮助中心联系我们的支持团队。
如果我删除
onReceivedSslError (handler.proceed())
,那么页面将无法打开。有没有办法在
WebView
中打开页面并避免安全警报?
SSLError
中的SSLCertificate
,并确定它是否确实是你正在访问的服务器的有效证书。然后,只有在这种情况下,你才调用proceed()
。否则,你就调用cancel()
。如果你能提供一个[mcve],或者至少提供一个触发此回调的URL,那将会很有帮助。 - CommonsWare