이것은 PHP에서 괜찮은 svg sanitizer 구축하려는 나의 시도입니다. 이 작업은 주로 DOMPurify에서 차용되었습니다.
작곡가를 통해 enshrined/svg-sanitize
요구하거나 저장소를 다운로드하고 이전 방식을 포함하십시오!
이것을 사용하는 것은 매우 쉽습니다. enshrinedsvgSanitizeSanitizer
의 새 인스턴스를 생성한 다음 더티 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
반환합니다(일반적으로 파일 형식이 잘못되어 발생함).
Sanitizer::setAllowedTags
및 Sanitizer::setAllowedAttrs
메소드를 각각 사용하여 고유한 태그 및 속성 화이트리스트를 전달할 수 있습니다.
이러한 메서드를 사용하려면 enshrinedsvgSanitizedataTagInterface
또는 enshrinedsvgSanitizedataAttributeInterface
구현해야 합니다.
원격 파일을 참조하는 속성을 제거할 수 있는 옵션이 있습니다. 이렇게 하면 HTTP 누출이 방지되지만 새니타이저에 오버헤드가 추가됩니다.
기본값은 false이며 참조를 제거하려면 true로 설정합니다.
$sanitizer->removeRemoteReferences(true);
getXmlIssues()
메서드를 사용하여 정리 중에 발생한 문제의 배열을 반환할 수 있습니다.
이는 SVG가 거부된 이유를 기록하거나 사용자에게 피드백을 제공하는 데 유용할 수 있습니다.
$issues = $sanitizer->getXmlIssues();
$sanitizer->minify(true);
.
http://svg.enshrined.co.uk/에 데모가 있습니다.
WordPress 업로드를 삭제하실 수 있도록 이 코드가 포함된 WordPress 플러그인을 방금 출시했습니다. WordPress 플러그인 디렉터리(https://wordpress.org/plugins/safe-svg/)에서 사용할 수 있습니다.
Michael Potter는 https://www.drupal.org/project/svg_sanitizer에서 사용할 수 있는 이 라이브러리에 대한 Drupal 모듈을 친절하게 만들었습니다.
이 svg sanitizer 라이브러리는 TYPO3 v9 및 이후 버전의 핵심에서 기본적으로 사용됩니다. 자세한 내용은 해당 변경 로그 항목을 참조하세요.
이 패키지의 기본 디렉터리에서 vendor/bin/phpunit
실행하여 이를 실행할 수 있습니다.
gudmdharalds의 작업 덕분에 이제 CLI를 통해 사용할 수 있는 독립형 스캐너가 생겼습니다.
모든 오류는 JSON 형식으로 출력됩니다. 예를 보려면 PR을 참조하세요.
다음과 같이 사용하십시오: php svg-scanner.php ~/svgs/myfile.svg
SVG/XML에 대한 더 광범위한 테스트가 있으면 좋을 것 같습니다. 곧 이를 추가해 보겠습니다. 저를 위해 하고 싶으시다면 그렇게 하여 PR을 해주세요!