【问题标题】:Masking Non-XML sensitive data post logging in xslt在 xslt 中屏蔽非 XML 敏感数据日志记录
【发布时间】:2016-03-08 08:40:21
【问题描述】:

谁能帮我屏蔽 Datapower 中的非 XML 输入。

我首先在 Datapower 日志存储中记录输入并将该输入用于掩码,我编写了一段适用于 XML 但不适用于非 XML 的代码,

附上我的输入非 XML 和代码以供参考。 附加的掩码file.xsl 有两个模板,一个用于非 XML,另一个用于 XML。 XML 适用于数值并且不屏蔽字符。 调用了非 XML 模板但不进行屏蔽。(我可以在系统日志中看到它正在被调用)

赋予屏蔽模板的控制权由附加的不同log.xml 文件提供。

感谢快速响应。 谢谢, 阿努杰

  1. 输入非 xml。 PCTM-ODS-MTRF-WRSP-RSP PCTM-ODS-MTRF-WRSP-RSP 0200000298111 00000000ODS00000000000000834978953 00LIQ055003241NYYNYNNY 10000020130823Y000000000018765-000000000018765-000000000018765-010000100000000000000000000000-000000000000000-000000000000000 -

    LI>
  2. 我的代码:下面的 maskFldName 是从 log.xml 文件中调用的。

<xsl:template name="NONXMLmaskingTemplate">
    <xsl:param name="maskFldName"/>
            <xsl:param name="Input"/>
        <xsl:variable name="maskchars" select="'******************************'"/>
        <xsl:message>maskFldName:<xsl:copy-of select="$maskFldName"/>
        </xsl:message>
        <xsl:variable name="logInput">
            <!--<dp:serialize select="$Input" omit-xml-decl="yes"/>-->
            <xsl:copy-of select="translate($Input,'&#x22;&#x20;:&#x20;&#x22;','&#x22;:&#x22;')"/>
        </xsl:variable>
        <xsl:message>MaskInputMessage:<xsl:copy-of select="$logInput"/>
        </xsl:message>
        <dp:set-local-variable name="'var://local/input'" value="$logInput"/>
        <xsl:message>!!!!
            <xsl:copy-of select="translate($Input,'&#x20;','')"/>
        </xsl:message>
        <xsl:for-each select="$maskFldName">
            <xsl:variable name="startPosition" select="./@startPosition"/>
            <xsl:variable name="noOfChars" select="./@numOfChars"/>
            <xsl:message>startPosition:<xsl:value-of select="$startPosition"/>
            </xsl:message>
            <xsl:message>noOfChars:<xsl:value-of select="$noOfChars"/>
            </xsl:message>
            <xsl:variable name="maskString" select="substring($maskchars,1,$noOfChars)"/>
            <xsl:message>Matches:<xsl:copy-of select="regexp:match($logInput,.,'g')"/>
            </xsl:message>
            <xsl:message>InputMessage1:<xsl:copy-of select="$Input"/>
            </xsl:message>
            <xsl:for-each select="regexp:match($logInput,.,'g')">
                <xsl:message>InputMessage:<xsl:copy-of select="$logInput"/>
                </xsl:message>
                <xsl:message>ValueX:<xsl:copy-of select="."/>
                </xsl:message>
                <xsl:variable name="strToReplace" select="substring(.,$startPosition,$noOfChars)"/>
                <xsl:variable name="strToReplace2" select="regexp:replace(.,$strToReplace,'g',$maskString)"/>
                <xsl:message>strToReplace:<xsl:copy-of select="$strToReplace"/>
                </xsl:message>
                <xsl:message>strToReplace2:<xsl:value-of select="$strToReplace2"/>
                </xsl:message>
                <dp:set-local-variable name="'var://local/input'" value="regexp:replace(dp:local-variable('var://local/input'),.,'g',$strToReplace2)"/>
            </xsl:for-each> 
            </xsl:for-each>
        <xsl:copy-of select="dp:local-variable('var://local/input')"/>
        <!--    
        If message to be proper xml i.e. &lt; needs to be output as < then the following code to be used

        <xsl:copy-of select="dp:transform('detailLog.xsl',dp:parse(dp:local-variable('var://local/input')))"/>
        <xsl:message>MaskOutputMessage:<xsl:copy-of select="dp:local-variable('var://local/input')"/> </xsl:message>
        -->
    </xsl:template>
