Как определить правильный XML для выписывания - PullRequest
1 голос
/ 03 октября 2009
<?xml version="1.0" encoding="UTF-8"?>
<idmef:IDMEF-Message version="1.0"  xmlns:idmef="http://iana.org/idmef">
 <idmef:Alert messageid="abc123456789">
   <idmef:Analyzer analyzerid="bc-corr-01">
     <idmef:Node category="dns">
       <idmef:name>correlator01.example.com</idmef:name>
     </idmef:Node>
   </idmef:Analyzer>
       <idmef:CreateTime ntpstamp="0xbc72423b.0x00000000">2000-03-09T15:31:07Z
   </idmef:CreateTime>
   <idmef:Source ident="a1">
     <idmef:Node ident="a1-1">
       <idmef:Address ident="a1-2" category="ipv4-addr">
         <idmef:address>192.0.2.200</idmef:address>
       </idmef:Address>
     </idmef:Node>
   </idmef:Source>
   <idmef:Target ident="a2">
     <idmef:Node ident="a2-1" category="dns">
       <idmef:name>www.example.com</idmef:name>
       <idmef:Address ident="a2-2" category="ipv4-addr">
         <idmef:address>192.0.2.50</idmef:address>
       </idmef:Address>
     </idmef:Node>
     <idmef:Service ident="a2-3">
       <idmef:portlist>5
       </idmef:portlist>
     </idmef:Service>
   </idmef:Target>
   <idmef:Classification text="Login Authentication">
     <idmef:Reference origin="vendor-specific">
       <idmef:name>portscan</idmef:name>
       <idmef:url>http://www.vendor.com/portscan</idmef:url>
     </idmef:Reference>
   </idmef:Classification>
 <idmef:Assessment>
     <idmef:Impact severity ="high" completion ="failed" type ="file" >
     </idmef:Impact>
 </idmef:Assessment>
 </idmef:Alert>
 </idmef:IDMEF-Message>

Я работаю с системой обмена сообщениями xml, где пакет сообщений читается из очереди и применяется к правилу с шаблоном в нем. Если шаблон соответствует, правило запускается, и некоторые элементы, узлы и т. Д. Xml читаются и сохраняются. Определение того, что следует читать из сообщения, определяется с помощью выражения Xpath. Например, следующий xpath берет атрибут серьезности и сохраняет его.

name.set ( ".// idmef: Классификация / idmef: Assesment / idmef: Влияние / @ тяжесть", "высокий");

Итак, я бы взял этот xpath, скомпилировал его, прочитал атрибут serverity и сохранил для последующего использования.

Когда я иду, чтобы создать новое сообщение XML, используя сохраненное значение, может быть случай, когда атрибут завершения и типа являются обязательными.

Итак, вопрос в том, как мне проверить, нужно ли выписывать эти атрибуты. Я знаю, что схема как-то задействована, но как ты это делаешь? Более того, если пользователь выбирает только атрибут серьезности, как бы я поступил, добавив в остальную часть структуры, например, Classification, Message и другие элементы, когда есть дополнительные поиски xpath, например, вниз по

Боб.

Ответы [ 3 ]

0 голосов
/ 09 октября 2009

Вы могли бы:

  • Открыть оригинальный XML (A)
  • Создать новый документ XML (B)
  • Запустите свой xpath против (A)
  • Добавить результаты поиска в (B)
  • Сохранить (B)

Это имеет какой-то смысл?

0 голосов
/ 11 октября 2009

Я нашел ответ здесь на stackoverflow, и вот он. Создание XML-узлов из XPath Я знаю, что это так же далеко от того, что я описал выше, но во время разработки не было scobie, как это будет работать.

0 голосов
/ 06 октября 2009

Комментаторы верны - вам нужно сначала исправить ваш XML, чтобы он был правильно сформирован.

Однако, если я правильно понимаю вашу проблему, вам нужно записать какой-нибудь XML, добавить или изменить некоторые атрибуты.

Если это то, что вам нужно, я бы попробовал использовать XSL-преобразование для добавления атрибутов. Вот модифицированная версия преобразования идентификаторов, которая должна быть близка к тому, что вам нужно. если вам нужна условная логика, то окружите теги атрибута xsl: if

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" 
    xmlns:idmef="http://iana.org/idmef" xpath-default-namespace="http://iana.org/idmef">
        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>

        <xsl:template match="Impact">
            <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:attribute name="severity">high</xsl:attribute>
                <xsl:attribute name="completion">failed</xsl:attribute>
                <xsl:attribute name="type">file</xsl:attribute>
                <xsl:apply-templates/>
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...