2013-02-16 3 views
2

Все, я действительно мог бы использовать некоторую помощь здесь. Моя конечная цель - прочитать xml-файл с помощью perl и вставить его в базу данных для отслеживания CVE. На этом этапе, если бы я мог просто ссылаться на переменные из файла XML в моем коде, я уверен, что смогу его вставить в базу данных. Пока все, что я пытаюсь сделать, это распечатать его на экране, и я не могу заставить его работать.Разбор xml с пространством имен с использованием Perl XML :: Simple

Вот мой простой код и XML-файл.

Надеюсь, кто-то может заставить меня пойти сюда.

--start из Perl code--

#!/usr/bin/perl 

# use module 
use XML::Simple; 
use Data::Dumper; 

# create object 
xml = new XML::Simple (KeyAttr=>[]); 

# read XML file 
#$data = $xml->XMLin("tms.xml"); 

# print output - used this to see if it was even reading it 
#print Dumper($data); 

# access XML data 
print "Here is the BugTrackID: $data->{'x:BugTraqID'}\n"; 

--end из Perl кода ---

--start из xml--

<?xml version="1.0" encoding="us-ascii"?> 
<Alerts xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:alerts.symantec.com https://alerts.symantec.com/vulalert.xsd"> 
<x:AlertDocument xmlns:x="urn:alerts.symantec.com" AlertStatusID="57982" Type="1" DetailLevel="25" Language="1"> 
<x:BugTraqID>57982</x:BugTraqID> 
<x:Title>Sonar Multiple Cross Site Scripting Vulnerabilities</x:Title> 
<x:StatusID>1</x:StatusID> 
<x:CVE>CVE-MAP-NOMATCH</x:CVE> 
<x:Published>Feb 12 2013</x:Published> 
<x:LastUpdated>2013-02-15T19:03:48</x:LastUpdated> 
<x:Remote>Yes</x:Remote> 
<x:Local>No</x:Local> 
<x:Credibility>Single Source</x:Credibility> 
<x:Classification>Input Validation Error</x:Classification> 
<x:Availability>User Initiated</x:Availability> 
<x:Ease>Exploit Available</x:Ease> 
<x:Authentication>Not Required</x:Authentication> 
<x:CVSS2_BaseScore>5.8</x:CVSS2_BaseScore> 
<x:CVSS2_TemporalScore>5</x:CVSS2_TemporalScore> 
<x:CVSS2_BaseVector>AV:N/AC:M/Au:N/C:P/I:P/A:N</x:CVSS2_BaseVector> 
<x:CVSS2_TemporalVector>E:F/RL:U/RC:UC</x:CVSS2_TemporalVector> 
<x:CVSS1_BaseScore>3.7</x:CVSS1_BaseScore> 
<x:CVSS1_TemporalScore>3.2</x:CVSS1_TemporalScore> 
<x:NVD_CVSS2_BaseScore>4.3</x:NVD_CVSS2_BaseScore> 
<x:NVD_CVSS2_ComponentString>AV:N/AC:M/Au:N/C:N/I:P/A:N</x:NVD_CVSS2_ComponentString> 
<x:ImpactRating>4</x:ImpactRating> 
<x:Severity>6.1</x:Severity> 
<x:EaseofExploit>8</x:EaseofExploit> 
<x:UrgencyRating>6.1</x:UrgencyRating> 
<x:LastChange>Initial analysis.</x:LastChange> 
<x:VulnerableSystems> 
    <x:VulnerableSystem> 
    <x:Title><![CDATA[SonarSource Sonar 3.4.1 cpe:/a:sonarsource:sonar:3.4.1 SYMC]]></x:Title> 
    </x:VulnerableSystem> 
