
Sicherheitsforschungs-Labor: kontrollierte Reproduktion von CVE-2024-4254 (GHSA-fc78-c36r-cc59) — deploy-website.yml Fork-Checkout/Code-Ausführung in gradio-app/gradio @ d4c503a
Automatisiertes Forschungsartefakt — nicht das Upstream-Projekt.
Dieses Repository ist ein Wegwerf-Labor, das von einer automatisierten Umgebung für eine Masterarbeit an der Université Laval zur Reproduktion veröffentlichter GitHub-Actions- Workflow-Schwachstellen erstellt wurde. Es ist eine wörtliche Momentaufnahme von
gradio-app/gradiobeim Commitd4c503a471cfd202c56fbddd99d5da431a4b7478(2024-08-02), weiterverbreitet unter der eigenen Lizenz dieses Projekts, deren Datei unverändert in dieser Momentaufnahme enthalten ist.Das Upstream-Projekt ist nicht beteiligt, wird niemals angegriffen, und die hier untersuchte Schwachstelle ist bereits öffentlich bekannt. Jedes Secret und jede Variable in diesem Repository ist ein zufällig generierter Dummy-Wert — es sind keine echten Anmeldedaten vorhanden. Aktionsreferenzen und Runner-Images sind auf den Stand vom 2024-08-02 fixiert; siehe
pinning.mdin der Ausgabe der Umgebung für jede an der Momentaufnahme vorgenommene Änderung.Fragen oder Einwände: [email protected]
Gradio ist ein Open-Source-Python-Paket, mit dem du schnell eine Demo oder Webanwendung für dein Machine-Learning-Modell, deine API oder eine beliebige Python-Funktion erstellen kannst. Du kannst dann mit den integrierten Freigabefunktionen von Gradio in nur wenigen Sekunden einen Link zu deiner Demo oder Webanwendung teilen. Keine JavaScript-, CSS- oder Webhosting-Kenntnisse erforderlich!
Es braucht nur ein paar Zeilen Python, um eine schöne Demo wie die obige zu erstellen. Also lass uns loslegen 💫
Voraussetzung: Gradio erfordert Python 3.8 oder höher
Wir empfehlen, Gradio mit pip zu installieren, das standardmäßig in Python enthalten ist. Führe dies in deinem Terminal oder deiner Eingabeaufforderung aus:
pip install gradio
[!TIP] Es ist am besten, Gradio in einer virtuellen Umgebung zu installieren. Detaillierte Installationsanweisungen für alle gängigen Betriebssysteme findest du hier.
Du kannst Gradio in deinem bevorzugten Code-Editor, Jupyter-Notebook, Google Colab oder überall dort ausführen, wo du Python schreibst. Lass uns deine erste Gradio-App schreiben:
import gradio as gr
def greet(name, intensity):
return "Hello " * intensity + name + "!"
demo = gr.Interface(
fn=greet,
inputs=["text", "slider"],
outputs=["text"],
)
demo.launch()
[!TIP] Wir kürzen den importierten Namen von
gradiozugr, um die Lesbarkeit des Codes zu verbessern. Dies ist eine weit verbreitete Konvention, der du folgen solltest, damit jeder, der mit deinem Code arbeitet, ihn leicht verstehen kann.
Führe nun deinen Code aus. Wenn du den Python-Code in einer Datei mit dem Namen z. B. app.py geschrieben hast, führst du python app.py im Terminal aus.
Die folgende Demo öffnet sich in einem Browser auf http://localhost:7860, wenn sie aus einer Datei ausgeführt wird. Wenn du in einem Notebook arbeitest, erscheint die Demo eingebettet im Notebook.

Gib deinen Namen in das Textfeld auf der linken Seite ein, ziehe den Schieberegler und drücke dann die Schaltfläche „Submit". Auf der rechten Seite solltest du eine freundliche Begrüßung sehen.
[!TIP] Bei der lokalen Entwicklung kannst du deine Gradio-App im Hot-Reload-Modus ausführen, der die Gradio-App automatisch neu lädt, wenn du Änderungen an der Datei vornimmst. Gib dazu einfach
gradiovor dem Dateinamen ein, stattpython. Im obigen Beispiel würdest dugradio app.pyin deinem Terminal eingeben. Erfahre mehr über Hot Reloading im Hot-Reloading-Leitfaden.
Die Interface-Klasse verstehen
Du wirst feststellen, dass du zum Erstellen deiner ersten Demo eine Instanz der gr.Interface-Klasse erstellt hast. Die Interface-Klasse wurde entwickelt, um Demos für Machine-Learning-Modelle zu erstellen, die einen oder mehrere Eingaben akzeptieren und eine oder mehrere Ausgaben zurückgeben.
Die Interface-Klasse hat drei Kernargumente:
fn: die Funktion, um die herum eine Benutzeroberfläche (UI) erstellt werden sollinputs: die Gradio-Komponente(n), die für die Eingabe verwendet werden. Die Anzahl der Komponenten sollte der Anzahl der Argumente in deiner Funktion entsprechen.outputs: die Gradio-Komponente(n), die für die Ausgabe verwendet werden. Die Anzahl der Komponenten sollte der Anzahl der Rückgabewerte deiner Funktion entsprechen.Das fn-Argument ist sehr flexibel — du kannst jede Python-Funktion übergeben, die du mit einer UI umhüllen möchtest. Im obigen Beispiel haben wir eine relativ einfache Funktion gesehen, aber die Funktion kann alles sein, von einem Musikgenerator über einen Steuerrechner bis hin zur Vorhersagefunktion eines vortrainierten Machine-Learning-Modells.
Die Argumente input und output akzeptieren eine oder mehrere Gradio-Komponenten. Wie wir sehen werden, enthält Gradio mehr als 30 integrierte Komponenten (wie die Komponenten gr.Textbox(), gr.Image() und gr.HTML()), die für Machine-Learning-Anwendungen entwickelt wurden.
[!TIP] Für die Argumente
inputsundoutputskannst du den Namen dieser Komponenten als Zeichenfolge ("textbox") oder eine Instanz der Klasse (gr.Textbox()) übergeben.