什么是Struts 2中的JSE 2验证器?

时间:2016-06-13 07:29:14

标签: validation struts2

我正在使用Struts 2.3.16.3并在我的代码中使用struts 2验证器。像:

<validators>
   <field name="name">
      <field-validator type="required">
         <message>
            The name is required.
         </message>
      </field-validator>
   </field>

   <field name="age">
     <field-validator type="int">
         <param name="min">29</param>
         <param name="max">64</param>
         <message>
            Age must be in between 28 and 65
         </message>
      </field-validator>
   </field>
</validators>

我发现我的代码容易受到CVE-2016-0785的攻击。 所以我可以选择以下http://struts.apache.org/docs/s2-029.html

  • 在重新分配时,始终验证传入参数的值 某些Struts的标签属性。
  • 请勿在标记中使用%{...}语法 除非您有一个有效的用例,否则不是值的属性。
  • 或者升级到Struts 2.3.20.3,Struts 2.3.24.3或Struts 2.3.28

我们也被告知应该使用JSE 2验证器。 我不确定它是什么?我们使用上面的验证器。 有人能告诉我什么是JSE 2 Validator?我们的验证是在JSE 2下进行的,如果没有,可以做什么来转换成JSE 2验证器。 还请分享一些JSE 2验证代码..

1 个答案:

答案 0 :(得分:0)

JSE2 Validator表示Java 2 Platform SE验证。

javax.xml.validation说明

此包提供用于验证XML文档的API。验证是验证XML文档是指定XML模式的实例的过程。 XML模式定义其实例文档将表示的内容模型(也称为语法或词汇表)。

有许多流行的技术可用于创建XML模式。一些最受欢迎的包括:

  1. 文档类型定义(DTD)
  2. XML的内置模式语言。
  3. W3C XML Schema(WXS) - 面向对象的XML模式语言。 WXS还提供了一种用于约束XML文档的字符数据的类型系统。 WXS由万维网联盟(W3C)维护,是W3C推荐标准(即已批准的W3C标准规范)。

  4. RELAX NG(RNG) - 基于模式,用户友好的XML模式语言。 RNG模式也可以使用类型来约束XML字符数据。 RNG由结构化信息标准促进组织(OASIS)维护,并且是OASIS和ISO(国际标准化组织)标准。

  5. Schematron - 基于规则的XML模式语言。虽然DTD,WXS和RNG旨在表达内容模型的结构,但Schematron旨在强制执行难以或无法用其他模式语言表达的单个规则。 Schematron旨在补充用结构模式语言编写的模式,如前面提到的。 Schematron正在成为ISO标准。
  6. 以前版本的JAXP支持验证作为XML解析器的一项功能,由 SAXParser DocumentBuilder 实例表示。

    JAXP验证API将实例文档的验证与XML文档的解析分离。这有几个原因是有利的,其中一些原因是:

    支持其他架构语言。从JDK 1.5开始,两个最流行的JAXP解析器实现(Crimson和Xerces)仅支持可用XML模式语言的子集。 Validation API提供了一种标准机制,通过该机制,应用程序可以利用支持其他模式语言的专门化验证库。

    轻松运行时耦合XML实例和模式。指定用于JAXP解析器验证的模式的位置可能会令人困惑。 Validation API使此过程变得简单(参见下面的示例)。

    用法示例。以下示例演示如何使用Validation API验证XML文档(为了便于阅读,未显示某些异常处理):

     // parse an XML document into a DOM tree
     DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
     Document document = parser.parse(new File("instance.xml"));
    
     // create a SchemaFactory capable of understanding WXS schemas
     SchemaFactory factory =   SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    
     // load a WXS schema, represented by a Schema instance
     Source schemaFile = new StreamSource(new File("mySchema.xsd"));
     Schema schema = factory.newSchema(schemaFile);
    
     // create a Validator instance, which can be used to validate an instance document
     Validator validator = schema.newValidator();
    
     // validate the DOM tree
     try {
        validator.validate(new DOMSource(document));
     } catch (SAXException e) {
        // instance document is invalid!
     }
    

    JAXP解析API已与Validation API集成。应用程序可以使用验证API创建Schema,并使用DocumentBuilderFactory.setSchema(Schema)和SAXParserFactory.setSchema(Schema)方法将其与DocumentBuilderFactory或SAXParserFactory实例相关联。您不应该同时设置模式并在解析器工厂上调用setValidating(true)。前一种技术将使解析器使用新的验证API;后者将导致解析器使用自己的内部验证工具