</x:VulnerableSystems> 
<x:ShortSummary><![CDATA[Sonar is prone to multiple cross-site scripting vulnerabilities.]]></x:ShortSummary> 
<x:Impact>An attacker may leverage these issues to execute arbitrary script code in the browser of an unsuspecting user in the context of the affected site. This may allow the attacker to steal cookie-based authentication credentials and launch other attacks.</x:Impact> 
<x:TechnicalDescription><![CDATA[Sonar is the open source platform for code quality inspection.   

The application is prone to multiple cross-site scripting vulnerabilities because it fails to sanitize user-supplied input submitted to the following scripts and parameters:  

&apos;index.php &apos; : &apos;search&apos;, &apos;assignee_login&apos;,  
&apos;author_login&apos;  
&apos;sources.php&apos; : &apos;resource&apos;  

An attacker may leverage these issues to execute arbitrary script code in the browser of an unsuspecting user in the context of the affected site. This may allow the attacker to steal cookie-based authentication credentials and launch other attacks.             

Sonar 3.4.1 is vulnerable; other versions may also be affected.]]> 
</x:TechnicalDescription> 
<x:AttackScenario><![CDATA[1. An attacker scans for and locates a site running the affected application.  

2. The attacker crafts a URI link that includes malicious script code designed to leverage one of these issues.  

3. The attacker uses email or other means to distribute the malicious link and entices an unsuspecting user to follow it.  

4. When the user follows the link, the attacker-specified script code runs in their browser in the context of the affected site.  

A successful exploit may let the attacker steal cookie-based authentication credentials and launch other attacks.]]></x:AttackScenario> 
<x:Exploit><![CDATA[Attackers can exploit these issues by enticing an unsuspecting victim into following a malicious URI.   

The following example URIs are available: 

http://www.example.com/dependencies/index? search="&amp;gt;&amp;lt;script&amp;gt;alert(/devilteam.pl/)&amp;lt;/script&amp;gt; 

http://www.example.com/dashboard/index/41730? did=4&amp;amp;period=3"&amp;gt;&amp;lt;script&amp;gt;alert(/devilteam.pl/)&amp;lt;/script&am p;gt; 

http://www.example.com/reviews/index?review_id=&amp;amp;statuses[]=OPEN&amp;amp;statuses[]=REOPENED&amp;amp;severities[]=&amp;amp;projects[]=&amp;amp;amp;author_login=&amp;amp;assignee_login="&amp;gt;&amp;lt;script&amp;gt;alert(/devilteam.pl/)&amp;lt;/script&amp;gt;&amp;amp;false_positives=without&amp;amp;sort=&amp;amp;asc=false&amp;amp;commit=Search 

http://www.example.com/reviews/index?review_id=&amp;amp;statuses[]=OPEN&amp;amp;statuses[]=REOPENED&amp;amp;severities[]=&amp;amp;projects[]=&amp;amp;amp;author_login="&amp;gt;&amp;lt;script&amp;gt;alert(/devilteam.pl/)&amp;lt;/script&amp;gt;&amp;amp;assignee_login=&amp;amp;false_positives=without&amp;amp;sort=&amp;amp;asc=false&amp;amp;commit=Search 

http://www.example.com/api/sources?resource=&amp;lt;script&amp;gt;alert(/devilteam.pl/)&amp;lt;/script&amp;gt;&amp;amp;format=txt 

]]></x:Exploit> 
<x:MitigatingStrategies> 
    <x:MitigatingStrategy> 
    <x:Title><![CDATA[Block external access at the network boundary, unless external parties require service.]]></x:Title> 
    <x:Description><![CDATA[If global access isn&apos;t needed, filter access to the affected computer at the network boundary. Restricting access to only trusted computers and networks might greatly reduce the likelihood of a successful exploit.]]></x:Description> 
    </x:MitigatingStrategy> 
    <x:MitigatingStrategy> 
    <x:Title><![CDATA[Run all software as a nonprivileged user with minimal access rights.]]></x:Title> 
    <x:Description><![CDATA[Attackers may successfully exploit client flaws in the browser through cross-site scripting vulnerabilities. When possible, run client software as regular user accounts with limited access to system resources. This may limit the immediate consequences of client-side vulnerabilities. ]]></x:Description> 
    </x:MitigatingStrategy> 
    <x:MitigatingStrategy> 
    <x:Title><![CDATA[Do not follow links provided by unknown or untrusted sources.]]></x:Title> 
    <x:Description><![CDATA[Web users should be cautious about following links to websites that are provided by unfamiliar or suspicious sources. Filtering HTML from emails may help remove a possible vector for transmitting malicious links to users. ]]></x:Description> 
    </x:MitigatingStrategy> 
    <x:MitigatingStrategy> 
    <x:Title><![CDATA[Set web browser security to disable the execution of script code or active content.]]></x:Title> 
    <x:Description><![CDATA[Since exploiting cross-site scripting issues often requires malicious script code to run in browsers, consider disabling script code and active content support within a client browser as a way to prevent a successful exploit. Note that this mitigation tactic might adversely affect legitimate sites that rely on the execution of browser-based script code. ]]></x:Description> 
    </x:MitigatingStrategy> 
</x:MitigatingStrategies> 
<x:Solutions> 
    <x:Workaround><![CDATA[Workaround 
]]></x:Workaround> 
    <x:Solution><![CDATA[Currently, we are not aware of any vendor-supplied patches. If you feel we are in error or are aware of more recent information, please mail us at: [email protected]]]></x:Solution> 
</x:Solutions> 
<x:Credit>DevilTeam</x:Credit> 
<x:ChangeLogs> 
    <x:ChangeLog> 
    <x:Title><![CDATA[2013.02.15: Initial analysis.]]></x:Title> 
    </x:ChangeLog> 
