Teil von  SELFPHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP? In über 120.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Webformulare automatisiert ausfüllen


Systemvoraussetzung

  • Linux
  • Windows
  • PHP 4 >= 4.0.3
  • PHP 5
  • CURLBibliothek

Datei(en)

curl_form.php, curl_formular.php, curlForm.sql

Problem

Wir haben Ihnen in einem vorangegangenen Beispiel (Captcha) gezeigt, wie man den Unterschied zwischen einem Mensch und einer Maschine erkennt. Wir wollen Ihnen im Folgenden demonstrieren, wie jemand, ohne auf Ihrer Webseite gewesen zu sein, eines Ihrer Formulare beliebig oft ausfüllen kann.

Ein einziges Mal muss man dazu aber doch auf die Webseite, um sich den Quellcode des Formulars anzuschauen. Danach läuft aber alles automatisiert.


Lösung

Die Lösung hierfür ist sehr trivial. Wir müssen lediglich unser vorheriges Beispiel ein wenig modifizieren, und schon können wir uns überall eintragen. Voraussetzung dafür ist allerdings, dass das entfernte Formular keinen Schutz wie zum Beispiel Captcha beinhaltet.

Alles, was wir machen müssen, ist, dass entfernte Formular einmal aufzurufen, den Quellcode zu öffnen und nach den Variablen zu schauen. Diese Variablen und die URL zum Formular ersetzen wir dann in unserem Programm. Fertig!

Hinweis

Bevor wir anfangen, den Programmcode zu erklären, möchte ich Ihnen ein paar Worte vorweg sagen. Bitte missbrauchen Sie dieses Programm nicht für illegale Zwecke, um z. B. mehrere 1000 Einträge in irgendwelchen Formularen wie Foren, Gästebücher, Gewinnspiele zu machen.

Sie wissen schließlich nicht, was auf der Gegenseite mitprotokolliert wird! Wenn man Ihre Verbindung zurückverfolgen kann, müssen Sie eventuell mit empfindlichen Strafen rechnen! Dieses Programm soll Schwachstellen in Ihren eigenen Formularen aufdecken, nicht Schwachstellen anderer Formulare!

Ich möchte Sie deshalb an dieser Stelle nochmals ausdrücklich darauf hinweisen, diesen Programmcode nur auf Ihre eigenen Formulare anzuwenden!

function curlStart($domain, $var)
   @param   string   $domain
   @param   string   $var
   @return   bool      $send

Die Funktion curlStart() erwartet als Parameter zum einen die URL zum Formular und zum anderen die Variablen, die übermittelt werden sollen.

Wir initialisieren (36) anhand der URL zuerst eine neue Session und setzen im nächsten Schritt einen Time-Out-Wert (38) für diese Verbindung fest. Dieser Wert sorgt dafür, dass alle nachfolgenden CURL-Funktionen in dieser Zeit abgearbeitet werden müssen.

Wird die Zeit überschritten, so endet die Verbindung. Sie können hier ruhig einen kleineren Wert einstellen, da die kommenden Aktionen nicht viel Zeit benötigen.

Da wir lediglich die Variablen absetzen wollen und uns die eventuelle Fehlermeldung nicht interessiert, setzen wir den Parameter (40) für die Fehlermeldungen auf 1. Sollten Sie die Fehlermeldungen allerdings benötigen, müssen Sie hier einen Wert von 0 (Null) eintragen. Sie erhalten dann jeweils im Fehlerfall, wenn der HTTP-Code größer ist als 300, einen Fehlertext geliefert.

Wir müssen jetzt noch den Transfermodus berücksichtigen. Die angepingte Webseite soll ja nicht in unserer Seite inkludiert, sondern nur abgefragt werden. Aus diesem Grund setzen wir den Parameter (42) für den Transfer auf 1. Wenn Sie hier eine 0 (Null) eingeben, so wird neben Ihrer Seite auch die Seite des entfernten Hosts angezeigt!

Im nächsten Schritt überprüfen wir, ob der Funktion überhaupt eine Variable übermittelt wurde. Falls ja, so wird für die Übermittlung der Variablen die POST-Methode (45) und anschließend der String für die Übermittlung der Variablen gesetzt (46). Bei der Übermittlung per POST wird das Verfahren „application/x-www-form-urlencoded“ genutzt.

