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 und Ordner, bei denen der Benutzer der Eigentümer ist, und prüft, ob diese öffentlich zugänglich sind.

Was wird gefunden?

  • Elemente mit dem Status: "Jeder, der über den Link verfügt" (Anyone with link)
  • Elemente 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 (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. WICHTIG: Achten Sie darauf, dass im Dropdown-Menü "Version" zwingend v3 ausgewählt ist.
    • Das Skript ist für die API v3 geschrieben und funktioniert nicht mit v2.
  4. Klicken Sie auf Hinzufügen.
    • 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.1 (Mit Typ-Erkennung & Datenschutz)
 * * ZWECK:
 * Durchsucht das gesamte Google Drive des ausführenden Benutzers nach Dateien/Ordnern,
 * die öffentlich oder per Link für "Jeden" freigegeben sind.
 * Erstellt einen Bericht in einer neuen Google Tabelle.
 *
 * VORAUSSETZUNG:
 * Der Dienst "Drive API" (zwingend Version 3) muss im Editor unter "Dienste" aktiviert sein.
 */

function generatePublicFileReport() {
  
  // --- KONFIGURATION & SETUP ---
  
  var timestamp = new Date().toLocaleString();
  var filename = "Sicherheitsbericht: Öffentliche Dateien (" + timestamp + ")";
  
  var spreadsheet = SpreadsheetApp.create(filename);
  var sheet = spreadsheet.getActiveSheet();
  
  var outputData = [];
  
  // Kopfzeile definieren (Jetzt mit "Typ")
  outputData.push(["Dateiname", "Typ", "Link zur Datei", "Zugriffsart"]);

  Logger.log("Starte Scan-Vorgang...");

  
  // --- HAUPTPROZESS: SUCHE VIA DRIVE API ---
  
  var pageToken;
  var count = 0;
  
  do {
    // Abfrage an die Drive API v3
    // WICHTIG: Wir fragen jetzt auch 'mimeType' ab, um Ordner zu erkennen
    var result = Drive.Files.list({
      q: "'me' in owners and trashed = false", 
      pageSize: 1000, 
      pageToken: pageToken,
      fields: "nextPageToken, files(name, mimeType, webViewLink, permissions(type, allowFileDiscovery))" 
    });

    var files = result.files;
    
    if (files && files.length > 0) {
      
      for (var i = 0; i < files.length; i++) {
        var file = files[i];
        var perms = file.permissions;
        
        if (perms) {
          for (var p = 0; p < perms.length; p++) {
            var perm = perms[p];
            
            if (perm.type === 'anyone') {
              
              var accessType = perm.allowFileDiscovery ? "Öffentlich im Web (Suchmaschinen)" : "Jeder mit Link";
              
              // Typ-Erkennung: Ist es ein Ordner?
              var typeLabel = (file.mimeType === 'application/vnd.google-apps.folder') ? "Ordner" : "Datei";
              
              // Daten zum Speicher hinzufügen (inkl. Typ an 2. Stelle)
              outputData.push([file.name, typeLabel, file.webViewLink, accessType]);
              count++;
              break; 
            }
          }
        }
      }
    }
    
    pageToken = result.nextPageToken; 
    
  } while (pageToken);

  
  // --- AUSGABE ---
  
  if (outputData.length > 0) {
    // Bulk-Write für 4 Spalten
    sheet.getRange(1, 1, outputData.length, 4).setValues(outputData);
    
    sheet.getRange("A1:D1").setFontWeight("bold");
    sheet.setFrozenRows(1);
  }

  Logger.log("Scan beendet. " + count + " Elemente 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. Öffnen Sie das Ausführungsprotokoll (unten im Editor) für den Link zur Tabelle.