Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Erstellen eines HTTP Test Tools

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 Then
Dieser 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.

Programmierung

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:

Vom Server zurückgeliefert werden Headers und der Inhalt (das HTML Dokument) - sowie etwaige Fehlermeldungen.

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...).

Verwendung

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=20000502
Wenn 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.

Schlußbemerkung

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

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000508.zip

Verwandte Artikel

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

Links zu anderen Sites

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.