XLS bestand maken geeft melding bij openen! what's wrong?

Overzicht Reageren

Marco V

Marco V

30/06/2011 21:27:23
Quote Anchor link
Om een excel file te maken van een array ($XLS) gebruik ik onderstaand script, echter zodra ik het bestand wil openen (dus niet opslaan), geeft Excel de melding: "Office-bestandsverificatie heeft een probleem ontdekt tijdens het openen van dit bestand. Het kan gevaarlijk zijn om dit bestand te openen."

Iemand een idee waar het probleem zit? Beveiliging in Excel 2007 of een fout in mijn script?
Ik heb het niet in andere versies van Excel getest en heb de indruk dat deze melding pas sinds kort (na een excel-beveiligingsupdate?) wordt gegeven.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
// Functies voor export naar excel
function xlsBOF() {
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}

function
xlsEOF() {
echo pack("ss", 0x0A, 0x00);
return;
}

function
xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
echo pack("d", $Value);
return;
}

function
xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
return;
}


header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=".$bestandsnaam.".xls ");
header("Content-Transfer-Encoding: binary ");

xlsBOF();


// --------------------------------------------------------------------------------------

// Maak een titelregel bovenaan het document

// regel 0 van de XLS wordt gebruikt voor de bestandsnaam / titel van het document


$regel=0;
xlsWriteLabel($regel,0,$bestandsnaam);
$regel++;

// --------------------------------------------------------------------------------------

$xlsRow = 2; // we beginnen met schrijven van de data op regel 2 van de excel (dus rij 3, XLS is 0-based)
// regel 1 en regel 2 in de array $XLS worden gebruikt als tekst / label / kolomnamen


if ($XLS[$regel]) {
    foreach ($XLS[$regel] as $i => $l) {
        if ($l) {
            xlsWriteLabel($xlsRow,$i,$l);
        }
    }
}


$xlsRow++;
$regel++;

if ($XLS[2]) {
    foreach ($XLS[2] as $i => $l) {
        if ($l) {
            xlsWriteLabel($xlsRow,$i,$l);
        }
    }
}


// --------------------------------------------------------------------------------------

// beginregel van de data

$xlsRow++;

// schrijf de data records via een while-loop
// tel het aantal regels

$aantalregels = count($XLS);
$regel=2; // we beginnen bij regel 3, zetten daarom 2 als huidige regel, de eerste twee hebben we zojuist al afgedrukt, de array begint bij 1
while($regel < $aantalregels){
    
    // tel de regels
    $regel++;
    
    if ($XLS[$regel]) {
        foreach ($XLS[$regel] as $i => $l) {
            if (($i == 0) AND ($l)) {
                xlsWriteLabel($xlsRow,$i,$l);
            }
else if (($i > 0) AND ($l)) {
                xlsWriteNumber($xlsRow,$i,$l);
            }
        }
    }


    $xlsRow++;
}


xlsEOF();

// stop het script
exit();

?>


Toevoeging op 30/06/2011 21:56:02:

P.s. Gevonden verklaring voor dit fenomeen:

Microsoft-beveiligingsadvies (2501584)
Release van Microsoft Office-bestandsvalidatie voor Microsoft Office
Gepubliceerd op 12 apr 2011

Versie: 1.0

Algemene informatie
Samenvatting
Microsoft kondigt de beschikbaarheid aan van de functie Office-bestandsvalidatie voor ondersteunde edities van Microsoft Office 2003 en Microsoft Office 2007. De functie, die voorheen alleen verkrijgbaar was voor ondersteunde edities van Microsoft Office 2010, is ontworpen opdat klanten zich gemakkelijker kunnen beschermen tegen Office-bestanden die verkeerd ingedeelde gegevens kunnen bevatten, zoals ongewenste Office-bestanden afkomstig van onbekende of bekende bronnen, door bestanden te scannen en te valideren voordat ze worden geopend.