</x:ChangeLogs> 
<x:References> 
    <x:Reference> 
    <x:Title><![CDATA[Web Page:Sonar Homepage (SonarSource) SonarSource]]></x:Title> 
    <x:URL><![CDATA[http://www.sonarsource.com/products/software/sonar/]]></x:URL> 
    <x:Description><![CDATA[http://www.sonarsource.com/products/software/sonar/]]></x:Description> 
    </x:Reference> 
    <x:Reference> 
    <x:Title><![CDATA[Web Page:Sonar v.3.4.1 =&amp;gt; XSS (CWE-79) (DevilTeam) DevilTeam]]></x:Title> 
    <x:URL><![CDATA[http://cxsecurity.org/issue/WLB-2013020088]]></x:URL> 
    <x:Description><![CDATA[http://cxsecurity.org/issue/WLB-2013020088]]></x:Description> 
    </x:Reference> 
</x:References> 
<x:URL>https://alerts.symantec.com/loaddocument.aspx?GUID=cffd18f0-7b75-4c6a-adc0-74f480808fff</x:URL> 
<x:OVALDefinitions /> 
</x:AlertDocument> 
</Alerts> 

--end из xml ---

+0

Какая у вас проблема? – ikegami

+0

Вы упомянули namesapces. XML :: Простые знают об именах и префиксах. Он просто предполагает, что префикс является частью имени узла. «XML :: Simple, самый сложный анализатор XML, который вы могли бы использовать». – ikegami

+0

Я не могу получить его для вывода каких-либо значений. В частности, я просто пытаюсь заставить его напечатать значение bugtraqid из xml-файла. Его возвращение нулевое. –

ответ

3

Вы ищете $data->{'x:AlertDocument'}{'x:BugTraqID'}, возможно?


Я предпочитаю XML :: LibXML. Следующие действия будут работать независимо от того, какой префикс используется в документе, если таковой имеется. (Вам не нужно заботиться о том, какой префикс используется в документе.)

#!/usr/bin/perl 

use strict; 
use warnings; 

use XML::LibXML    qw(); 
use XML::LibXML::XPathContext qw(); 

my $parser = XML::LibXML->new(); 
my $doc = $parser->parse_file("tms.xml"); 

my $xpc = XML::LibXML::XPathContext->new($doc); 
$xpc->registerNs(x => 'urn:alerts.symantec.com'); 

for my $alert_doc ($xpc->findnodes('/Alerts/x:AlertDocument')) { 
    my ($bug_traq_id) = $xpc->findnodes('x:BugTraqID', $alert_doc); 
    print $bug_traq_id->textContent(), "\n"; 
} 
+0

Я до сих пор не получил никакого значения. Я получаю это: Вот CVE: –

+0

Я тестировал перед публикацией. Что-то в вашем тесте отличается от того, что вы разместили. – ikegami

+0

Или, может быть, ваш XML :: Simple использует разбитый синтаксический анализатор XML? XML :: Simple на самом деле не является парсером; это просто интерфейс для одного из многих парсеров. – ikegami

-1

Ваш XML не имеет целевого пространства имен. Это не проблема, но вы должны принять это во внимание.

Вы можете указать, какой из парсеров XML::Simple использовать.

Вот пример кода с XML::Simple, который получает ожидаемый результат.

tvnshack$ ./a.pl 
Trying bugtrack.xml ... bugtrack.xml is indeed valid 
BugTrackID is: 57982 

Код ниже ... чтобы отрегулировать по своему вкусу (она основана на каком-то живом коде я использую в производстве).

#!/opt/perl/bin/perl -w 

use strict; 
use XML::Simple qw(:strict); 
use Data::Dumper; 

# Supported namespaces 
my $nspcBUGT = 'urn:alerts.symantec.com'; 
my $parsingfailed = 0; 
my $XMLdata; 

my $XMLfname = 'bugtrack.xml'; 

    print STDOUT "Trying $XMLfname ... "; 

    $XML::Simple::PREFERRED_PARSER = 'XML::SAX::Expat'; 
    my $simpleCstr = XML::Simple->new(
    Cache => [ 'memshare' ], 
    KeyAttr => [], 
    ForceArray => 1, 
    KeepRoot => 1, 
    ContentKey => 'value', 
    NSExpand => 1, 
    NormaliseSpace => 1); 
    eval { 
    $parsingfailed++; 
    # if the parsing fails, the module will terminate the process abruptly. 
    $XMLdata = $simpleCstr->XMLin($XMLfname); 
    # This line of code will not be executed, leaving $parsingfailed>0. 
    $parsingfailed = 0; 
    }; 
    if ($parsingfailed > 0) { 
    print STDERR "Error: That XML file <$XMLfname> can not be read, does not exist or is not a valid XML file (possible wrong namespace too).\n"; 
    } else { 
    if (defined($XMLdata->{"Alerts"})) { 
     print STDOUT "$XMLfname is indeed valid\n"; 
     print STDOUT " BugTrackID is: " . $XMLdata->{'Alerts'}->[0]->{"{$nspcBUGT}AlertDocument"}->[0]->{"{$nspcBUGT}BugTraqID"}->[0] . "\n"; 
     # print Dumper($XMLdata) . "\n"; 
    } 
    } 

__END__ 
+0

Хотелось бы узнать, кто и почему этот взнос был проголосован отрицательно, и обсудить его. У меня есть большой опыт работы с этим кодом в производстве, который выучил из фактов. Я гарантирую, что кто-либо, не принимающий вышеуказанные меры предосторожности, рано или поздно столкнется с проблемами. Возможно, я ошибаюсь или не являюсь исчерпывающим. Это требует обсуждения. – TVNshack

Смежные вопросы