Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
gha-lab-6255f5fc33 — セキュリティ研究ラボで、CVE-2023-6572(GHSA-gqvf-3hgp-5hxv)を再現します:gradio-app/gradioのworkflow_runにおけるgenerate-changeset.ymlの処理でのコマンドインジェクション | Kitploit
ツール/GitHubGitHub/pvharmo2/gha-lab-6255f5fc33
脆弱性分析エクスプロイト学習と教育厳選リソース
GitHubpvharmo2/gha-lab-6255f5fc33

gha-lab-6255f5fc33

セキュリティ研究ラボで、CVE-2023-6572(GHSA-gqvf-3hgp-5hxv)を再現します:gradio-app/gradioのworkflow_runにおけるgenerate-changeset.ymlの処理でのコマンドインジェクション

リポジトリを見る
111日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

自動化された研究アーティファクト — 上流プロジェクトではありません。

このリポジトリは、ラヴァル大学の修士論文のために、公開されているGitHub Actionsワークフローの脆弱性を再現することを目的として、自動化ハーネスによって構築された使い捨てのラボです。これは gradio-app/gradio のコミット 1d986217f6f4fc1829e528d2afe365635788204f(2023-11-03)時点の逐語的なスナップショットであり、そのプロジェクト自身のライセンスの下で再配布されており、そのライセンスファイルはこのスナップショットに変更なしで含まれています。

上流プロジェクトは関与しておらず、決して標的にはされておらず、ここで研究されている脆弱性はすでに公開されています。このリポジトリ内のすべてのシークレットと変数はランダムに生成されたダミー値であり、実際の認証情報は存在しません。アクションの参照とランナーイメージは、2023-11-03時点で解決されたものに固定されています。スナップショットに加えられたすべての変更については、ハーネス出力の pinning.md を参照してください。

質問や異議がある場合: [email protected]


gradio
機械学習アプリを簡単に構築・共有

gradio-backend gradio-ui
PyPI

PyPI downloads
Python version
Twitter follow

Website | Documentation | Guides | Getting Started | Examples | 中文

Gradio: Pythonで機械学習Webアプリを構築

Gradioは、機械学習やデータサイエンスのデモ、Webアプリケーションを構築するためのオープンソースのPythonライブラリです。

Gradioを使えば、機械学習モデルやデータサイエンスのワークフローの周りに美しいユーザーインターフェースをすばやく作成し、ユーザーが自分の画像をドラッグ&ドロップしたり、テキストを貼り付けたり、自分の声を録音したり、デモと対話したりできるようにすることができます。これらはすべてブラウザ上で行えます。

Interface montage

Gradioは以下のような場面で役立ちます:

  • クライアント/共同作業者/ユーザー/学生向けに機械学習モデルをデモする。

  • 自動共有リンクを使ってモデルをすばやくデプロイし、モデルのパフォーマンスに関するフィードバックを得る。

  • 開発中に組み込みの入力操作ツールを使ってモデルを対話的にデバッグする。

クイックスタート

前提条件: GradioにはPython 3.8以上が必要です。それだけです!

Gradioは何をするのか?

機械学習モデル、API、データサイエンスのワークフローを他の人と共有するための_最良の方法_の1つは、ユーザーや同僚がブラウザでデモを試せるインタラクティブアプリを作成することです。

Gradioを使えば、デモを構築して共有することが、すべてPythonでできます。しかも、通常はほんの数行のコードで!それでは始めましょう。

Hello, World

簡単な「Hello, World」の例でGradioを動かすには、次の3つの手順に従ってください:

1. pipを使ってGradioをインストールします:

root@kitploit:~
pip install gradio

2. 以下のコードをPythonスクリプトまたはJupyter Notebook(またはGoogle Colab)で実行します:

root@kitploit:~
import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
    
demo.launch()

Gradioを使用するコードの可読性を高めるために、インポートした名前を gr に短縮しています。これは広く採用されている慣例であり、あなたのコードを扱う誰もが簡単に理解できるように、この慣例に従うべきです。

3. 以下のデモは、Jupyter Notebook内に自動的に表示されるか、スクリプトから実行した場合はブラウザでhttp://localhost:7860にポップアップ表示されます:

hello_world demo

ローカルで開発する際、コードをPythonスクリプトとして実行したい場合は、Gradio CLIを使用してアプリケーションをリロードモードで起動できます。これにより、シームレスで高速な開発が可能になります。リロードの詳細については、Auto-Reloading Guideをご覧ください。