</xsl:stylesheet>
  1. log.xml
<?xml version="1.0" encoding="UTF-8"?>
<logConfig>
    <!-- ALL/NONE/FRONT/BACK -->
    <log-enabled value="ALL"/>
    <!-- Y/N -->
    <detail-log-enabled value="Y"/>
    <!-- Y/N -->
    <slim-log-enabled value="N"/>
    <masking isMaskRequire="Y">
        <logpoint id="service_req_entry">
                    <contentType>NONXML</contentType>
            <maskPattern attribute="detail" startPosition="50" numOfChars="4">(PCTM[\w])</maskPattern>
        </logpoint>
        <logpoint id="SCRq-out">
            <contentType>XML</contentType>
            <maskPattern attribute="detail" startPosition="11" numOfChars="4">(Severity>[\w]+&lt;)</maskPattern>
        </logpoint>
    </masking>
</logConfig>

【问题讨论】:

  • 如果输入不是 XML,您应该考虑根本不使用 XSLT。在 XSLT 2.0 中,unparsed-text() 可以在没有标记的情况下读取文本 - 但有时,使用另一种语言(如 shellscript、Perl、Python、PHP 等)会更容易。
  • 您好 Mathias,感谢您的建议,但我的要求是使用 eXSLT 正则表达式函数来屏蔽上述非 xml 数据。任何帮助都会很棒。
  • @AK.DataPower 如果您的输入不是 XML 文件,那么 XSLT 1.0 根本无法读取它。也许您可以通过其他方式(例如作为参数)将其传递给样式表。
  • 处理非 XML 数据的一种方法是使用 XML 标记包装文档以生成格式良好的伪 XML usinf 平面文件描述符,然后可以使用 XSLT 进一步处理生成的文档。查看以下链接以获取详细信息www-01.ibm.com/support/docview.wss?uid=swg21321379

标签: xslt ibm-datapower


【解决方案1】:

也许您可以使用此技术说明将非 xml 包装在 XML 中,然后使用您的 XSLT http://www-01.ibm.com/support/docview.wss?uid=swg21321379

相关部分:

将原始文本转换为伪 XML:

本示例将以下文本作为输入:

这里有一些文字 还有更多 还有更多

还有更多

等等,这里还有更多

创建步骤:

1.在将接收非 XML 请求的服务中创建一个转换操作。

2.选择“在非 XML 消息上使用此操作中指定的 XSLT”以指定这是一个二进制转换。

3.上传以下样式表作为处理控制文件。

4.点击完成,然后应用所有窗口。

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:dp="http://www.datapower.com/extensions"
    version="1.0">

    <dp:input-mapping href="sample.ffd" type="ffd"/>

    <!-- This stylesheet copies the input to the output -->
    <xsl:output method="xml"/>

    <xsl:template match="/">
    <xsl:value-of select="sampleFile/sampleTag" disable-output-escaping="yes" />
    </xsl:template>
    </xsl:stylesheet>
  1. 从文件管理器将以下 FFD 文件上传到 local://sample.ffd 目录。

    <File name="sampleFile">
    <!-- capture all data into this tag -->
    <Field name="sampleTag" />
    </File>
    

发送上面的示例输入将导致以下输出

    <?xml version="1.0" encoding="utf-8"?>
    <sampleFile>
    <sampleTag>
    some text here
    and here is some more
    and some more


    and some more

    and wait, some

    </sampleTag>
    </sampleFile> 

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2020-05-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多