App如何避免手动输入密码造成的安全风险?

Posted 华为移动服务

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了App如何避免手动输入密码造成的安全风险?相关的知识,希望对你有一定的参考价值。

问题场景

某开发者开发了一款应用,为了方便用户使用,增强用户粘性,同时收集用户信息,在浏览器中添加了线上登录的功能。本以为增加了功能可以扩大用户访问量,增加下载量,可没想到,随着功能的推广,下载访问量不仅没有增加,反而出现了下滑的趋势,这是怎么回事呢?

问题原因

随着开发者进一步调查研究,查访用户,发现问题就出在添加的新功能上。什么意思呢?

原来这款应用的在线登录功能支持的是在线手动输入密码,密码是7位数,为了保障用户的信息安全,开发者特地设置了密码乱序。意味着,每当用户登录需要输入密码时,都要经历一次7个数字的查找输入过程,由于输入过程较为复杂,给用户登录体验造成了不良影响。另一方面,手动输入密码的过程中没有得到安全保障。用户输入密码的环境,如果是开放的,对用户隐私安全就造成了威胁。

种种原因,对于粘性不强的用户,在第一次使用应用时,如果出现这样的情况,在开放不够安全的场景中,很可能直接关闭应用,甚至激发厌烦情绪,将应用卸载。这就导致开发者“好心办了坏事”,无意中流失了许多用户。

那么,如何解决这样一个问题呢?

如何避免线上手动输入密码造成的风险?

要解决这个问题,其实是要解决如何进行安全便捷的线上快速身份认证的问题。那么如何进行呢?思路如下:

  • 使用生物特征或外设完成身份认证,避免密码泄露的风险
  • 生物特征等用户个人隐私只在本地验证,保障用户个人隐私不泄露
  • 规范成熟、应用广泛、生态完善,易与现有帐号基础设施集成
  • 提供FIDO2漫游认证器功能,支持在其他设备上使用FIDO时,把华为手机作为漫游认证器辅助完成认证

要实现这些目标,就要使用到FIDO(线上快速身份验证服务)。

使用这个服务,用户可在初次登录目标网站后,选择开通指纹/人脸登录,之后再通过浏览器App,登录同一个网站帐号时,只需要指纹/刷脸快速认证即可。由于华为FIDO是以系统完整性检测结果作为前置条件,可以帮助保护用户在更安全的设备环境中进行认证。

那么如何实现这一强大便捷又安全的功能呢? 具体集成步骤如下:

1. 使用一个Activity实例初始化Fido2Client,可以写在Activity的onCreate方法中。

Fido2Client fido2Client = Fido2.getFido2Client(this);

2. 是从FIDO服务器获取一个挑战值以及注册或认证的策略。并且根据从FIDO服务器获取的这些信息,初始化一个认证或注册请求。

// Obtain the challenge value and related policy from the FIDO server, and initiate a Fido2RegistrationRequest
// request.
ServerPublicKeyCredentialCreationOptionsResponse response = fidoServer.getAttestationOptions(request);
if (!ServerStatus.OK.equals(response.getStatus())) {
    Log.e(TAG, getString(R.string.reg_fail) + response.getErrorMessage());
    showError(getString(R.string.reg_fail) + response.getErrorMessage());
}
PublicKeyCredentialCreationOptions publicKeyCredentialCreationOptions =
        ServerUtils.convert2PublicKeyCredentialCreationOptions(fido2Client,response);

3. 调用getRegistrationIntentgetAuthenticationIntent用来初始化认证或注册流程。

4. 在Fido2IntentCallback中调用launchFido2Activity,拉起注册或认证界面

fido2Client.getRegistrationIntent(registrationRequest, registrationOptions, new Fido2IntentCallback() {
    @Override
    public void onSuccess(Fido2Intent fido2Intent) {
        fido2Intent.launchFido2Activity(Fido2DemoMainActivity.this, Fido2Client.REGISTRATION_REQUEST);
    }
    @Override
    public void onFailure(int errorCode, CharSequence errString) {
        showError(getString(R.string.reg_fail) + errorCode + "=" + errString);
    }
});

5. 在activity.onActivityResult中调用getFido2RegistrationResponse或getFido2AuthenticationResponse获取FIDO2客户端的注册或认证的响应。

switch (requestCode) {
    // Receive the registration response.
    case Fido2Client.REGISTRATION_REQUEST:
        Fido2RegistrationResponse fido2RegistrationResponse = fido2Client.getFido2RegistrationResponse(data);
        reg2Server(fido2RegistrationResponse);
        break;
    // Receive the authentication response.
    case Fido2Client.AUTHENTICATION_REQUEST:
        Fido2AuthenticationResponse fido2AuthenticationResponse =
                fido2Client.getFido2AuthenticationResponse(data);
        auth2Server(fido2AuthenticationResponse);
        break;
    default:
        break;
}

>>访问华为线上快速身份验证服务官网,了解更多相关内容
>>获取华为线上快速身份验证服务开发指导文档
>>华为HMS Core官方论坛
>>华为线上快速身份验证服务开源仓库地址:GitHubGitee

点击右上角头像右方的关注,第一时间了解华为移动服务最新技术~

以上是关于App如何避免手动输入密码造成的安全风险?的主要内容,如果未能解决你的问题,请参考以下文章

每次Access连接到SQL Server而不使用Windows身份验证时,如何避免手动输入登录名和密码

3类代码安全风险如何避免?

找回华为账号密码时为啥存在安全风险 找回华为账号密码时显示存在安全风险的原因

windows下设置git操作免输入密码(存在安全风险)

企业即时通讯如何避免敏感信息的安全风险

使用Asp开发的网站,如何在用户登陆前后重置ASPSESSIONID,以避免SESSION被劫持造成安全隐患。