PPT

Werbung
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 & 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>>></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
Herunterladen