【问题标题】:What is JSE 2 validators in Struts 2?Struts 2 中的 JSE 2 验证器是什么?
【发布时间】:2016-06-14 19:16:09
【问题描述】:

我正在使用 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 的标签属性。
  • 不要在标签中使用 %{...} 语法 value 以外的属性,除非您有有效的用例。
  • 或者升级到 Struts 2.3.20.3、Struts 2.3.24.3 或 Struts 2.3.28

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

【问题讨论】:

  • 你不需要使用那个验证器,Struts2 有一个类似的validator type regex
  • 相当于 JSE 2 验证器。无论如何,如果你想使用这个验证器,你需要将它集成到 Struts2 框架中,否则 Struts2 验证框架不会消耗它。
  • @RomanC 我们正在使用正则表达式:contactPersonFaxNo ^[0-9 \-\+]*$ $errors.invalid,lb.catFaxNo 这是否等同于 JSE 2 验证器?我们还必须为所有作为输入参数发送的字段提供验证器吗?可以给我发送 JSE 2 验证器示例吗?
  • @Hitesh 您从哪里获得有关此“JSE 2 验证器”的信息?
  • @Hitesh 您有多个选项可以避免该漏洞,它们已列出。您是否知道您的代码是否使用了易受攻击的功能?

标签: validation struts2


【解决方案1】:

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 标准。

以前版本的 JAXP 支持将验证作为 XML 解析器的一项功能,由 SAXParserDocumentBuilder 实例表示。

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

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

XML 实例和模式的轻松运行时耦合。 指定模式的位置以用于使用 JAXP 解析器进行验证可能会造成混淆。 Validation API 使这个过程变得简单(参见下面的示例)。

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

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    相关资源
    最近更新 更多