root@kitploit:~
gradio app.py

注: python app.py とすることもできますが、自動リロード機能は提供されません。

Interface クラス

デモを作成するために gr.Interface を作成したことに気づくでしょう。この Interface クラスは、任意のPython関数をユーザーインターフェースでラップできます。上記の例では単純なテキストベースの関数を見ましたが、関数は音楽ジェネレーターから税計算機、事前学習済み機械学習モデルの予測関数まで、何でもかまいません。

コアとなる Interface クラスは、3つの必須パラメータで初期化されます:

  • fn: UIでラップする関数
  • inputs: 入力に使用するコンポーネント(例: "text"、"image"、"audio")
  • outputs: 出力に使用するコンポーネント(例: "text"、"image"、"label")

これらの入出力を提供するために使用されるコンポーネントを詳しく見てみましょう。

コンポーネントの属性

前の例では単純な Textbox コンポーネントを見ましたが、UIコンポーネントの外観や動作を変更したい場合はどうすればよいでしょうか?

入力テキストフィールドをカスタマイズしたいとしましょう。たとえば、より大きくしてテキストプレースホルダーを設定したい場合です。文字列のショートカットの代わりに Textbox の実際のクラスを使用すると、コンポーネント属性を通じてはるかに多くのカスタマイズが可能になります。

root@kitploit:~
import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(
    fn=greet,
    inputs=gr.Textbox(lines=2, placeholder="Name Here..."),
    outputs="text",
)
demo.launch()

hello_world_2 demo

複数の入力・出力コンポーネント

複数の入力と出力を持つ、より複雑な関数があるとしましょう。以下の例では、文字列、ブール値、数値を受け取り、文字列と数値を返す関数を定義しています。入力コンポーネントと出力コンポーネントのリストを渡す方法を見てみましょう。

root@kitploit:~
import gradio as gr

def greet(name, is_morning, temperature):
    salutation = "Good morning" if is_morning else "Good evening"
    greeting = f"{salutation} {name}. It is {temperature} degrees today"
    celsius = (temperature - 32) * 5 / 9
    return greeting, round(celsius, 2)

demo = gr.Interface(
    fn=greet,
    inputs=["text", "checkbox", gr.Slider(0, 100)],
    outputs=["text", "number"],
)
demo.launch()

hello_world_3 demo

コンポーネントをリストでラップするだけです。inputs リスト内の各コンポーネントは、関数のパラメータの1つに順番に対応します。outputs リスト内の各コンポーネントは、関数によって返される値の1つに、これも順番に対応します。

画像の例

Gradioは、Image、DataFrame、Video、Label など、多くの種類のコンポーネントをサポートしています。これらの感覚をつかむために、画像から画像への関数を試してみましょう!

root@kitploit:~
import numpy as np
import gradio as gr

def sepia(input_img):
    sepia_filter = np.array([
        [0.393, 0.769, 0.189], 
        [0.349, 0.686, 0.168], 
        [0.272, 0.534, 0.131]
    ])
    sepia_img = input_img.dot(sepia_filter.T)
    sepia_img /= sepia_img.max()
    return sepia_img

demo = gr.Interface(sepia, gr.Image(width=200, height=200), "image")
demo.launch()

sepia_filter demo

Image コンポーネントを入力として使用する場合、関数は形状 (height, width, 3) のNumPy配列を受け取ります。ここで、最後の次元はRGB値を表します。また、NumPy配列の形式で画像を返します。

type= キーワード引数を使用して、コンポーネントが使用するデータ型を設定することもできます。たとえば、関数がNumPy配列の代わりに画像へのファイルパスを受け取るようにしたい場合、入力 Image コンポーネントは次のように記述できます:

root@kitploit:~
gr.Image(type="filepath", shape=...)

また、入力 Image コンポーネントには編集ボタン 🖉 が付いており、画像の切り抜きやズームが可能です。このように画像を操作することで、機械学習モデルのバイアスや隠れた欠陥を明らかにすることができます!

多くのコンポーネントとその使用方法の詳細については、Gradio docsをご覧ください。

チャットボット

Gradioには、gr.Interface に似ていますが、チャットボットUI専用に設計された高レベルクラス gr.ChatInterface が含まれています。gr.ChatInterface クラスも関数をラップしますが、この関数は特定のシグネチャを持つ必要があります。関数は2つの引数、message と history を受け取る必要があります(引数名は何でもかまいませんが、この順序である必要があります)。

  • message: ユーザーの入力を表す str
  • history: その時点までの会話を表す list の list。各内部リストは、[ユーザー入力, ボット応答] のペアを表す2つの str で構成されます。

