FrontPage 2000 führt ASP-Code aus

Ein schwerwiegender Bug – FrontPage 2000 führt ASP-Code aus!

Zum Erstellen und Bearbeiten von ASP-Dateien gibt es natürlich komfortablere Werkzeuge als FrontPage, bspw. Visual InterDev. Prinzipiell funktioniert es aber, und Microsoft ist sich sogar der Probleme bewußt, die dabei auftreten können, und bietet passende Lösungen an.

Daß FrontPage seit Version 2000 wie Word, Excel und Access über VBA programmierbar ist, scheint sich in der EDV-Welt noch nicht so richtig herumgesprochen zu haben. Die Möglichkeiten sind jedenfalls beeindruckend und erlauben flexible Website-Lösungen auch dann, wenn der Webserver nicht über die Möglichkeit zur Ausführung von ASP-, CGI- oder PHP-Skripten verfügt.

Im Zusammenspiel von VBA und ASP ist Microsoft aber offenbar ein schwerwiegender Fehler unterlaufen. Wird eine ASP-Datei unter FrontPage mit VBA-Methoden bearbeitet, wird unter gewissen Umständen der darin enthaltene ASP-Code ausgeführt und durch seine eigene Ausgabe überschrieben.

Die folgenden Code-Auszüge sollten den Sachverhalt verdeutlichen und jedem die Möglichkeit geben, das Problem zu reproduzieren. Zunächst die originale ASP-Datei, die außer HTML-Tags nur eine simple ASP-Anweisung enthält:

<html>
<head><title>Default.asp</title></head>
<body>
<%
  Response.Write "<p>Test...</p>"
%>
</body>
</html>

Dieser VBA-Code öffnet unter FrontPage lediglich die ASP-Datei, speichert und schließt sie wieder:

Sub Demonstration()

  Dim pw As PageWindow
  Set pw = ActiveWeb.RootFolder.files("Default.asp").Edit(fpPageViewNoWindow)
  pw.Save
  pw.Close
  
End Sub

Man sollte meinen, das VBA-Makro habe die ASP-Datei unverändert gelassen. Tatsächlich wurde die ASP-Anweisung ausgeführt und ihre Ausgabe in die Datei geschrieben. Der ASP-Code ist unwiderruflich verloren:

<html>
<head><title>Default.asp</title></head>
<body>
<p>Test...</p>
</body>
</html>

Wenn Sie dieses Beispiel nachvollziehen möchten, erstellen Sie ein FrontPage-Web und eine ASP-Datei mit obigem Inhalt. Über Extras → Makros → Visual Basic Editor oder Alt+F11 starten Sie dann die VBA-Umgebung und übernehmen meinen Code. Bevor Sie das Makro mit F5 starten, achten Sie darauf, daß die ASP-Datei nicht in einem Editorfenster geöffnet ist.

Weitere Versuche haben ergeben, daß der ASP-Code nicht ausgeführt wird, wenn die Edit-Methode mit einem anderen Parameter als fpPageViewNoWindow aufgerufen wird, etwa mit fpPageViewNormal. Dies verursacht jedoch immensen GUI-Overhead, und das Laufzeitverhalten des VBA-Makros wird verschlechtert.

Es ist natürlich auffällig, daß hier mehr funktioniert als eigentlich funktionieren sollte – sonst ist es doch meistens genau umgekehrt. Man stelle sich eine Access-Datenbank vor, die bspw. in einer Tabelle die Pfade einiger Dateien speichert. Was würden Sie sagen, wenn diese Dateien ohne Rückfrage geöffnet würden, weil etwa eine Abfrage auf die Tabelle zugreift?

Dieser Bug kann IMO einen beträchtlichen Schaden verursachen. Weil der ASP-Code durch seine eigene Ausgabe ersetzt wird, stellt man mit einem Browser zunächst keine Änderungen fest, denn ein Webserver würde den ASP-Code in derselben Weise ausführen und anzeigen. Aufwendige ASP-Programme können so mit wenigen Zeilen VBA-Code zerstört werden. Bis man den Fehler durch eine Überprüfung des Quelltextes bemerkt, ist es vermutlich schon zu spät.

Microsoft hat diesen Bug inzwischen bestätigt und in einem Knowledge Base-Artikel dokumentiert. Ab FrontPage 2002 besteht das Problem nicht mehr.