De functie Office-bestandsvalidatie die in dit advies wordt beschreven, wordt toegepast wanneer een Office-bestand wordt geopend met Microsoft Excel 2003, Microsoft PowerPoint 2003, Microsoft Word 2003, Microsoft Publisher 2003, Microsoft Excel 2007, Microsoft PowerPoint 2007, Microsoft Word 2007 of Microsoft Publisher 2007.

Met Office-bestandsvalidatie kunt u zogenaamde bestandsindelingsaanvallen detecteren en voorkomen. Bestandsindelingsaanvallen maken misbruik van de integriteit van een bestand en treden op wanneer de structuur van een bestand wordt gewijzigd met de bedoeling om schadelijke code toe te voegen. Gewoonlijk wordt de schadelijke code vanaf een externe afstand locatie uitgevoerd met de bedoeling om de bevoegdheid van beperkte accounts op de computer te verhogen. Daardoor kan een aanvaller toegang krijgen tot een computer die voorheen niet toegankelijk was. Een aanvaller kan zo gevoelige informatie lezen op de vaste schijf van de computer of malware installeren, zoals een worm of een programma dat toetsaanslagen registreert. De functie Office-bestandsvalidatie helpt bestandsindelingsaanvallen voorkomen door bestanden te scannen en te valideren voordat ze worden geopend. Om bestanden te valideren, vergelijkt Office-bestandsvalidatie de structuur van een bestand met een vooraf gedefinieerd bestandsschema, bestaande uit een reeks regels die definiëren hoe een leesbaar bestand er uitziet. Als Office-bestandsvalidatie detecteert dat de structuur van een bestand niet alle regels volgt die in het schema zijn beschreven, wordt het bestand niet gevalideerd.

Bestandsindelingsaanvallen treden voornamelijk op in bestanden die in binaire bestandsindelingen van Office zijn opgeslagen. Daarom scant en valideert Office-bestandsvalidatie de volgende soorten bestanden:

• Excel 2.0-, Excel 3.0-, Excel 4.0-, Excel 5.0-, Excel 97-2003-werkmapbestanden. Deze bestanden hebben de extensie . xls en omvatten alle BIFF2-, BIFF3-, BIFF4- en BIFF8-bestanden (Binary Interchange File Format).

• Excel 2.0-, Excel 3.0-, Excel 4.0-, Excel 5.0-, Excel 97-2003-sjabloonbestanden. Deze soorten bestanden hebben de extensie .xlt en omvatten BIFF2-, BIFF3-, BIFF4- en BIFF8-bestanden.

• PowerPoint 97-2003-presentatiebestanden. Deze bestanden hebben de extensie .ppt.

• PowerPoint 97-2003 Show-bestanden. Deze bestanden hebben de extensie .pps.

• PowerPoint 97-2003-sjabloonbestanden. Deze bestanden hebben de extensie .pot.

• Word 6.0-, Word 7.0- en Word 97-2003-documentbestanden. Deze bestanden hebben de extensie .doc.

• Word 6.0-, Word 7.0- en Word 97-2003-sjabloonbestanden. Deze bestanden hebben de extensie .dot.


Standaard genereren bestanden waarvan de validatie mislukt de volgende waarschuwing:

Office-bestandsverificatie heeft een probleem ontdekt tijdens het openen van dit bestand. Het openen van dit bestand kan gevaarlijk zijn.

Bestanden waarvan de validatie niet slaagt, worden niet geopend. De gebruiker krijgt echter standaard de keuze om het bestand toch te openen. Het openen van een bestand waarvan de validatie niet is geslaagd, wordt niet aangeraden aangezien het bestand schadelijk kan zijn.

Toevoeging op 30/06/2011 21:56:59:

bron: http://www.microsoft.com/belux/technet/nl/security/advisory/2501584.mspx
 
Er zijn nog geen reacties op dit bericht.



Overzicht Reageren