Support Suche
Support Kategorien

Schutz Ihrer Scripte

Support: Webseite
Der mail()-Befehl von PHP ermöglicht es E-Mails zu versenden. Er wird deshalb häufig im Zusammenhang von Formularen (Kontaktformularen usw.) , für eigene Newslettersysteme usw. verwendet. Der Befehl ist relativ mächtig, bietet aber von sich aus keine Sicherheitseinstellungen. Die Problematik besteht darin, dass viele Scripte Eingaben von usern z.B. via POST entgegennehmen und dies dann als E-Mail unter Verwendung des mail-Befehls weiterleiten. Der Programmierer muss dafür sorgen, dass nur gültige Daten des users übernommen werden. Leider sind aber viele Scripte in dieser Hinsicht zu Zeiten programmiert, in denen diese Problematik noch nicht gegeben war, oder bei neueren Scripts unsicher geschrieben. Dies Lücken erlauben es Spammern Ihre Scripts zu missbrauchen und damit unter Ihrem Namen Werbemails/Porno/Viren usw. zu verbreiten. Wir stellen leider fast täglich solchen Missbrauch fest! Als Reaktion werden diese Scripts von uns umgehend deaktiviert und der Betreiber der Homepage informiert! Wir sind verpflichtet diese Scripte sofort zu deaktivieren, auch wenn Teile Ihrer Homepage damit nicht mehr einwandfrei funktionieren. Der Spamschutz hat aber Priorität. Dies ist aber bestimmt auch in Ihrem Sinne. Da der Spammer ja Ihre Absenderadresse missbraucht, kann das Ihrem Ruf schaden und ausserdem könnten Ihre regulären Mails von andern Providern als Folge davon geblockt werden!

Was können Sie tun

  • Verwenden Sie für normale Formularverarbeitung am besten unser Formularscript.
  • Für Newslettersysteme verwenden Sie unser Mailinglistensystem.
  • Einsetzen eines Captchas

Sofern Sie andere Mailanwendungen haben oder Ihr eigenes Script verwenden möchten, dann achten Sie auf folgende Punkte.

Referenz mail-Befehl:

mail($to, $subject, $message, $header, $param)

Gefährlich sind hier vor allem $to, $subject und $header !

  • $to: Verwenden Sie hier falls möglich NIE Variabeln welche Sie von extern via POST übernehmen! Verwenden Sie als $to wenn möglich eine bei NetZone eingerichtete EMail-Adresse. Falls Sie das anhand der Funktionsweise des Script das $to dynamisch setzen müssen, dann müssen Sie explizit prüfen ob es eine gültige EMail-Adresse ist. Entfernen Sie allfällige \r oder \n in dieser Variable und beschränken Sie die Variable auf eine vernünftige maximale Länge (z.B. 40 Zeichen), z.b. mit substr()-Befehl
  • $subject: Keine externen Daten via POST übernehmen und Entfernen Sie hier ebenfalls alle \r und \n (= Zeilenumbruch und Carriage Return). Beschränken Sie die Variable auf eine vernünftige Maximallänge
  • $header: Verzichten Sie hier wie bei $to auf die Verwendung von externen Variabeln und falls Sie diese doch benötigen (z.B. für Angabe von from) dann entfernen Sie alle \r \n vorher aus diesen Variabeln. Beschränken Sie die Variablen auf eine vernünftige Maximallänge

Sofern Sie dies nicht tun, kann ein Spammer mehrere tausend E-Mail Adressen einschleusen und unter Ihrem Namen Spam und Viren versenden!

Sie sollten Ihr Script also Ihren Bedürfnissen exakt anpassen und entsprechend absichern.

Als Notlösung haben wir einen eigenen mail-Befehl zur Verfügung entwickelt, welcher viele Sicherheitslücken schliesst. Er ist bedeutend sicherer als der normale mail-Befehl von PHP aber natürlich nie so gut wie ein entsprechend angepasstes Script.

Die Parameter sind identisch mit denjenigen des normalen PHP-Befehls.

include_once('/home/httpd/php/netzonemail.php');
netzonemail($to,$subject,$message,[$header[,$param]]);

Schutz durch Captcha

Um das automatische Ausfüllen, und damit auch den Missbrauch, von Ihren Scripten zu verhindern, können Sie ein Captcha einsetzen. Dieses stellt sicher, dass nur ein Mensch und kein Robot das Formular absenden kann. Um das Captcha einzusetzen, muss auf der HTML Seite das Captcha mit folgendem HTML Code integriert werden:

<img name='captcha' id='captcha' src='/cgi-bin/captcha.php?action=pic'>
<br>
<div style="text-decoration: underline;" OnClick="javascript:var datum = new Date();
document.getElementById('captcha').src='/cgi-bin/captcha.php?action=pic&rnd=' +
Date.UTC(datum.getFullYear(), datum.getMonth(), datum.getDate(), datum.getHours(), 
datum.getMinutes(), datum.getSeconds() ) +
datum.getMilliseconds();">Neues Bild / Reload</div><br>

Bitte obenstehenden, f&uuml;nfstelligen Buchstabencode eingeben
<br><input type='text' name='captcha'>

Anschliessend können Sie in Ihren Scripten die Korrektheit der Usereingabe überprüfen. Ein Beispiel hierfür wäre:

if( strtoupper($_REQUEST['captcha']) != $_SESSION['bild']->captcha_value ){
    // Captcha inkorrekt, Verarbeitung abbrechen.
} else {
    // Captcha korrekt, weiterverarbeiten des Scriptes
}