Mit Remote-Host-Code Verstöße beheben

Im Chrome Web Store wird alles, was durch einen Remote-gehosteten Code, RHC, wird von dem Browser ausgeführt, der von einem anderen Ort als dem eigenen Dateien der Dateiendung. zum Beispiel JavaScript und WASM. Nicht enthalten Daten oder Dinge wie JSON oder CSS.

Warum ist RHC nicht mehr zulässig?

Bei Manifest V3-Erweiterungen muss jetzt alle Code gebündelt werden, den sie in den Dateien verwenden die Erweiterung selbst. In der Vergangenheit konnten Sie Skript-Tags aus einer beliebigen URL im Web.

Mir wurde gesagt, dass meine Erweiterung RHC hat. Was ist da los?

Wenn Ihre Erweiterung bei der Überprüfung mit einem Blaue Argon-Fehler abgelehnt wurde, dass Ihre Erweiterung einen remote gehosteten Code verwendet. Dies ist normalerweise das Ergebnis, wenn eine Erweiterung versucht, ein Skript-Tag mit einem Remote- d.h. aus dem offenen Web und nicht aus den Dateien Erweiterung) oder Abrufen einer Ressource, um sie direkt auszuführen.

RHC erkennen

Wenn du einmal weißt, worauf du achten musst, ist es nicht schwer, das RHC-Problem zu erkennen. Erstens: suchen Sie nach den Zeichenfolgen "http://" oder „https://“ in Ihrem Projekt. Wenn Sie eine RHC-Verstöße gefunden haben, können Sie sie wahrscheinlich anhand dieser Informationen ausfindig machen. Wenn Sie haben ein vollständiges Build-System oder verwenden Sie Abhängigkeiten aus npm oder einem anderen suchen Sie in der kompilierten Version des Codes. da dies vom Store bewertet wird. Wenn Sie immer noch nicht suchen, wenden Sie sich als Nächstes an den One Stop-Support. Sie können wir die konkreten Verstöße erläutern und erläutern, was erforderlich ist, um Erweiterung so schnell wie möglich veröffentlicht.

Wenn eine Bibliothek den Code anfordert

Unabhängig davon, woher der Code stammt, darf RHC nicht verwendet werden. Dieses enthält Code, den Sie nicht erstellt haben, sondern lediglich als Abhängigkeit in Ihrem Projekt arbeiten. Einige Entwickler, die Firebase verwenden, hatten dieses Problem beim Remotezugriff Code wurde zur Verwendung in Firebase Auth eingefügt. Obwohl dies ein eigenen Mediathek (d.h. von Google selbst) stammen, gibt es keine Ausnahme für RHC. Du brauchst den Code so zu konfigurieren, dass er entweder den RHC entfernt oder das Objekt so aktualisiert, dass den Code zuerst ein. Bei einem Problem, bei dem es sich nicht um Ihr Code handelt das Laden von RHC, sondern einer Bibliothek, die Sie verwenden, wenden Sie sich bitte an den Autor der Bibliothek. Teilen Sie ihnen mit, und bitten Sie um eine Behelfslösung oder Code-Updates, um sie zu entfernen.

Was, wenn du nicht auf das Update der Mediathek warten möchtest

Einige Bibliotheken werden fast unmittelbar nach der Benachrichtigung ein Update versenden, aber oder sich die Zeit nehmen, das Problem anzugehen. Je nachdem, was bei dem spezifischen Verstoß auftritt, müssen Sie möglicherweise nicht warten, , um die Blockierung aufzuheben und eine erfolgreiche Überprüfung abzuschließen. Es gibt eine Reihe von Optionen für einen schnellen Wiedereinstieg zur Verfügung.

Code prüfen

Sind Sie sicher, dass der Code, der die Anfrage verursacht, benötigt wird? Wenn ja oder eine Bibliothek, die den Fehler verursacht, entfernt werden kann, und der Job ist erledigt.

Gibt es alternativ eine andere Bibliothek, die dieselben Funktionen bietet? Ausprobieren auf npmjs.com, GitHub oder anderen Websites nach weiteren Optionen, dieselben Anwendungsfälle.

Baumzittern

Wenn der Code, der den RHC-Verstoß verursacht, nicht tatsächlich verwendet wird, mithilfe von Tools automatisch gelöscht werden. Moderne Build-Tools wie webpack, Rollup und Vite (um nur einige zu nennen) haben das sogenannte Baumschütteln. Nach der Aktivierung in Ihrem Build-System alle nicht verwendeten Codepfade entfernen. Das kann bedeuten, dass Sie nicht nur eine konforme Version Ihres Codes, sondern auch eine schlankere und schnellere Version! Es ist wichtig, dass nicht alle Bibliotheken erschüttert werden können, viele aber schon. Einige in Tools wie Rollup und Vite ist das Baumwackeln standardmäßig aktiviert. Webpack muss konfiguriert werden, damit es aktiviert wird. Wenn Sie keinen Build verwenden als Teil der Erweiterung verwendet, aber Codebibliotheken verwenden, solltet ihr unbedingt prüfen, ob ihr ein Build-Tool in euren Workflow integriert. Erstellen können Sie sicherere, zuverlässigere und besser zu wartende Projekte schreiben.

Die Einzelheiten zur Implementierung von Treehaking hängen von Ihrem spezifischen Projekt ab. Um ein einfaches Beispiel mit Rollup zu nehmen, können Sie Treehaking einfach beim Kompilieren des Projektcodes. Wenn Sie z. B. eine Datei haben, die sich Firebase Auth heißt "main.js":

import { GoogleAuthProvider, initializeAuth } from "firebase/auth";

chrome.identity.getAuthToken({ 'interactive': true }, async (token) => {
  const credential = GoogleAuthProvider.credential(null, token);
  try {
    const app = initializeApp({ ... });
    const auth = initializeAuth(app, { popupRedirectResolver: undefined, persistence: indexDBLocalPersistence });
    const { user } = await auth.signInWithCredential(credential)
    console.log(user)
  } catch (e) {
    console.error(error);
  }
});

Dann müssen Sie lediglich Rollup die Eingabedatei mitteilen. Ein Plug-in Knotendateien @rollup/plugin-node-resolve und dem Namen der Ausgabe Datei erstellt wird.

npx rollup --input main.js --plugin '@rollup/plugin-node-resolve' --file compiled.js

Wenn Sie diesen Befehl in einem Terminalfenster ausführen, erhalten Sie eine generierte Version main.js-Datei in einer einzigen Datei namens compiled.js kompiliert.

Rollup kann einfach sein, ist aber auch sehr konfigurierbar. Sie können alle Arten Informationen zu komplexer Logik und Konfiguration finden Sie in der Dokumentation. Das Hinzufügen von Build-Tools wie dieses führt zu einem kleineren, effizienteren Code, In diesem Fall wurde das Problem mit remote gehostetem Code behoben.

Automatisches Bearbeiten von Dateien

Eine zunehmend verbreitete Methode zur Eingabe von remote gehostetem Code in Ihre Codebasis ist abhängig von einer einbezogenen Bibliothek. Wenn die Bibliothek X import-Bibliothek Y von einem CDN abgerufen haben, müssen Sie sie trotzdem aktualisieren, aus einer lokalen Quelle geladen. Mit modernen Build-Systemen können Sie Plug-ins, um eine Remote-Referenz zu extrahieren und direkt in Ihren Code einzufügen.

Das würde bedeuten, dass dieser Code wie folgt aussieht:

import moment from "https://unpkg.com/moment@2.29.4/moment.js"
console.log(moment())

Dann erstellen Sie ein kleines Rollup-Plug-in.

import { existsSync } from 'fs';
import fetch from 'node-fetch';

export default {
  plugins: [{
    load: async function transform(id, options, outputOptions) {
      // this code runs over all of out javascript, so we check every import
      // to see if it resolves as a local file, if that fails, we grab it from
      // the network using fetch, and return the contents of that file directly inline
      if (!existsSync(id)) {
        const response = await fetch(id);
        const code = await response.text();

        return code
      }
      return null
    }
  }]
};

Sobald Sie den Build mit dem neuen Plug-in ausführen, lautet jede Remote-import-URL unabhängig davon, ob es sich um unseren Code, eine Subabhängigkeit, Unterabhängigkeit oder irgendetwas anderes.

npx rollup --input main.js --config ./rollup.config.mjs --file compiled.js

Manuelles Bearbeiten von Dateien

Die einfachste Möglichkeit besteht darin, einfach den Code zu löschen, der den RHC verursacht. Öffnen in und löschen Sie die Zeilen, die gegen die Richtlinien verstoßen. Dies ist in der Regel nicht so ratsam, weil es anfällig ist und vergessen werden könnte. Sie sorgt dafür, die Verwaltung Ihres Projekts erschwerten, wenn eine Datei namens „library.min.js“ ist nicht Tatsächlich: library.min.js. Statt die RAW-Dateien zu bearbeiten, war die Möglichkeit, ein Tool wie patch-package zu verwenden. Das ist ein super leistungsstarke Option, mit der Sie Änderungen in einer Datei speichern können, anstatt -Datei selbst. Es basiert auf Patch-Dateien, genauso wie unterstützt Versionskontrollsysteme wie Git oder Subversion. Sie brauchen nur den Code manuell zu ändern, die diff-Datei zu speichern und patch-Paket mit den Änderungen, die Sie anwenden möchten. Eine vollständige Anleitung finden Sie in der Readme-Datei des Projekts. Wenn Sie ein Projekt patchen, können wir wirklich sollten Sie sich an das Projekt wenden, vorgelagerte Elemente. Während das Patchpaket die Verwaltung von Patches viel einfacher macht, nichts zu patchen ist noch besser.

