问题场景
某开发者打造了一款轻量级浏览器,核心功能是极速浏览、搜索与下载,因为高效便捷,应用很快达到了千万级的下载量,用户数量直线攀升,也就是在这个时候,隐患随之产生。原来为了方便用户使用,浏览器增加了二维码识别功能,正是这个功能,很多用户在扫码的时候,被恶意导向了不安全的网站。恶意网址的导流,导致很多用户直接卸载了浏览器,用户量因而大幅下降。明明增加功能是为了增强用户体验感,由于安全隐患却适得其反,这时候该怎么办呢?
这里我们涉及到的安全问题是,恶意网址入侵的问题。
什么是恶意网址入侵?
恶意网址入侵,也称恶意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());
}
}
});
获取网址检测的响应,调用返回对象UrlCheckResponse的getUrlCheckResponse方法,返回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官方论坛
>>华为安全检测服务开源仓库地址: GitHub、Gitee
点击右上角头像右方的关注,第一时间了解华为移动服务最新技术~