使用Google Node.js客户端调用安全浏览API时Data属性为空
Google Safer Browsing API调用异常问题
我开发了一个服务,通过官方Node.js客户端调用Google Safer Browsing API查询URL。目前遇到的问题是:除谷歌测试URL(http://malware.testing.google.test/testing/malware/*)外,所有在浏览器或Google透明度报告中标记为恶意的URL,调用该服务时均返回空data对象,HTTP响应码为200,可排除密钥配置错误。我发现很多人遇到过相同问题但未找到解决方案。
服务代码
import { Response } from './interfaces/response'; import { google } from 'googleapis'; export class GoogleSafeBrowsingBaseService { protected getReport = async (url: string): Promise<Response> => { const safebrowsing = google.safebrowsing({ version: 'v4', auth: process.env.GSB_KEY }); return safebrowsing.threatMatches .find({ requestBody: { client: { clientId: process.env.GSB_CLIENT, clientVersion: process.env.GSB_VER, }, threatInfo: { threatTypes: [ 'MALWARE', 'SOCIAL_ENGINEERING', 'UNWANTED_SOFTWARE', 'POTENTIALLY_HARMFUL_APPLICATION', ], platformTypes: ['ANY_PLATFORM', 'PLATFORM_TYPE_UNSPECIFIED'], threatEntryTypes: ['URL'], threatEntries: this.getUrlVariants(url).map((variant) => ({ url: variant, })), }, }, }) .then(({ data }) => Object.keys(data).length ? <Response>data : <Response>{ matches: [] }, ); }; private getUrlVariants = (url: string): string[] => { const parsedUrl = new URL(url.trim()); parsedUrl.hash = ''; if (!parsedUrl.pathname.endsWith('/')) { parsedUrl.pathname += '/'; } const results: string[] = [ `http://${parsedUrl.host}/`, `https://${parsedUrl.host}/`, `http://${parsedUrl.host}${parsedUrl.pathname}`, `https://${parsedUrl.host}${parsedUrl.pathname}`, ]; if (parsedUrl.search) { results.push( `http://${parsedUrl.host}${parsedUrl.pathname}${parsedUrl.search}`, `https://${parsedUrl.host}${parsedUrl.pathname}${parsedUrl.search}`, ); } return results; }; }
已做的URL处理和配置确认
URL处理(按文档要求)
- 移除URL片段(如
#someanchor) - 为路径添加末尾斜杠
- 去除URL中的空格(控制器已完成此处理)
配置确认
- 使用的API密钥已正确锁定到服务器IP
- API密钥已在Google Cloud Console中配置了Google Safer Browsing的访问权限
GSB_CLIENT、GSB_VER、GSB_KEY三个环境变量的值均正确无误
测试URL情况(撰写时在Google透明度报告中标记为恶意)
http://business.standardcontactverify.com/case/113458020784789:HTTP 200,返回空data对象(预期应返回包含匹配信息的对象)http://malware.testing.google.test/testing/malware/*:谷歌测试URL,HTTP 200,data属性正常填充(符合预期)https://business.verifysecuritypolicy.com/case/113458020784789:HTTP 200,返回空data对象(预期应返回包含匹配信息的对象)
恳请提供解决该问题的相关信息。
内容的提问来源于stack exchange,提问作者Ste TSC
相关产品推荐
相关产品推荐