Wir haben jetzt lediglich die Parameter gesetzt, müssen diese aber noch ausführen (49). Aus diesem Grund sollten alle Parameter vorher gesetzt werden, damit die initialisierte Session durch den Befehl curl_exec() (49) ausgeführt werden kann.

Sollte der Server oder die Webseite nicht erreichbar sein, erhalten wir als Rückgabewert entweder „TRUE“ (53) oder „FALSE“ (51). Wir speichern das Ergebnis „TRUE“ (54) oder „FALSE“ (52) in eine Variable, schließen die Verbindung (57) zum Server und geben die Variable an unsere aufrufende Stelle zurück (59).

34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
function curlStart($domain$var false){
    
    
$fp curl_init($domain);
    
    
curl_setopt($fp,CURLOPT_TIMEOUT,10);
    
    
curl_setopt($fp,CURLOPT_FAILONERROR,1);
    
    
curl_setopt($fp,CURLOPT_RETURNTRANSFER,1);
    
    if(
$var != false) {
        
curl_setopt($fp,CURLOPT_POST,1);
        
curl_setopt ($fpCURLOPT_POSTFIELDS$var); 
    }
    
    
curl_exec($fp);
    
    if(
curl_errno($fp) != 0) {
        
$send FALSE;
    } else {
        
$send TRUE;
    }
    
    
curl_close($fp);
    
    return 
$send;
    
}
Beispiel 10.3: curl_form.php

Der restliche Teil ist relativ simpel und schnell erklärt. Sie müssen im ersten Schritt die vollständige URL zum Formular angeben (63). Weiterhin benötigen wir noch die Variablen (64). Wenn Sie sich den unten stehenden HTML-Quellcode anschauen, so finden Sie dort zwei Variablen.

  • vorname
  • name

Um den Variablen einen Wert zuweisen zu können, müssen Sie ein Gleichheitszeichen setzen:

vorname=Damir
name=Enseleit

Da wir aber nur ein String benötigen, müssen wir die einzelnen Variablen voneinander trennen. Hierfür dient ebenfalls die GET-Schreibweise, und wir trennen diese mit dem kaufmännischen UND (&).

Hier im Beispiel haben wir dann 50-mal den Aufruf unserer Funktion durchgeführt (67). Innerhalb von ein paar wenigen Sekunden wurden 50 Einträge in der Datenbank gespeichert.

63:
64:
65:
66:
67:
68:
$formURL 'http://www.nureinbeispiel4.de/curl_formular.php';
$var 'vorname=Damir&name=Enseleit';

for(
$x=0;$x<50;$x++) {
    
$send curlStart($formURL,$var);
}
Beispiel 10.4: curl_form.php

Wie bereits erwähnt, benötigen Sie nur die Formularnamen und die URL zu dem Formular. Der nachstehende Quellcode der HTML-Seite dient dabei der Veranschaulichung.

Quellcode der fremden FormularSeite

18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:

32:
33:
34:
35:
36:

37:
38:
39:
40:

41:
42:
43:
44:
45:
<html>
<head>
<title>Webformulare automatisiert ausfüllen lassen</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="formStyle.css" rel="stylesheet" type="text/css">
</head>

<body>
<form name="form1" method="post" action="curl_formular.php">
<table width="100%" border="0" cellspacing="0" class="table">
  <tr>
    <td width="7%">Vorname</td>
    <td width="93%">
      <input name="vorname" type="text" class="inputField" 
             value="<?PHP echo $_POST['vorname']; ?>">
    </td>
  </tr>
  <tr>
    <td>Name</td>
    <td><input name="name" type="text" class="inputField" 
            value="<?PHP echo $_POST['name']; ?>"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input name="Submit" type="submit" class="button" 
             value="Abschicken"></td>
  </tr>
</table>
</form>
</body>
</html>
Beispiel 10.5: curl_formular.php

 


Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!

Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner LeaseWeb Germany GmbH
Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


DM Solutions
Microsoft Deutschland GmbH
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2013 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt