 
                                Validierung von Websites
Karsten Stein, Bernd Voit
Projektziele
Überprüfung nach verbotenen und
erforderlichen Inhalten
Download von passwortgeschützten
Seiten
FTP up- und download
Formulare mit get und post-Methode
Durchsuchen nach Links, E-Mails, etc.
Ausgabe eines Resume auf Bildschirm
Erstellung einer Logdatei
Vorgehensweise I
Steuerung durch eine Skriptdatei
HTTP und FTP Download mit Hilfe der
Curl-Library
 Durchsuchen einer Website durch
reguläre Ausdrücke mit Hilfe eines REGEX
der pcre-Library
 Weitere Durchsuchung der
Suchergebnisse
 Ausgabe von Suchergebnissen und
Kommentaren
Vorgehensweise II
Verwendung von
Programmargumenten, IntegerVariablen und Suchergebnissen als
Platzhalter
 Unbedingte und bedingte Sprünge
(anhand der Suchergebnisse)
 Ausführung von Programmen und
Programmmodulen im Skript
Reguläre Ausdrücke
meta-characters
–
–
–
–
–
–
–
–
–
–
–
–
\ general escape character with several uses
^ assert start of subject (or line, in multiline mode)
$ assert end of subject (or line, in multiline mode)
. match any character except newline (by default)
[ start character class definition
| start of alternative branch
( start subpattern
) end subpattern
? extends the meaning of ( also 0 or 1 quantifier also quantifier minimizer
* 0 or more quantifier
+ 1 or more quantifier
{ start min/max quantifier
•Beispiel: Integer-Zahlen [+|-]?([1-9][0-9]*)|0
Vereinfachter Ablauf
Skriptbefehle
Nummer
0
1
3
8
9
11
Name und Parameter
Neg option regex
Pos option regex
Limit option regex
Vneg option regex
Vpos option regex
Vlimit option regex
Beschreibung
Verbotener Inhalt
Erforderlicher Inhalt
Text/Teiltexte einschränken
Negativ mit Infozeile
Positiv mit Infozeile
Wie Limit jedoch mit Infozeile
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-18
-19
-20
-21
Print Text
Cleft Anzahl
Cright Anzahl
File Dateiname
url URLname
Write Dateiname
Init
// String
Show
Post url parameter
Showlist
Label labelname:
Jump labelname
Jumpif labelname nummer
Jumpifr labelname optionen regex
Var I Variablename Operator Zahl
Login url user:passw.
Sort
Upload url user:passw. Quelldatei
Run Programmname Parameter
Textzeile ausgeben (printf)
X Zeichen links abschneiden (für jeden Teiltext)
X Zeichen rechts abschneiden (für jeden Teiltext)
Datei laden
URL laden
Teiltexte in eine Datei schreiben
Alle Einschränkungen aufheben und ursprünglichen Zielstring verwenden
Kommentar
Alle Teiltexte ausgeben
URL laden inklusive Post-Parameter
Alle Anfangs und Endpositionen der Teilstrings anzeigen (debug)
Sprungmarke setzen
Zur Sprungmarke springen
Zur Sprungm. springen, wenn Treffer x nicht vorhanden
Zur Sprungmarke springen, wenn Regex nicht vorhanden
Integer-Variable (Operatoren: =,+,-,*,/)
Anmeldung an einer passwortgeschützen Seite (ftp oder http)
Teiltexte alphabetisch sortieren
Upload einer Datei an einem Server
Ausführung eines Programms / Skriptdatei
Platzhalter
Platzhalter können eigentlich überall in der Skriptdatei
verwendet werden. Auch Schachtelung ist möglich, z.B.:
{!/{!1!}!}. Es gibt drei Formen von Platzhaltern:
1.
als Programmargument beim Programmaufruf oder bei Modul
laden
Format: {![0-9]+!}, Bsp.: 2. Argument: {!2!}
2.
als Suchergebnis (Befehl „limit“)
Format: {!/[0-9]+!}, Bsp.: 3. Treffer der letzten Suche: {!/3!}
3.
als Integer-Variable (Befehl „var“)
Format: {![A-Z][0-9|A-Z]*!}, Bsp.: Variable i: {!i!}
Pcre.lib für die REGEX-Ausdrücke
struct returnPCRE {
int counter;
char regexR[MAXLINE];
int ovector[OVECCOUNT];
};
returnPCRE pcreDatei(char *htmldatei, const char *regex, int optionen);
Optionen der PCRE:
1 PCRE_CASELESS
2 PCRE_MULTILINE
4 PCRE_DOTALL
8 PCRE_EXTENDED
16 PCRE_ANCHORED
32 PCRE_DOLLAR_ENDONLY
64 PCRE_EXTRA
512 PCRE_UNGREEDY
2048
PCRE_UTF8
Kombination durch oder-Verknüpfung / Addition möglich.
libcurl.lib zum Transfer über’s Web
char *getURL(char *url, char *keyval, char *userpwd);
void pushURL(char *url, char *source);
Inerna:
Befehle >=0
Diese haben (intern) folgende Bitstruktur
1:Positiv
2:Einschränkung
4:Ergebnis der Suche ausgeben
8:Erweiterte Ausgabe (OK/NOTOK Regex)
Types.txt
Hier sind die Befehlsnamen den Befehlsnummern zugeordnet.
33
3 limit
3 filter
die Zahl 3 ist also die interne Nummerierung, und das Wort rechts daneben die
Bezeichnung, die in der Skriptdatei angegeben werden muss. 3, limit und filter haben hier
also die gleiche Bedeutung.
Beispiel 1:Zugriff auf Passwortgeschützte
Seite mit Fehlerauswertung
// Passwortgeschützte Seite laden
login www-1.informatik.fh-wiesbaden.de/~kstei001/ user:passw
jumpifr ok1 0 404 Not Found
print Seite nicht vorhanden
jump ende
label ok1:
jumpifr ok2 0 Authorization Required
print falscher Username oder Passwort
jump ende
label ok2:
print Username und Passwort OK
label ende:
Beispiel2: FTP-Upload
// ausgehend von einer Linkliste, pro Zeile eine Datei (durchnummeriert) auf einem Server uploaden
// Linkliste laden
load linkliste.txt
// ein Teiltext entspricht einer Zeile
limit 34 ^..*$
// Varialbe erstellen
var i test = -1
label anfang:
var i test + 1
jumpif ende {!test!}
startModul Web2Txt.txt {!/{!test!}!} {!test!}.txt
upload ftp.informatik.fh-wiesbaden.de/{!test!}.html usr:pwd {!test!}.txt
Jump anfang
label ende:
print Skript beendet.
// Hilfs-Skriptdatei Web2Txt.txt:
url {!1!}
write {!2!}
print
Beispiel 3: Formularergebnis nach
erforderlichen Inhalt prüfen (1)
print 1. Suche von Informatik.FH-Wiesbaden laden
url http://fh-web1.informatik.fh-wiesbaden.de/go.cfm?fb=6&action=search&sprachid=1&lpid=0&sid=0
print
print Body von der Framesite herausfiltern
vlimit 515 <frame name="body".*>
show
vlimit 515 src=".*"
show
cleft 5
cright 1
show
print
print Suchseite laden
url http://fh-web1.informatik.fh-wiesbaden.de{!/0!}
print
print Fachhochschule durchsuchen muss vorhanden sein
vlimit 512 Fachhochschule durchsuchen
jumpif errDurchsuche 0
print
init
print suche starten
vlimit 515 <form.*>
vlimit 515 action=".*"
vlimit 515 ".*"
cleft 1
cright 1
Beispiel 3: Formularergebnis nach
erforderlichen Inhalt prüfen (2)
post http://fh-web1.informatik.fh-wiesbaden.de{!/0!} query={!1!}
print
print Titel der Suchergebnisse von {!1!}
label treffer:
// nach erforderlichem Inhalt überprüfen
limit 0 Texis &amp; Webinator Copyright \(C\) 2\d{3,3}
THUNDERSTONE - EPI,
Inc."></A></H6>.\n</BODY></HTML>.$
jumpif errCopyright 0
init
// Titel der Suchergebnisse ausgeben
limit 515 <STRONG>.*</STRONG>
cleft 8
cright 9
show
init
// Nach dem Link "weiter" suchen
limit 515 <A HREF=".*"> <FONT
FACE="Helvetica">weiter</FONT>&gt;&gt;</A>
// Sprung wenn keine Treffer
jumpif ok 0
limit 515 <A HREF=".*">
limit 515 ".*"
cleft 1
cright 1
url http://fh-web1.informatik.fh-wiesbaden.de{!/0!}
jump treffer
Beispiel 3: Formularergebnis nach
erforderlichen Inhalt prüfen (3)
label errDurchsuche:
print
print Fachhochschule durchsuchen nicht gefunden
jump ende
label errCopyright:
print
print Copyright nicht gefunden
jump ende
label ok:
print
print keine Fehler aufgetreten
label ende:
print