首页 > 解决方案 > 无论如何要在 c# 中清理 SVG 文件,有什么库吗?

问题描述

无论如何要在 c# 中清理 SVG 文件,有什么库吗?从客户端我们在上传时清理 SVG 文件,但安全团队也要求在服务器端进行清理。

标签: svgxss

解决方案


你的安全团队说的是真的:客户端安全不是安全。这只是用户方便。永远不要依赖客户端检查。任何想要对您的应用程序做坏事的人都会首先绕过客户端检查。

<script>现在,只有利用标签,SVG 文件才能用于 XSS 攻击。

不幸的是,解散/保护脚本是一个非常复杂的话题,并且容易出错,并且会出现误报和误报。

所以,我相信你唯一的办法就是完全删除脚本。这可能不是您需要的。

但是,如果是,那么做起来很简单。脚本标签不能在 SVG 中伪装,否则浏览器一开始就无法识别它,使得攻击毫无意义。所以一个简单的正则表达式就足够了。就像是,

cleanSVGcode = Regex.Replace(
    userSVGcode, 
    @"<script.*?script>",
    @"", 
    RegexOptions.IgnoreCase|RegexOptions.SingleLine
);

可以清除更多的序列。因为,如果它们编写不正确或以混淆的方式编写,javascript 调用将不起作用,因此这些序列的数量是有限的。

@"javascript:"    => @"syntax:error:"

推荐阅读