Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
svg-sanitizer — アップロードまたはインライン化されたSVGファイルにおけるXSSやスクリプトインジェクションを防ぐため、タグ、属性、リモート参照をフィルタリングして信頼できないSVG/XMLをサニタイズするPHPライブラリです。 | Kitploit
ツール/GitHubGitHub/darylldoyle/svg-sanitizer
防御ツール静的分析脆弱性分析ウェブセキュリティユーティリティとフレームワーク
GitHubdarylldoyle/svg-sanitizer

svg-sanitizer

アップロードまたはインライン化されたSVGファイルにおけるXSSやスクリプトインジェクションを防ぐため、タグ、属性、リモート参照をフィルタリングして信頼できないSVG/XMLをサニタイズするPHPライブラリです。

リポジトリを見る
55269178日前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

svg-sanitizer

Build Status Code Coverage

これは、PHP でまともな SVG サニタイザーを構築するための私の試みです。作業の大部分は DOMPurify から借用しています。

インストール

composer 経由で enshrined/svg-sanitize を要求するか、リポジトリをダウンロードして従来の方法でインクルードしてください!

使用方法

使い方は非常に簡単です。enshrined\svgSanitize\Sanitizer の新しいインスタンスを作成し、汚染された SVG/XML を渡しながら sanitize を呼び出します。

基本的な例

use enshrined\svgSanitize\Sanitizer;

// Create a new sanitizer instance
$sanitizer = new Sanitizer();

// Load the dirty svg
$dirtySVG = file_get_contents('filthy.svg');

// Pass it to the sanitizer and get it back clean
$cleanSVG = $sanitizer->sanitize($dirtySVG);

// Now do what you want with your clean SVG/XML data

出力

これはサニタイズされた SVG/XML 文字列を返すか、XML のパースに失敗した場合(通常はファイルの形式が不正な場合)は真偽値 false を返します。

また、XML パーサーに渡さない入力に対しても false を返します:

  • 属性が 4,096 個を超える要素
  • UTF-16 または UTF-32 入力における内部 DTD
  • EBCDIC や UTF-7 など、マークアップがプレーン ASCII でないエンコーディング
  • SVG 以外の名前空間にある <svg> ルート

理由は getXmlIssues() で確認できます。

オプション

Sanitizer::setAllowedTags および Sanitizer::setAllowedAttrs メソッドをそれぞれ使用して、独自のタグと属性のホワイトリストを渡すことができます。

これらのメソッドでは、enshrined\svgSanitize\data\TagInterface または enshrined\svgSanitize\data\AttributeInterface を実装する必要があります。

<use> はデフォルトで許可されていますが、参照の展開範囲(useThreshold())とネスト(setUseNestingLimit())には制限があります。不要な場合、たとえば信頼できない SVG をページにインライン展開する場合は、タグの許可リストから use を外すことでこの領域全体を削除できます。

リモート参照の削除

リモートファイルを参照する属性を削除するオプションがあります。これにより HTTP リークは防げますが、サニタイザーにオーバーヘッドが追加されます。

デフォルトは false で、参照を削除するには true に設定します。

$sanitizer->removeRemoteReferences(true);

有効にすると、リモート参照は <style> 要素内の CSS や属性内の CSS(url()、@import、image-set()、およびリモート URL で始まる引用文字列)からも除去されます。srcset 属性は URL のリストを保持するため、完全に削除されます。この CSS 処理はベストエフォートであり、完全な CSS パーサーではありません。保証ではなく多層防御として扱い、信頼できない CSS は SVG を埋め込む時点で分離してください。

注: <style> 要素または style 属性に除去対象のリモート参照が含まれている場合、同じブロック内の CSS エスケープシーケンスは出力時に正規化(デコード)されます。これは意味的には同一の CSS ですが、作者が手書きしたエスケープが書き換えられます。

サニタイズの問題の確認

getXmlIssues() メソッドを使用すると、サニタイズ中に発生した問題の配列を返すことができます。

これはログ記録や、SVG が拒否された理由をユーザーにフィードバックする際に役立ちます。

$issues = $sanitizer->getXmlIssues();

リストには最大 1,000 件の問題が保持されます。それ以上ある場合、最後のエントリに省略された件数が示されます。

圧縮

$sanitizer->minify(true); を呼び出すことで、XML 出力を圧縮できます。

デモ

デモはこちらで利用できます: http://svg.enshrined.co.uk/

WordPress

このコードを含む WordPress プラグインをリリースしたので、WordPress のアップロードをサニタイズできます。WordPress プラグインディレクトリから入手できます: https://wordpress.org/plugins/safe-svg/

Drupal

Michael Potter 氏がこのライブラリ用の Drupal モジュールを快く作成しており、以下から入手できます: https://www.drupal.org/project/svg_sanitizer

TYPO3

この SVG サニタイザーライブラリは、TYPO3 v9 以降のコアでデフォルトで使用されています。 詳細は対応する変更履歴エントリを参照してください。

テスト

このパッケージのベースディレクトリから vendor/bin/phpunit を実行することで実行できます。

CLI によるファイルのスタンドアロンスキャン

gudmdharalds 氏の作業のおかげで、CLI から使用できるスタンドアロンスキャナーが利用可能になりました。

エラーは JSON 形式で出力されます。例についてはこちらの PR を参照してください。

次のように使用します: php svg-scanner.php ~/svgs/myfile.svg

To-Do

SVG/XML に対するより広範なテストがあると素晴らしいので、近いうちに追加しようと思います。代わりにやってみたいという方は、ぜひ PR を作成してください!

ツールをダウンロード