【问题标题】:Check legitimacy of google link through API通过API检查google链接的合法性
【发布时间】:2021-03-22 17:05:32
【问题描述】:

通过 API 检查 google 链接的合法性。我在我的 visualforce 页面中有输入文本区域,用户可以在其中输入谷歌驱动器文档、工作表或任何谷歌驱动器文件 URL。我想检查该 URL 是否是真正的谷歌驱动文件 URL。

我也搜索了这个要求,我找到了 2 个 API,但这些 API 只检查输入的 URL 是否可以安全浏览。

安全浏览API链接:https://developers.google.com/safe-browsing/v4/get-started

我也通过硬编码 url 部分尝试了这段代码,但我们只想使用 API 进行检查。

var copyandpastelinkvar = document.getElementById("{!$Component.linkid}").value; //Getting input text area value
var resultlink = copyandpastelinkvar.startsWith("https://docs.google.com/");
if(resultlink){
       document.getElementById("{!$Component.hdnField}").value = copyandpastelinkvar;
       document.getElementById("{!$Component.targetName}").value = copyandpastelinkvar;
       document.getElementById("{!$Component.hdnField2}").value = true;
       return false;
} else {
       document.getElementById("{!$Component.hdnField2}").value = false;    //Link is not gdrive link
       document.write('Link is not google drive link');
       return true;
}

所以请帮我解决这个问题

感谢和问候

【问题讨论】:

  • 我认为你应该阅读这个 API 的定义。如果您的驱动器文件在安全浏览列表中,那么所有谷歌驱动器都将在安全浏览列表中。
  • 他们在安全浏览 API 的概述中提供了以下信息:-“安全浏览 API (v4) 让您的客户端应用程序根据 Google 不断更新的不安全网络资源列表检查 URL。不安全网络资源的示例是社会工程网站(网络钓鱼和欺骗性网站)以及托管恶意软件或垃圾软件的网站。在安全浏览列表中找到的任何 URL 都被视为不安全“表示安全浏览列表仅包含不安全的 URL。我必须检查该 URL 是否是谷歌驱动文件 URL?

标签: api google-chrome google-drive-api google-drive-picker


【解决方案1】:

你可以采取两种方法,绕过检查URL的需要,如果你只使用谷歌文档,那么你可以从链接中取出相关信息,建立一个你知道是安全的链接。

在 Drive API 中使用文档 ID

如果您有权访问该文件,则可以对照 Drive API 进行检查。

例如,像这样的正则表达式:

/(https:\/\/docs\.google\.com\/)(.+)(\/d\/)(.{44})/

返回第四个捕获组(.{44}) 将为您提供文档 ID。然后,您可以对照 Drive API 进行检查,如果您收到 200 响应,那么您就会知道该 ID 是有效的。如果您收到任何其他回复,则可以将其视为无效而拒绝。

然后,您可以将给定的链接替换为您的脚本构建的链接。构建链接的方式是这样的:

let input = <THE LINK GIVEN>
let re = /(^https:\/\/docs\.google\.com\/)(.+)(\/d\/)(.{44})/
let matches = input.match(re)
let service = matches[2]
let id = matches[4]
let url = "https://docs.google.com/" + service + "/d/" + id

以一个简单的 HTTP 请求为例:

curl \
  'https://www.googleapis.com/drive/v3/files/[DOCUMENT_ID]?supportsAllDrives=true&fields=id&key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --compressed

从脚本访问链接

使用服务器端脚本,你可以尝试访问构造的链接,看看它返回什么状态码。

从上述正则表达式返回第二个捕获组将为您提供服务(电子表格、文档等),第四个捕获组将为您提供 ID。

然后,您可以使用合法格式构建 URL,并使用 Apps 脚本项目或其他服务器端代码检查 URL 是否返回 200(OK)、403(禁止访问)或 404(未找到)。如果它返回 404 是因为 ID 不存在,因此它可能不合法。 403 可能意味着它没有访问权限。

很遗憾,由于CORS 政策,您无法从客户端 JavaScript 运行它。尝试调用这些链接时,任何fetchXMLHttpRequest 都会失败。

对于一些服务器端代码,例如 Apps Script,它可能是这样的:

function checkLegitimacy(input){
  try {
    let re = /(^https:\/\/docs\.google\.com\/)(.+)(\/d\/)(.{44})/
    let matches = input.match(re)
    let service = matches[2]
    let id = matches[4]
    let url = "https://docs.google.com/" + service + "/d/" + id

    let response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true})
    if (response.getResponseCode() != 200 && response.getResponseCode() != 403){
      throw "Doesn't exist"
    } else {
      Logger.log("Link OK")
    }
  } catch(e){Logger.log("Invalid Link")}
}

function main(){
  checkLegitimacy("https://docs.google.com/spreadsheets/d/<REAL_ID>")
  // Returns "Link OK"
  checkLegitimacy("https://docs.google.com/spreadsheets/d/<FAKE_ID>")
  // Returns "Invalid Link"
  checkLegitimacy("https://badsite.com/spreadsheets/d/<REAL_ID>")
  // Returns "Invalid Link"
}

参考文献

【讨论】:

  • 感谢您的回复@iansedano。但我没有用户的访问令牌。用户只需在文本区域中复制粘贴该帐户的文件链接即可。
  • 如果您有权访问该文件,则可以使用自己的访问令牌,就像调用安全浏览 API 一样
  • 实际上我们没有文件的访问权限。我们只有文件的链接。所以你能建议我找到链接的任何方法是否是谷歌驱动文件链接。
  • 如果无法访问该文件,为什么还要检查其合法性?
  • 我们想将该链接存储在记录字段中。在保存之前,我想检查该链接是否是假的或不是谷歌驱动器文件链接。
猜你喜欢
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 2020-12-23
  • 2018-07-18
  • 1970-01-01
  • 2018-12-10
  • 2021-08-07
  • 1970-01-01
相关资源
最近更新 更多