1

通过 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;
}

所以请帮我解决这个问题

感谢和问候

4

1 回答 1

1

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

将文档 ID 与 Drive API 一起使用

如果您有权访问该文件,则可以对照 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) a 403(Access denied) 或404(Not Found)。如果它返回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"
}

参考

于 2020-12-11T13:41:49.083 回答