2014-10-07 38 views
0

我们已经在一个项目下面的代码从模板生成一个简单的Excel文件的一部分:架构验证在C#中的.xsl模板

StreamReader reader = new StreamReader(DeploymentFolder + "bin\\Excel.xsl"); 
XmlTextReader xRdr = new XmlTextReader(reader); 
xt.Load(xRdr,new XsltSettings(false,false),null); 

它工作得很好,但是代码不是安全,因为它容易受到注入攻击。理想情况下,它应该根据模式进行验证。那么我在哪里可以找到验证XSL文件的模式? .NET中是否有内置模式可以实现这一点?

回答

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处理器是否有这样的开关,但如果没有,我会感到惊讶。