関数は、特定のユーザー入力 message に対するボットの応答である単一の文字列応答を返す必要があります。

それ以外に、gr.ChatInterface には必須パラメータはありません(ただし、UIをカスタマイズするためのパラメータがいくつか用意されています)。

おもちゃの例を次に示します:

root@kitploit:~
import random
import gradio as gr

def random_response(message, history):
    return random.choice(["Yes", "No"])

demo = gr.ChatInterface(random_response)

demo.launch()

chatinterface_random_response demo

gr.ChatInterface の詳細はこちらで読むことができます。

Blocks: より柔軟性と制御性

Gradioはアプリを構築するための2つのアプローチを提供します:

1. Interface と ChatInterface。これまで説明してきたデモを作成するための高レベルの抽象化を提供します。

2. Blocks。より柔軟なレイアウトとデータフローでWebアプリを設計するための低レベルAPIです。Blocksを使用すると、複数のデータフローとデモを特徴付けたり、コンポーネントがページ上のどこに表示されるかを制御したり、複雑なデータフロー(出力が他の関数への入力として機能するなど)を処理したり、ユーザーの操作に基づいてコンポーネントのプロパティ/可視性を更新したりできます。これらはすべてPythonで行えます。このカスタマイズ性が必要な場合は、代わりに Blocks を試してください!

Hello, Blocks

簡単な例を見てみましょう。ここでのAPIが Interface とどのように異なるかに注目してください。

root@kitploit:~
import gradio as gr

def greet(name):
    return "Hello " + name + "!"

with gr.Blocks() as demo:
    name = gr.Textbox(label="Name")
    output = gr.Textbox(label="Output Box")
    greet_btn = gr.Button("Greet")
    greet_btn.click(fn=greet, inputs=name, outputs=output, api_name="greet")

demo.launch()

hello_blocks demo

注意すべき点:

  • Blocks は with 句で作成され、この句内で作成されたコンポーネントは自動的にアプリに追加されます。
  • コンポーネントは、作成された順序でアプリ内に垂直に表示されます。(レイアウトのカスタマイズについては後で説明します!)
  • Button が作成され、このボタンに click イベントリスナーが追加されました。このAPIはおなじみのはずです!Interface と同様に、click メソッドはPython関数、入力コンポーネント、出力コンポーネントを受け取ります。

より複雑な例

Blocks で何が可能かを味わっていただくためのアプリを次に示します:

root@kitploit:~
import numpy as np
import gradio as gr


def flip_text(x):
    return x[::-1]


def flip_image(x):
    return np.fliplr(x)


with gr.Blocks() as demo:
    gr.Markdown("Flip text or image files using this demo.")
    with gr.Tab("Flip Text"):
        text_input = gr.Textbox()
        text_output = gr.Textbox()
        text_button = gr.Button("Flip")
    with gr.Tab("Flip Image"):
        with gr.Row():
            image_input = gr.Image()
            image_output = gr.Image()
        image_button = gr.Button("Flip")

    with gr.Accordion("Open for More!"):
        gr.Markdown("Look at me...")

    text_button.click(flip_text, inputs=text_input, outputs=text_output)
    image_button.click(flip_image, inputs=image_input, outputs=image_output)

demo.launch()

blocks_flipper demo

ここではさらに多くのことが行われています!このような複雑な Blocks アプリの作成方法については、building with blocksセクションで説明します。

おめでとうございます。これでGradioの基本を理解できました!🥳 次のガイドに進んで、Gradioの主要な機能について詳しく学びましょう。

オープンソーススタック

Gradioは多くの素晴らしいオープンソースライブラリで構築されています。ぜひそれらもサポートしてください!

huggingface python fastapi encode svelte vite pnpm tailwind storybook chromatic

ライセンス

Gradioは、このリポジトリのルートディレクトリにあるLICENSEファイルに記載されているApache License 2.0の下でライセンスされています。

引用

また、論文 Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild, ICML HILL 2019 もご覧ください。Gradioを研究で使用する場合は、これを引用してください。

root@kitploit:~
@article{abid2019gradio,
  title = {Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild},
  author = {Abid, Abubakar and Abdalla, Ali and Abid, Ali and Khan, Dawood and Alfozan, Abdulrahman and Zou, James},
  journal = {arXiv preprint arXiv:1906.02569},
  year = {2019},
}
ツールをダウンロード