如何在我的 Android 浏览器中启用安全搜索

Posted

技术标签:

【中文标题】如何在我的 Android 浏览器中启用安全搜索【英文标题】:How to enable Safe Search in my Android browser 【发布时间】:2019-02-17 19:13:32 【问题描述】:

要求

我的浏览器要求在浏览时启用/禁用安全搜索。

开启Google Safe Search Page

使用安全搜索阻止 Google 上的露骨结果

您可以过滤 Google 上的露骨搜索结果,例如色情内容、 使用安全搜索设置。安全搜索并非 100% 准确。但它 可以帮助您避免在您的 手机、平板电脑或计算机。

如您所知,当开启安全搜索(如谷歌浏览器)时,用户不会看到许多威胁类型、受感染页面、社会工程页面、色情等的结果,并且会阻止来自 Google 的露骨图片、视频和网站搜索结果

这在 chrome、google app 等谷歌平台上可用。所以我得到了这个任务但是我可以在我的浏览器中启用它吗?

找到的资源

我得到了safe search api的提示,但不知道对我有没有帮助,因为如果我用这个,我可以做两件事,

每次用户打开网站时我都需要调用 api (Lookup api) 或者我可以下载所有 url 数据。 (Update api)

问题

    如何在我的 WebView 中过滤 Google 搜索结果? www.google.comwww.bing.com等搜索引擎是否提供了某种方式? 如果上述方法不可行,是否只有在发现恶意软件、感染时致电safe browsing lookup api 并执行阻止/警告?

如果可以的话,有朋友可以给我一些提示吗?

【问题讨论】:

您能告诉我您使用的最低和最高操作系统版本是多少吗? @AndyDeveloper min=16 & max=28 AFAIK,低于 27 操作系统版本是不可能的。但是您可以从 27 版本启用它。对于低于 27 的版本,您必须使用 Safe search api。 @AndyDeveloper 如何为 27 启用它?也许我会从中得到一些提示。 @Khemraj 你在为你的浏览器使用 webview 对吗? 【参考方案1】:

我认为安全浏览和安全搜索是两个不同的主题。 第一个是确保我们访问的网站是安全的,而不是恶意软件。例如,将 http 请求转换为 https。 参考:https://developers.google.com/safe-browsing/ 第二个是确保用户不会访问色情等露骨内容。

对于安全浏览,我们可以通过在清单中启用 EnableSafeBrowsing 来使用上述 API。

但是,我不确定这是否有助于处理安全搜索案例。

【讨论】:

【参考方案2】:

如果你查看开发者网站,就会清楚地提到

如果您的应用面向 android 7.1(API 级别 25)或更低版本,您可以通过添加以下内容来选择您的 WebView 对象不检查 URL 与 Google Safe Browsing's 不安全网站列表 应用清单文件中的元素:

<manifest>
<application>
    <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
               android:value="false" />
    ...
 </application>
</manifest>

对于 Android 8.0,明确提到

虽然 EnableSafeBrowsing 的默认值为 true,但有时您可能只想启用安全浏览 有条件地或禁用它。 Android 8.0(API 级别 26)及更高版本 支持使用 setSafeBrowsingEnabled()。以较低 API 编译的应用程序 级别不能使用 setSafeBrowsingEnabled() 并且应该更改值 将清单中的 EnableSafeBrowsing 设置为 false 以禁用该功能 对于 WebView 的所有实例。

如果您以 Android 8.1(API 级别 27)或更高版本为目标,您可以以编程方式定义您的应用如何响应已知威胁:

您可以控制您的应用是否向 Safe 报告已知威胁 正在浏览。 您可以让您的应用程序自动执行特定操作,例如 回到安全状态——每次遇到一个 归类为已知威胁。

请查看以下示例代码,它展示了如何指示应用的 WebView 实例在遇到已知威胁后始终返回安全状态:

MyWebActivity.java

private WebView mSuperSafeWebView;
private boolean mSafeBrowsingIsInitialized;

