Проверка легитимности ссылки Google через API

#api #google-chrome #google-drive-api #google-drive-picker

#API #google-chrome #google-drive-api #google-drive-picker

Вопрос:

Проверьте легитимность ссылки Google через API. У меня есть текстовая область ввода на моей странице visualforce, где пользователь вводит документы Google Drive, sheet или любой URL-адрес файла Google Drive. И я хочу проверить, является ли URL-адрес реальным URL-адресом файла Google Drive или нет.

Также я искал это требование и нашел 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;
}
 

Поэтому, пожалуйста, помогите мне в этом

Спасибо и с уважением

Комментарии:

1. Я думаю, вам следует прочитать определение того, что делает этот API. Если бы ваш файл на диске был в списках безопасного просмотра, тогда весь Google Диск был бы в списке безопасного просмотра.

2. Они предоставили следующую информацию в обзоре API безопасного просмотра: — «API безопасного просмотра (версия 4) позволяют вашим клиентским приложениям проверять URL-адреса на соответствие постоянно обновляемым спискам небезопасных веб-ресурсов Google. Примерами небезопасных веб-ресурсов являются сайты социальной инженерии (фишинговые и мошеннические сайты) и сайты, на которых размещены вредоносные программы или нежелательное программное обеспечение. Любой URL-адрес, найденный в списке безопасного просмотра, считается небезопасным » Означает, что список безопасного просмотра содержит только небезопасные URL-адреса. И я должен проверить, является ли этот URL-адрес URL-адресом файла Google Drive или нет?

Ответ №1:

Вы можете воспользоваться двумя подходами и обойти необходимость проверки URL-адреса, если вы используете исключительно Документы Google, тогда вы можете извлечь соответствующую информацию из ссылки и создать ссылку, которая, как вы знаете, безопасна.

Используйте идентификатор документа с помощью Drive API

Если у вас есть доступ к файлу, вы можете проверить его с помощью Drive API.

Например, с помощью регулярного выражения, подобного:

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

Возврат четвертой группы захвата (.{44}) даст вам идентификатор документа. Затем вы можете проверить это с помощью Drive API, и если вы получите ответ 200 от этого, тогда вы будете знать, что идентификатор действителен. Если вы получите какой-либо другой ответ, вы можете отклонить его как недействительный.

Затем вы можете заменить данную ссылку на ссылку, созданную вашим скриптом. Способ, которым вы могли бы создать ссылку, выглядит следующим образом:

 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=trueamp;fields=idamp;key=[YOUR_API_KEY]' 
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' 
  --header 'Accept: application/json' 
  --compressed
 

Перейдите по ссылке из скрипта

Используя сценарии на стороне сервера, вы можете попытаться перейти по созданной ссылке, чтобы посмотреть, какой код состояния она возвращает.

Возврат второй группы захвата из приведенного выше регулярного выражения даст вам сервис (электронные таблицы, документы и т.д.), четвертая группа захвата даст вам идентификатор.

Затем вы можете создать URL-адрес в допустимом формате и использовать проект Apps Script или другой серверный код, чтобы проверить, возвращает ли URL-адрес a 200 (OK) a 403 (доступ запрещен) или 404 (не найден). Если он возвращает 404 его, потому что идентификатор не существует, и поэтому он, скорее всего, не будет законным. 403 это может означать, что у него просто нет доступа.

К сожалению, вы не можете запустить его с JavaScript на стороне клиента из-за политики CORS. Любой fetch или XMLHttpRequest завершится неудачей при попытке вызвать эти ссылки.

С некоторым серверным кодом, таким как 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 amp;amp; 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"
}
 

Ссылки

Комментарии:

1. Спасибо за ваш ответ @iansedano. Но у меня нет токена доступа пользователя. Пользователи просто копируют и вставляют ссылку на файл из своей учетной записи в текстовую область.

2. Если у вас есть доступ к файлу, вы можете использовать свой собственный токен доступа, точно так же, как вы вызываете API безопасного просмотра

3. На самом деле у нас нет доступа к файлу. У нас есть только ссылка на файл. Поэтому, пожалуйста, не могли бы вы предложить мне какой-либо способ найти ссылку на файл Google Drive или нет.

4. Если нет доступа к файлу, зачем вам проверять его легитимность?

5. Мы хотим сохранить эту ссылку в поле записи. И перед сохранением я хочу проверить, не является ли эта ссылка поддельной или отличной от ссылки на файл с Google Диска.