绕过Google云端硬盘链接的病毒扫描并获取确认ID

时间:2018-10-27 20:37:47

标签: javascript xmlhttprequest

this thread的帮助下,我想到了下面的代码。如何获取Google云端硬盘文件ID,打开指向该文件的直接链接,并获取流式传输超过100 MB所需的病毒扫描确认ID,然后弄乱该链接?我有点卡在xhr部分。

function fixGoogleDriveURL(url) {
  if (url.indexOf('drive.google.com') !== -1) {
    var DocIDfull = url;
    var DocIDstart = DocIDfull.indexOf('open?id=');
    if (DocIDstart == -1) {
      // invalid
      return url;
    }
    var DocID = DocIDfull.slice(DocIDstart+8);
    url = 'https://drive.google.com/uc?export=download&id=' + DocID;
    var xhr = new XMLHttpRequest();
    xhr.onload = function () {
      if (xhr.readyState === xhr.DONE) {
        if (xhr.status === 200) {
          var token = xhr.responseText.match("/confirm=([0-9A-Za-z]+)&/");
          window.location.replace(url + '&confirm=' + token[1]);
          // should I add url += '&confirm=' + token[1] here instead of window.location?
        }
      }
    };
    xhr.open("GET", url);
    xhr.send();
  }
  return url;
}
console.log(fixGoogleDriveURL('https://drive.google.com/open?id=1C25uoL6nIqqNhex3wm8VwODsO2q2pXBt') + "\n<-- should output:\nhttps://drive.google.com/uc?export=download&id=1C25uoL6nIqqNhex3wm8VwODsO2q2pXBt&confirm=XXXXX");

1 个答案:

答案 0 :(得分:1)

Google未明确允许使用客户端JavaScript抓取GDrive,因此您的Ajax调用/ XHR失败。

解决此限制的唯一方法是在中间使用代理,该代理将转发Google的网站代码,但添加适当的访问控制允许来源标头。 您可以为此使用自己的服务器(某些最小的服务器端脚本代码即可),也可以使用诸如http://multiverso.me/AllOrigins/https://corsproxy.github.io/之类的服务为您代理请求。

AllOrigins站点上有一些与jQuery一起使用的示例代码,但基本上,它们通过URI编码要访问的URL并将该字符串附加到站点的代理URL上来工作。 这是freecodecamp.org的一篇文章,概述了如何使用这些服务(跳至Don’t Let CORS Stop You!部分。

注意:一个安全建议:这些服务现在可以正常工作,但是明天可能会倒闭,开始提供恶意数据,或者将您的文件请求重定向到完全不同的文件或完全不同的网站。由您决定是否要信任这些陌生人。