Geschrieben von: Christoph Wille
Kategorie: Server
This printed page brought to you by AlphaSierraPapa
Das Testen einer Website mit verschiedenen Browsern gehört zum Alltag eines Webentwicklers - zumindest dann, wenn man nicht an einem Intranetprojekt arbeitet, wo der Browser Firmenpolitik ist.
Mit Browsertests kann man sowohl Layoutprobleme, als auch Client-side Scriptprobleme erkennen und ausmerzen. Allerdings ist damit nicht gewährleistet, daß man alle Details der Verbindung Web Server und Client manipulieren kann, was für Sicherheits- und Stabilitätstests wichtig sein kann.
Auf welche Details will ich hinaus? Zum Beispiel schickt der Browser automatisch seine Kennung, für Internet Explorer auf Windows 2000 wäre das zB:
Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)Netscape Navigator schickt eine ähnliche Kennung, allerdings ohne den String compatible. Wenn man nicht gerade eine Komponente zur Erkennung der Browserfähigkeiten verwendet, dann parst man den String selbst auf - und macht gelegentlich Fehler, so zum Beispiel indem man Punktversionen nicht berücksichtigt, oder nachfolgende Versionen ignoriert:
If Mid(strBrowser,31,1) = 5 ThenDieser Code würde nur für Internet Explorer Version 5.x funktionieren, bei einem Wechsel auf 6 oder mehr, müßte man die Webseiten umprogrammieren. Und es soll vorgekommen sein, daß solche Fehler überhaupt lange Zeit übersehen wurden...
Weitere Ansatzpunkte zum Testen außerhalb eines Browsers: leichteres Austesten von GET und POST, die Möglichkeit die Header direkt einsehen zu können (für cache-control, Cookie, etc), Content Types manipulieren zu können, uvm.
Im weiteren Verlauf des Artikels stelle ich nun vor, wie man sich eine interaktive Testapplikation erstellen kann. Diese kann nach Belieben an die Bedürfnisse angepasst werden, oder sogar in ein automatisiertes Test-Tool für Websites umgebaut werden.
Für die Programmierung habe ich 2 Tools verwendet: Visual Basic 6.0 (ASP Programmierer haben den Vorteil, nicht sehr viel dazulernen zu müssen), sowie die AspTear 1.2 Komponente von AlphaSierraPapa. Mit VB programmiere ich das Front End, und AspTear dient mir dazu, mich mit dem Webserver zu unterhalten - sprich die Seiten mit den entsprechenden Details abzufragen:
Das Programm W3Test ist als Standard EXE programmiert (Sourcecode und Executable im Download enthalten). Das fertige User Interface sieht in der Visual Basic Entwicklungsumgebung wie folgt aus:
Um nun den Code für die AspTear Komponente einzufügen, muß nur noch die Typbibliothek referenziert werden. Dies geschieht über den Befehl References im Project Menü. Mit dem Befehl Browse sucht man dann asptear.tlb und bindet sie in das Projekt ein:
Nun kann man den Code programmieren, um eine Seite vom Webserver abzuholen:
Private Sub cmdGo_Click() On Error GoTo Err_CmdGo Dim strURL As String, nPort As Integer, strRetVal As String Dim nAction As Integer ' I simply get the text here, you can add whatever check you want strURL = Me.txtURL.Text ' get the port - simple check if it is numeric nPort = 80 If IsNumeric(Me.txtPort) Then nPort = Me.txtPort Else MsgBox "The port number you entered is non-numeric." Exit Sub End If Dim tearObj As New ASPtear.ASPtear tearObj.ContentType = Me.txtContentType tearObj.FollowRedirects = Me.chkFollowRedirects.Value tearObj.HttpVersion = Me.cbProtocol.Text tearObj.Port = nPort tearObj.UserAgent = Me.txtUserAgent If Me.radioGET.Value = True Then nAction = ACTION_GET Else nAction = ACTION_POST End If strRetVal = tearObj.Retrieve(strURL, nAction, Me.txtData, "", "") Me.txtResponse = Replace(strRetVal, vbLf, vbCrLf) Me.txtHeader = tearObj.Headers MsgBox "Retrieval finished!" Exit Sub Err_CmdGo: MsgBox Err.Description & vbCrLf & "Error number: " & Err.Number Exit Sub End Sub
Ich habe mich mit der Überprüfung der Benutzereingaben sehr zurückgehalten, um den Sourcecode kurz zu halten - und auch scheinbar sinnlose Anfragen zuzulassen, wie zum Beispiel ein leerer User Agent String (damit kann man sehr viel Browser-Checking Code zu Fall bringen...).
Die Verwendung des Tools ist sehr einfach, und als Beispiel soll die Anfrageseite für Autoren bei AspHeute dienen:
http://www.aspheute.com/Service/contactauthor.asp? author=Christoph+Wille& AuthorEmail=christophw@alphasierrapapa.com& artikel=20000502Wenn man diese URL in der Adresszeile des Browsers eingibt, landet man bei der Kontaktseite für den Artikel Monitoring von ASP.
Um nun diese URL von der W3Test Applikation aus aufzurufen, muß man folgende Einstellungen eingeben (Resultat ebenfalls bereits in diesem Screenshot angezeigt):
Jetzt kann man daran gehen, POST statt GET zu verwenden, den User Agent auszuprobieren, einige Parameter des Query Strings zu verändern - um den Code der Seite auf Schwächen abzuklopfen.
Darauf hinweisen möchte ich, daß für GET als auch POST das Format für die Parameterübergabe gleich ist, also als Query String. Binäres POSTen (Dateiupload) ist nicht möglich.
Das W3Test Programm ist in der Lage Response.Redirect Anweisungen zu folgen, und zwar dann, wenn die Checkbox Follow Redirects angekreuzt ist; sonst bekommt man eine Fehlermeldung, daß der Server einen Redirect verlangt hat.
Das hier vorgestellte W3Test Programm schöpft nicht die gesamte Palette der Funktionalität der AspTear Komponente aus. Diese kann auch noch Benutzervalidierung, SSL Client Zertifikate, sowie das Faken des Referers (von welcher Seite der Benutzer zu dieser Seite gekommen ist).
Eine weitere Anwendungsmöglichkeit für die AspTear Komponente ist ein Skript, das jeden Tag die eigene Website besucht, und die Hauptseite mit einem Template vergleicht - um zu sehen, ob sich ein Hacker daran vergangen haben sollte. Natürlich kann die Komponente auch am Server selbst eingesetzt werden, um zum Beispiel Kreditkarten zu überprüfen.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000508.zip
ASP-basierte Basic Authentication
http:/www.aspheute.com/artikel/20010521.htm
Laden von Dateien aus dem Web mit ASP
http:/www.aspheute.com/artikel/20000519.htm
Meta Tags von fremden Seiten parsen
http:/www.aspheute.com/artikel/20010803.htm
Scrapen von Webseiten
http:/www.aspheute.com/artikel/20000824.htm
Siteüberwachung mit Scheduled Tasks
http:/www.aspheute.com/artikel/20010419.htm
Webpage-Grabbing mit dem XML Parser
http:/www.aspheute.com/artikel/20010328.htm
AspTear
http://www.alphasierrapapa.com/componentcenter/asptear/
Typbibliothek für AspTear
http://www.alphasierrapapa.com/Support/FAQ/00002.asp
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.