App如何防止恶意网址入侵的风险?

问题场景

某开发者打造了一款轻量级浏览器,核心功能是极速浏览、搜索与下载,因为高效便捷,应用很快达到了千万级的下载量,用户数量直线攀升,也就是在这个时候,隐患随之产生。原来为了方便用户使用,浏览器增加了二维码识别功能,正是这个功能,很多用户在扫码的时候,被恶意导向了不安全的网站。恶意网址的导流,导致很多用户直接卸载了浏览器,用户量因而大幅下降。明明增加功能是为了增强用户体验感,由于安全隐患却适得其反,这时候该怎么办呢?

这里我们涉及到的安全问题是,恶意网址入侵的问题。

什么是恶意网址入侵?

恶意网址入侵,也称恶意URL入侵,URL(Uniform Resource Locator)专业术语是统一资源定位器,就是网页地址的意思。我们的互联网世界就是由很多的URL组成,也可以说就是以URL来表现的。

每一个网页都有只属于自己的URL地址(我们俗称网址),它具有全球唯一性。正确的URL应该是可以通过浏览器打开一个网页的,但是有时候无法打开并不能说明这个URL是错误的,就好比不能打开http://www.Facebook.com这个URL,但它是正确的,只不过中国大陆不能访问而已。

什么是恶意URL?受到恶意URL攻击有什么危害呢?

恶意URL通俗来讲,是指可以通过电子邮件链接、文本消息、浏览器弹出窗口、页面广告等进行传递的在线病毒链接,通过点击这些URL,会将用户指向不可靠的网站,或者最有可能是嵌入了“可下载内容”,这些“可下载内容”绝非善类,很多是间谍软件,或是按键记录程序,病毒,蠕虫等,一旦点击了恶意URL,轻则被强行植入不良网页和广告,重则就会直接造成财产利益的损失。

因此,为了打造良好的用户体验感,开发者必然要将检测恶意URL的入侵作为优先考虑的任务。

如何防止恶意URL入侵的风险?

解决这个问题,就需要调用华为Safety Detect的提供恶意URL检测能力。浏览器访问URL的安全检测能力,可为用户使用浏览器添加一个安全、便捷的访问入口,降低安全浏览服务的实现成本。并且调用了这个能力,浏览器搜索栏不仅可以添加安全的扫描二维码,也可以以安全的方式分享二维码。当用户扫描二维码访问网址时,调用这个功能,即可判断用户访问的URL是否为恶意网址,对于恶意网址,就可立即评估提示或拦截用户的访问风险。这么安全好用的功能,具体如何实现呢?

主要分为三个步骤:

1. 初始化URLCheck API:
在使用URLCheck API前,必须调用initUrlCheck方法进行接口初始化,并且需要等待初始化完成后再进行接下来的接口调用,示例代码如下:

SafetyDetectClient client = SafetyDetect.getClient(getActivity());
client.initUrlCheck();

2. 请求网址检测:
指定关注的威胁类型,您可以将关注的威胁类型作为网址检测API的参数。其中,UrlCheckThreat类中的常量包含了当前支持的威胁类型:

public class UrlCheckThreat {
    //此类型URL被标记为包含潜在有害应用的页面的URL(篡改首页、网页挂马、恶意应用下载链接等)
    public static final int MALWARE = 1;
    // 这种类型的URL被标记为钓鱼、欺诈网站
    public static final int PHISHING = 3;
}

发起网址检测请求,待检测的URL包含协议、主机、路径,不包含查询参数。调用API示例代码如下:

String url = "https://developer.huawei.com/consumer/cn/";
SafetyDetect.getClient(this).urlCheck(url, appId, UrlCheckThreat.MALWARE, UrlCheckThreat.PHISHING).addOnSuccessListener(this, new OnSuccessListener<UrlCheckResponse >(){
    @Override
    public void onSuccess(UrlCheckResponse urlResponse) {
        if (urlResponse.getUrlCheckResponse().isEmpty()) {
        // 无威胁
        } else {
        // 存在威胁!
        }
    }
}).addOnFailureListener(this, new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        // 与服务通信发生错误.
        if (e instanceof ApiException) {
            // HMS发生错误的状态码及对应的错误详情.
            ApiException apiException = (ApiException) e;
            Log.d(TAG, "Error: " + CommonStatusCodes.getStatusCodeString(apiException.getStatusCode()));
        // 注意:如果状态码是SafetyDetectStatusCode.CHECK_WITHOUT_INIT,
        // 这意味着您未调用initUrlCheck()或者调用未完成就发起了网址检测请求,
        // 或者在初始化过程中发生了内部错误需要重新进行初始化,需要重新调用initUrlCheck()
        } else {
            // 发生未知类型的异常.
            Log.d(TAG, "Error: " + e.getMessage());
        }
    }
});

获取网址检测的响应,调用返回对象UrlCheckResponsegetUrlCheckResponse方法,返回List<UrlCheckThreat>,包含检测到的URL威胁类型。若该列表为空,则表示未检测到威胁,否则,可调用UrlCheckThreat中的getUrlCheckResult取得具体的威胁代码。示例代码如下:

final EditText testRes = getActivity().findViewById(R.id.fg_call_urlResult);
List<UrlCheckThreat> list = urlCheckResponse.getUrlCheckResponse();
if (list.isEmpty()) {
        testRes.setText("ok");
    }
else{
        for (UrlCheckThreat threat : list) {
            int type = threat.getUrlCheckResult();
        }
    }

3. 关闭网址检测会话:
如果您的应用不再使用或长时间不再调用网址检测接口,请调用shutdownUrlCheck方法关闭网址检测会话,释放资源。

SafetyDetect.getClient(this).shutdownUrlCheck();

三位一体保障应用运行安全,高效预防客流损失
App如何避免手动输入密码造成的安全风险?
如何防止手机被root产生的风险?

>>访问华为安全检测服务官网,了解更多相关内容
>>获取华为安全检测服务开发指导文档
>>华为HMS Core官方论坛
>>华为安全检测服务开源仓库地址:GitHubGitee

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

{{o.name}}


{{m.name}}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/70487.html

(0)
上一篇 2021年8月11日
下一篇 2021年8月11日

相关推荐

发表回复

登录后才能评论