
مكتبة بسيطة وخفيفة تساعد على التحقق من ملفات SVG بطريقة آمنة.
مكتبة بسيطة وخفيفة تساعد على التحقق من ملفات SVG بأساليب أمنية.
ستساعدك في اكتشاف المحتوى الخبيث داخل ملفات SVG المرفوعة.
اقرأ https://sekurak.pl/pozwalasz-ladowac-pliki-svg-masz-xss-a/ لمزيد من التفاصيل.
جرّب رفع ملف SVG هذا إلى تطبيقك، فإذا مرّ بنجاح وأمكن للمستخدم تصفح هذا الملف - فمن المحتمل أنك عرضة لهجوم XSS.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
<script type="text/javascript">
alert('Hello, world!');
</script>
</svg>
أضف اعتمادية المكتبة:
implementation "com.github.bgalek.security.svg:safe-svg:1.2.0"
يمكنك استخدام هذه المكتبة للتحقق من ملفات SVG المرفوعة
SvgSecurityValidator svgSecurityValidator = SvgSecurityValidator.builder().build();
String svg = "<?xml version=\"1.0\" standalone=\"no\"?>\n" +
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n" +
"<svg version=\"1.1\" baseProfile=\"full\" xmlns=\"http://www.w3.org/2000/svg\">\n" +
"<polygon id=\"triangle\" points=\"0,0 0,50 50,0\" fill=\"#009900\" stroke=\"#004400\"/>\n" +
"<script type=\"text/javascript\">\n" +
"alert('Hello, world!');\n" +
"</script>\n" +
"</svg>";
ValidationResult validation = svgSecurityValidator.validate(svg);
if (validation.hasViolations()) {
throw new RuntimeException("this file is suspicious" + validation.getOffendingElements());
}
إذا كنت تريد السماح بعناصر/سمات أخرى (قد تكون غير آمنة) فاستخدم
ValidationResult detect = SvgSecurityValidator.builder()
.withAdditionalElements(elements)
.withAdditionalAttributes(attributes)
.build()
.validate(testFile);
يمكنك أيضًا تفعيل التحقق الصارم من صياغة XML. تتم معالجة المدخلات باستخدام
محلل محصّن ضد XXE (لا يتم حل الكيانات الخارجية وDTDs أبدًا، وتوسيع الكيانات معطّل)، ويُطرح
InvalidXMLSyntaxException عند وجود XML غير صالح:
ValidationResult detect = SvgSecurityValidator.builder()
.withSyntaxValidation()
.build()
.validate(testFile);
يُدعم كلا نوعي المدخلات String وbyte[] (يُفك ترميز byte[] بترميز UTF-8).