Skip to main content

Tool: Audit für öffentliche Google Drive Dateien

Übersicht

Dieses Skript dient der Sicherheitsüberprüfung des eigenen Google Drive Accounts. Es durchsucht automatisch alle Dateien, bei denen der Benutzer der Eigentümer ist, und prüft, ob diese öffentlich zugänglich sind.

Was wird gefunden?

  • Dateien mit dem Status: "Jeder, der über den Link verfügt" (Anyone with link)
  • Dateien mit dem Status: "Öffentlich im Web" (Public / Searchable)

Das Skript generiert einen Bericht in einer neuen Google Tabelle mit Zeitstempel.


Voraussetzung & Einrichtung

Da das Skript sehr viele Dateien schnell verarbeiten muss, nutzt es die Google Drive API v3 (Advanced Service). Diese muss einmalig aktiviert werden.

Schritt 1: Skript anlegen

  1. Öffnen Sie script.google.com oder erstellen Sie ein neues Skript aus Google Drive heraus.
  2. Benennen Sie das Projekt (z. B. Security-Audit-Tool).

Schritt 2: Drive API aktivieren (WICHTIG!)

Damit das Skript funktioniert, muss der Drive-Dienst hinzugefügt werden:

  1. Klicken Sie im Editor links in der Leiste auf Dienste (Services) +.
  2. Suchen Sie in der Liste nach Drive API.
  3. Wählen Sie es aus und klicken Sie auf Hinzufügen.
    • Hinweis: Der Identifier muss Drive heißen (Standard).

Schritt 3: Code einfügen

Löschen Sie allen vorhandenen Code im Editor und fügen Sie das untenstehende Skript ein.


Das Skript

/**
 * SKRIPT: Audit öffentlicher Google Drive Dateien
 * VERSION: 2.0 (Bulk-Write & API v3 Optimized)
 * * ZWECK:
 * Durchsucht das gesamte Google Drive des ausführenden Benutzers nach Dateien,
 * die öffentlich oder per Link für "Jeden" freigegeben sind.
 * Erstellt einen Bericht in einer neuen Google Tabelle.
 *
 * VORAUSSETZUNG:
 * Der Dienst "Drive API" (Version 3) muss im Editor unter "Dienste" aktiviert sein.
 */

function generatePublicFileReport() {
  
  // --- KONFIGURATION & SETUP ---
  
  // Zeitstempel für den Dateinamen generieren (Format: Datum, Uhrzeit)
  var timestamp = new Date().toLocaleString();
  var filename = "Sicherheitsbericht: Öffentliche Dateien (" + timestamp + ")";
  
  // Neue Google Tabelle erstellen
  var spreadsheet = SpreadsheetApp.create(filename);
  var sheet = spreadsheet.getActiveSheet();
  
  // Datenspeicher initialisieren (sammelt alle Ergebnisse vor dem Schreiben)
  var outputData = [];
  
  // Kopfzeile definieren
  outputData.push(["Dateiname", "Link zur Datei", "Zugriffsart"]);

  Logger.log("Starte Scan-Vorgang für: " + Session.getActiveUser().getEmail());

  
  // --- HAUPTPROZESS: SUCHE VIA DRIVE API ---
  
  var pageToken; // Marker für die Seitenblätterung bei vielen Dateien
  var count = 0; // Zähler für gefundene Treffer
  
  do {
    // Abfrage an die Google Drive API (v3)
    // Filter: Nur Dateien, die mir gehören ('me' in owners) und nicht im Papierkorb sind
    var result = Drive.Files.list({
      q: "'me' in owners and trashed = false", 
      pageSize: 1000, // Anzahl der Dateien pro Abruf (Maximalwert für Performance)
      pageToken: pageToken,
      fields: "nextPageToken, files(name, webViewLink, permissions(type, allowFileDiscovery))" 
    });

    var files = result.files;
    
    // Prüfen, ob Dateien im aktuellen Paket enthalten sind
    if (files && files.length > 0) {
      
      // Jede Datei einzeln auf Berechtigungen prüfen
      for (var i = 0; i < files.length; i++) {
        var file = files[i];
        var perms = file.permissions;
        
        if (perms) {
          // Durchlaufen aller Berechtigungseinträge der Datei
          for (var p = 0; p < perms.length; p++) {
            var perm = perms[p];
            
            // Kriterium: Typ ist 'anyone' (bedeutet: Jeder mit Link oder Öffentlich)
            if (perm.type === 'anyone') {
              
              // Unterscheidung: Ist die Datei suchbar (Public) oder nur via Link erreichbar?
              var accessType = perm.allowFileDiscovery ? "Öffentlich im Web (Suchmaschinen)" : "Jeder mit Link";
              
              // Treffer zum Datenspeicher hinzufügen
              outputData.push([file.name, file.webViewLink, accessType]);
              count++;
              
              // Sobald ein öffentlicher Zugriff gefunden wurde, zur nächsten Datei springen
              break; 
            }
          }
        }
      }
    }
    
    // Marker für die nächste Seite setzen (falls mehr als 1000 Dateien existieren)
    pageToken = result.nextPageToken; 
    
  } while (pageToken); // Schleife läuft, solange es noch weitere Seiten gibt

  
  // --- AUSGABE: SCHREIBEN IN DIE TABELLE ---
  
  if (outputData.length > 0) {
    // Bulk-Write: Schreibt alle Daten auf einmal (performant & ressourcensparend)
    sheet.getRange(1, 1, outputData.length, 3).setValues(outputData);
    
    // Visuelle Formatierung der Kopfzeile
    sheet.getRange("A1:C1").setFontWeight("bold");
    sheet.setFrozenRows(1); // Erste Zeile fixieren
  }

  Logger.log("Scan beendet. " + count + " kritische Dateien gefunden.");
  Logger.log("Link zum Bericht: " + spreadsheet.getUrl());
}

Ausführung & Ergebnis

  1. Wählen Sie oben im Editor die Funktion generatePublicFileReport aus.
  2. Klicken Sie auf Ausführen.
  3. Beim ersten Mal: Bestätigen Sie die Zugriffsberechtigungen (Ihr Account -> Erweitert -> Unsicher -> Zulassen).
  4. Warten Sie, bis das Skript durchgelaufen ist.
  5. Öffnen Sie das Ausführungsprotokoll (unten im Editor).
  6. Klicken Sie auf den Link zur generierten Google Tabelle.

Hinweis: Wenn die Tabelle leer ist (nur Überschriften), wurden keine öffentlichen Dateien gefunden, deren Eigentümer Sie sind.