
SVG Sanitizer は、潜在的に危険な JavaScript を除去し、外部リソースの読み込みをブロックし、XSS (クロスサイトスクリプティング) 脆弱性を防止することで、SVG ファイルをクリーンアップするために設計された Java ライブラリです。Web 環境を含むさまざまなアプリケーションで SVG ファイルを安全に使用できるようにするのに役立ちます。
<script> タグを含む、SVG ファイル内の JavaScript を除去します。Java プロジェクトで SVG Sanitizer を使用するには、io.github.borewit:svg-sanitizer Maven 依存関係を追加してください。
public class SVGSanitizerExample {
public static void main(String[] args) {
String dirtySvgContent = """
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 124 124" fill="none">
<rect width="124" height="124" rx="24" fill="#000000"/>
<script type="text/javascript">
alert(0x539);
</script>
</svg>""";
try {
String sanitizedSvg = SVGSanitizer.sanitize(dirtySvgContent);
System.out.println(sanitizedSvg);
} catch (Exception e) {
e.printStackTrace();
}
}
}
サニタイズされたSVGを出力します:
<svg xmlns="http://www.w3.org/2000/svg" fill="none" height="400" viewBox="0 0 124 124" width="400">
<rect fill="#000000" height="124" rx="24" width="124"/>
</svg>
InputStream から OutputStream へサニタイズします:
import java.io.*;
public class SVGSanitizerExample {
public static void main(String[] args) throws Exception {
File inputFile = new File("unsafe.svg");
File outputFile = new File("sanitized.svg");
try (InputStream inputStream = new FileInputStream(inputFile)) {
try (OutputStream outputStream = new FileOutputStream(outputFile)) {
SVGSanitizer.sanitize(inputStream, outputStream);
}
}
System.out.println("Sanitized SVG has been saved to " + outputFile.getAbsolutePath());
}
}
InputStream から InputStream へサニタイズします:
import java.io.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
public class SVGSanitizerExample {
public static void main(String[] args) throws Exception {
File inputFile = new File("unsafe.svg"); // Potentially unsafe SVG file
try (InputStream inputStream = new FileInputStream(inputFile);
InputStream sanitizedStream = SVGSanitizer.sanitize(inputStream)) {
// Pass the sanitized stream to an XML parser (without converting it to a String)
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(sanitizedStream);
System.out.println("SVG file successfully parsed after sanitization.");
}
}
}
public static String sanitize(String svgContent)
この方法は、SVG全体をメモリに読み込んでも問題ない場合にのみ使用してください。
public static void sanitize(InputStream inputStream, OutputStream outputStream)
指定された outputStream にサニタイズ済みの SVG を書き込みます
public static InputStream sanitize(InputStream inputStream)
フィルターとして機能し、サニタイズされた SVG を含む新しい InputStream を返します。
ユーザーがアップロードした SVG には、ブラウザのコンテキストで実行される可能性のある悪意のあるコンテンツが含まれていることがあります。SVG のサニタイズは重要なステップですが、完全な保護のためには他の対策と組み合わせる必要があります。 より広範な概要については、SVG セキュリティのベストプラクティスを参照してください。
このプロジェクトは MIT License の下でライセンスされています。