Was zu tun ist, wenn der Code nicht verwendet wird

Wenn Codebasen wachsen, werden Abhängigkeiten (bzw. die Abhängigkeit einer Abhängigkeit oder Abhängigkeit) von ...) können nicht mehr verwendete Codepfade beibehalten. Wenn einer dieser Abschnitte Code zum Laden oder Ausführen von RHC enthält, muss er entfernt werden. Es egal, ob es tot oder ungenutzt ist. Wenn es nicht verwendet wird, sollte es entfernt werden, entweder durch Treehaking oder durch Patchen der Bibliothek.

Gibt es eine Behelfslösung?

Grundsätzlich nicht. RHC ist nicht zulässig. Es gibt jedoch nur wenige in denen dies ist zulässig ist. Dies sind fast immer Fälle, in denen das für keine andere Option unmöglich ist.

Nutzerskript-API

Nutzerskripts sind kleine Code-Snippets, die normalerweise vom ist für User Script-Manager wie TamperMonkey und Violentmonkey Es ist nicht möglich, dass diese Manager Code bündeln, der von Nutzern geschrieben wird, sodass die User Script API die Möglichkeit bietet, Code die vom Nutzer bereitgestellt werden. Dies ist kein Ersatz für chrome.scripting.executeScript oder andere Umgebungen zur Codeausführung erstellen. Nutzer müssen den Entwicklermodus aktivieren, um etwas ausführen zu können. Wenn der Chrome Web Store Das Filialbewertungsteam glaubt, dass diese Informationen auf andere Weise verwendet werden. (d.h. Code, der vom Nutzer bereitgestellt wurde) bestimmt ist, wird er möglicherweise abgelehnt oder aus dem Store entfernt wurde.

chrome.debugger

Über die chrome.debugger API können Erweiterungen mit das Chrome-Entwicklertools-Protokoll. Das ist das Protokoll, das auch für den Chrome-Entwicklertools und zahlreichen anderen Tools. Damit wird ein Erweiterung Remote-Code anfordern und ausführen kann. Genau wie bei Nutzerskripts ein Ersatz für chrome.scripting ist und die Nutzererfahrung deutlich verbessert. Während der Nutzung wird eine Warnleiste oben auf der . Wird das Banner geschlossen, wird die Fehlerbehebungssitzung gekündigt.

<ph type="x-smartling-placeholder">
</ph> Screenshot der Adressleiste in Chrome mit der Meldung „Debugger-Erweiterung hat mit der Fehlerbehebung für diesen Browser begonnen“
Screenshot der Adressleiste in Chrome mit der Meldung „Debugger-Erweiterung hat das Debugging dieses Browsers gestartet“

Sandbox-iFrames

Wenn Sie einen String als Code auswerten müssen und sich in einer DOM-Umgebung befinden (z.B. Content-Skript und im Gegensatz zu einem Erweiterungs-Service-Worker, ist eine weitere Option in einer Sandbox ausgeführte iFrames. Erweiterungen unterstützen keine Funktionen wie eval() als Sicherheitsmaßnahme. Schädlicher Code kann die Sicherheit der Nutzer beeinträchtigen und Sicherheit gefährdet. Wird der Code jedoch nur an einem bekannten sicheren Ort ausgeführt, wie einem iFrame, der per Sandboxing-Technologie aus dem Rest des Webs entfernt wurde, werden diese Risiken stark reduziert. In diesem Zusammenhang steht der Content Security Eine Richtlinie, die die Nutzung von „eval“ blockiert, kann aufgehoben werden, sodass Sie beliebige gültigen JavaScript-Code.

Sollte Ihr Anwendungsfall nicht abgedeckt sein, wenden Sie sich bitte an das Team über die Mailingliste chromium-extensions um Feedback bitten oder ein neues Ticket für die Anforderung von Unterstützung durch den One Stop-Support

Vorgehensweise, wenn Sie mit einem Ergebnis nicht einverstanden sind

Die Durchsetzung von Richtlinien kann differenziert sein und die Überprüfung erfordert manuelle Eingaben, d. h. kann das Chrome Web Store-Team gelegentlich zustimmen, eine Entscheidung zu ändern. Wenn Wenn du der Meinung bist, dass bei der Überprüfung ein Fehler unterlaufen ist, kannst du Beschwerde gegen die Ablehnung einlegen. mit One Stop-Support