将新 Web service Framework for Frameworks 处理程序与现有 Web service 描述语言定制扫描程序集成

关于此任务

使用 AppScan® 源 扫描 JAX-RS 或 JAX-WS 应用程序时,应确保可以捕获所有 Web service 入口点,从而不会遗漏应用程序中的任何漏洞。本文档描述了执行此操作的方法。它概述了要将用于分析不受支持 Web service 框架的新 Framework for Frameworks (F4F) 处理程序与 Web service 描述语言 (WSDL) 定制扫描程序集成而将执行的步骤。

有必要完成此工作,从而使 WSDL 定制扫描程序将能够区分那些已由此新 F4F 处理程序发现的 Web service 入口点和那些存在于 WSDL 文件中的 Web service 入口点。通过此信息,WSDL 定制扫描程序将清除已由此新 F4F 处理程序分析的配置结果。

将 Web service F4F 处理程序连接到 WSDL 定制扫描程序

开始之前

本部分假定已开发并测试主要 F4F 处理程序与合成方法生成。

过程

  1. 添加从插件到 com.ibm.appscan.frameworks.wsdl.util 的依赖关系,其中包含用于报告所找到服务的助手 API。它还存在于 walalib 文件夹内。
  2. 在主要处理程序(用于扩展 F4FHandler 类)中 handleApp() 方法的开头,添加以下行:
    String filePath = WSDLReportingUtil.getServicesFilePath
         (getFrameworksInput().getFileLocs());
    if (filePath!=null) {
    WSDLReportingUtil.initXmlDocument(filePath);
    }

    这些行用于创建将由定制 WSDL 扫描程序使用的临时文件。

  3. handleApp() 方法的结尾,添加以下行以确保在 F4F 处理程序退出之前保存所有已报告的服务:
    WSDLReportingUtil.saveXmlDocument();
  4. 要报告服务,请从 WSDLReportingUtil API 添加对以下 API 之一的调用:
    • reportService(String targetNameSpace, String serviceName, String methodSignature)
    • reportService(String targetNamespace, String serviceName, String operationName, ArrayList<String> wsdlParams)

    其中:

    • targetNameSpace 是服务的目标名称空间。例如,在 JAX-WS 中,它位于注释中或与程序包名匹配。
    • serviceName 是服务的名称。它位于注释中,或者可能与服务类名匹配。
    • methodSignature 是 WSDL 文件中经过某些简化的方法特征符。
    • operationName 是方法的名称,它链接到 WSDL 文件内一种端口类型中的操作名称。
    • wsdlParams 是采用简单 WSDL 格式的参数类型列表。
  5. 当前,定制 WSDL 扫描程序作为独立扫描程序或作为 Java/JSP 扫描的一部分来工作。如果新 F4F Web service 处理程序设计为使用 Java™ 以外的语言(例如 .NET),请确保通过执行以下步骤来使用适当扫描类型调用 WSDL 定制扫描程序:
    1. 转到 <data_dir>/ltd 目录 (其中 <data_dir>AppScan 源 程序数据的位置,如安装和用户数据文件位置
    2. 创建所有文件的备份副本以预防任何意外问题。
    3. 打开对应于适当扫描类型的 .ltd 文件。例如,对于 C++,请打开 cpp.ltd 文件。
    4. 在结尾的 <LanguageTypeDefinition> 标记前添加以下行:
      <Scanner name="wsdl"/>
    5. 复制下一步将需要的 file_extention_set_name 值。
    6. 打开 file_extensions.xml 并查找具有上一步中所复制的名称的 FileExtensionSet
    7. 在文件中该处添加以下行:
      <FileExtension extension="wsdl" assess="true"/>
    8. 保存所有文件并重新启动 AppScan 源。WSDL 定制扫描程序现在将作为完全应用程序扫描的一部分来运行。

结果

此时,WSDL 定制扫描程序将仅显示未由框架实施的 WSDL 文件中的配置结果(在“结果”视图中)。已在应用程序中实施的 WSDL 文件中的任何服务都不会显示为配置结果。这些服务将由新 Web service F4F 处理程序进行分析。

特征符映射

关于此任务

WSDL 定制扫描程序会尝试将已报告的服务与对应的 WSDL 服务、WSDL 端口类型和 WSDL 操作进行匹配。这是以 WSDL 格式来报告 Web service 的原因。已添加一些简化来使内容更易于理解:

  • 对于任何 XSD 基本类型,都无需添加目标名称空间。请改为仅使用名称(例如 stringintfloatdouble)。
  • 对于集合和数组,将在类型后添加 [](例如 string[]int[])。
  • 对于将映射到 XSD 复杂类型(使用 JAX-B 或任何其他技术)的类类型,类型将如下所示:
    http//my-types/myxsdnamespace/:Customer

    名称空间应该作为 Java 注释的一部分来提供。如果它不是 Java 注释的一部分,那么应该与调用者服务名称空间或程序包名相匹配,具体取决于框架的实施。

注: 映射错误将很可能阻止 WSDL 定制扫描程序将已报告的 Web service API 与关联 WSDL 操作进行匹配。如果发生此情况,那么将出现额外的一个配置结果。此额外结果应被视为错误肯定并表示映射问题。

如果您不确定预期的特征符应具有什么样的外观,请从 AppScan 源 对 WSDL 文件本身运行 WSDL 扫描。这将生成 WSDL 服务下的所有操作的结果。单击每个结果都会在“结果详细信息”视图中显示方法特征符。