我们在一个项目中有以下代码,作为从模板生成简单Excel文件的一部分:
StreamReader reader = new StreamReader(DeploymentFolder + "bin\\Excel.xsl");
XmlTextReader xRdr = new XmlTextReader(reader);
xt.Load(xRdr,new XsltSettings(false,false),null);
它工作正常,但代码不安全,因为它容易受到注入攻击。理想情况下,它应该根据模式进行验证。那么我在哪里可以找到验证XSL文件的模式? .NET中是否有内置模式可以做到这一点?
答案 0 :(得分:1)
XSLT 2.0和XSLT 3.0的官方W3C架构,从XSLT 2.0和XSLT 3.0规范链接。我认为在某个地方XSLT 1.0也是非官方的。
但他们不会帮助你。在XSLT中执行注入攻击的方式通常是调用用其他语言(如C#编写)的扩展函数(例如,调用exec()),并且您无法区分扩展函数和内置函数在模式级别上的函数。 Saxon等一些产品有一个禁用扩展功能的开关,有了这个设置你很安全;您可能还需要一个URIResolver / XMLResolver来警告使用document()函数。我不知道微软的System.Xml.Xsl处理器是否有这样的开关,但如果没有,我会感到惊讶。