@Override
protected void onCreate(Bundle savedInstanceState)

  super.onCreate(savedInstanceState);

  mSuperSafeWebView = new WebView(this);
  mSuperSafeWebView.setWebViewClient(new MyWebViewClient());
  mSafeBrowsingIsInitialized = false;

  mSuperSafeWebView.startSafeBrowsing(this, new ValueCallback<Boolean>() 
    @Override
    public void onReceiveValue(Boolean success) 
        mSafeBrowsingIsInitialized = true;
        if (!success) 
            Log.e("MY_APP_TAG", "Unable to initialize Safe Browsing!");
          
      
   );

用于启用或禁用安全浏览。使用以下方法。

mSuperSafeWebView.getSettings().setSafeBrowsingEnabled(true);

MyWebViewClient.java

public class MyWebViewClient extends WebViewClient 
   // Automatically go "back to safety" when attempting to load a website that
   // Google has identified as a known threat. An instance of WebView calls
   // this method only after Safe Browsing is initialized, so there's no
   // conditional logic needed here.
   @Override
   public void onSafeBrowsingHit(WebView view, WebResourceRequest request,
        int threatType, SafeBrowsingResponse callback) 
    // The "true" argument indicates that your app reports incidents like
    // this one to Safe Browsing.
    callback.backToSafety(true);
    Toast.makeText(view.getContext(), "Unsafe web page blocked.",
            Toast.LENGTH_LONG).show();
   

如果您想了解WebView security version by version,请查看。

【讨论】:

有感染网站时会调用onSafeBrowsingHit()方法吗? 是的。当您看到 MyWebViewClient.java 时,请查看评论,其中明确提到“尝试加载 Google 已识别为已知威胁的网站时自动返回安全状态”。 但这适用于单个页面,而不是安全搜索。安全搜索功能过滤谷歌的结果。 另外,这个功能意味着,我必须为 您可以使用此方法启用或禁用安全浏览 "webView.getSettings().setSafeBrowsingEnabled(true);"【参考方案3】:

添加到@Andy Developer answer,您可以执行 Android 版本检查,如果低于 API 27,您可以使用 Safe Browsing API。

为确保您的浏览器获得最佳用户体验,我建议您实施更新 API 并设置本地数据库。这是当今您可以在 Play 商店中找到的浏览器的常用方法。

来自Documentation:

更新 API (v4)

更新 API 可让您的客户端应用程序下载 本地客户端的安全浏览列表的加密版本 网址检查。

更新 API 专为需要 高频率、低延迟的判决。几个网络浏览器和 软件平台使用此 API 来保护大量用户。

如果您担心查询 URL 的隐私或网络请求引起的延迟,请使用更新 API。

通过这样做,您可以为低端用户和高端用户提供此功能。

注意:WebView已经在native中实现了安全浏览API,所以是一样的。如果您只想实现 Update API 而不是@Andy Developer 提出的答案,仍然值得推荐,因为它提供了统一性。

【讨论】:

感谢您的回答,但这是否说明了其他问题。 是的,这是关于如何在您之前提到的 Android 版本中实施安全搜索浏览的建议。当然这里没有一步一步的编码,而是给你一个关于如何在你的应用中应用的指南/方向 你是对的 Angus,顺便说一句,获取数据并对从更新 api 获取的数据编写逻辑是非常典型的,所以我不会考虑实现它。你可以查看文档,谷歌说这很难实现。我也没有在查找/更新 api 中进行选择,我陷入了问题 1。 这里的过滤器是什么意思?过滤恶意网站或?【参考方案4】:

我们当然可以使用 Google 的安全浏览 API 来满足这个要求,这个 API 的目的就是为了这个。

So, the scenario can be one like this:
我们可以在后台安装一个 URL Checker 引擎 它使用包含要检查的 URL 的队列并使用 Google 的安全浏览 API 进行检查 可以将结果回调到主线程以保护浏览数据

祝你好运)

【讨论】:

你能举个例子吗,我如何在 webview 中过滤谷歌结果。我也有这个场景,但我不知道如何执行它。

以上是关于如何在我的 Android 浏览器中启用安全搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Studio 中启用 ProGuard 混淆功能?

如何在我的 android 应用程序中仅启用英文键盘?

如何在 android 中以编程方式在小米手机安全应用程序中为我的应用程序启用自动启动选项

如何在 Volley NetworkImageView 中启用重定向?

Android Studio 正确编译项目,Gradlew 没有启用数据绑定

如何在我的站点中启用来自 Google 的此凭据选择器?