Shop-Hilfe.com
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 17.03.2005, 15:22   #1
TP-Supporter
 
Benutzerbild von mimamo
 
Registriert seit: Oct 2002
Ort: Berlin
mimamo macht alles soweit korrekt

sicherheit in formular scripts?


hallo zusammen,

habe eben von einem bekannten den hinweis bekommen, dass mein formular script nicht sicher ist.
hier erst mal der hinweis von 1&1:
-----------------------------------------------------------
> Von: 1&1 WebHosting [mailto:kundeninfo@hosting.1und1.de]
> Gesendet: Mittwoch, 16. März 2005 15:15
> An: ...
> Betreff: Missbrauchbare Sicherheitslücke in Ihrem Mailskript
>
>
> Ihre Kundennummer: ...
>
>
> Hallo Herr ...,
>
> derzeit suchen große Spam-Versender nach neuen Möglichkeiten,
> unerkannt Spam zu verschicken. Eine besonders häufig verwendete
> Methode ist der Missbrauch von Skripten zur Versendung von
> Formular-Daten, bei denen der E-Mail-Empfänger über eine
> Formular-Variable frei angegeben werden kann.
>
> Ein häufiger Vertreter ist ein veraltetes oder falsch konfiguriertes
> Release des Perl-Skripts FormMail.pl von Matt Wright.
> Generell wird aber auch nach ungesicherten formmail.php-,
> formmail.cgi-
> oder ähnlichen Skripten gesucht - unabhängig von deren Benennung -,
> welche Daten an variable Empfänger versenden können. Dies
> umfasst unter
> anderem Bestellbestätigungsskripte, Überwachungsskripte, etc.
> Mit Hilfe dieser Skripte werden dann in der Regel ohne das Wissen des
> Site-Betreuers tausende Spam-Mails verschickt, die nicht
> selten zu einer
> Sperrung durch den jeweiligen Provider führen.
>
>
> Sie nutzen auf Ihrer Internet-Präsenz folgendes Skript:
>
> /homepages/.../mail.php
>
>
> Um Sie vor evtl. Schäden zu bewahren, haben wir präventiv
> nach bekannten
> Zufallsmustern, die auch Spammer benutzen, unseren
> Webspacebereich geprüft
> und sind dabei auf Ihr Skript gestoßen. Daher haben wir zu
> Testzwecken
> eine E-Mail über Ihr Skript an eine interne Testadresse bei
> uns im Haus
> verschickt, was Sie in Ihrem Logfile unter /logs/mail.log
> nachvollziehen
> können. Wir weisen Sie darauf hin, dass diese Vorgehensweise auch von
> beliebigen Dritten durchgeführt werden kann. Die von Ihnen
> installierte
> Version ist für Spammer leicht zu finden, definitiv missbrauchbar und
> möglicherweise bereits missbraucht worden.
>
> Da sich die 1&1 Internet AG entschieden gegen sämtliches
> Versenden von
> E-Mail-Spam stellt und diese alte Skriptversion Ihre Domain zum
> Spamversand missbrauchen kann, empfehlen wir Ihnen dringend, die
> veraltete Version gegen eine sichere auszutauschen.
>
> - Eine Alternative für Formmail-Skripte ist eine auf
> Sicherheit optimierte
> Neufassung z. B. von http://nms-cgi.sf.net/
> (Achtung: "-T" aus der ersten Zeile entfernen!)
>
> - oder eine neuere Version von
> http://www.scriptarchive.com/formmail.html
>
> Für Skripte aus anderen Projekten wenden Sie sich bitte an
> den Autor oder
> an den jeweiligen Support.
>
> Beachten Sie bitte die Konfigurationshinweise zu den Skripten und
> achten Sie besonders darauf, dass Empfänger-Adressen nicht frei über
> das Formular angegeben werden können.
>
>
> Vielen Dank für Ihre Mithilfe.
>
>
> Mit freundlichen Grüßen
>
> Ihr WebHosting-Team
> 1&1 Internet AG
-----------------------------------------------------------

ist da an dem hinweis etwas dran? sind php-formular-scripts evtl. nicht sicher?

hier mal mein script:
PHP-Code:
<?
$datum
=strftime("%d.%m.%Y");
$zeit=date("H:i");
$https=$HTTP_POST_VARS;
$rec2    $_POST["email2"];
$copy    $_POST["copy"];
$copyto  $_POST["SenderMail"];

$text="Sie haben am $datum um $zeit eine Bestellung erhalten!\n
___________________________________________________
\n"
;

$text2="Vielen Dank fuer Ihre Bestellung.\n
Sie haben mir folgende Angaben übermittelt:\n
___________________________________________________
\n"
;

$auswahl = array("copy""url""email""betreff""Submit");
   foreach (
$https as $key => $value) {
       if(!
in_array($key,$auswahl)){
           
$text $text."".$key.": ".stripslashes($value)."\n\n";
           
$text2$text2."".$key.": ".stripslashes($value)."\n\n";
       }
   }

if(empty(
$_POST['betreff'])) {
    
"Bestellung";
    }

    
$_POST['absmail']=$_POST['email'];


    if(empty(
$_POST['url'])) {
        
$_POST['url']="http://www.kefir-kombucha.de";
    }


$header="From: ".$_POST['absmail']."\n";
$senden=mail($_POST['email'],$_POST['betreff'],$text,$header) or die ("Fehler beim Übermitteln");

if (
$rec2 != ""mail($rec2,$_POST['betreff'],$text,$header) or die ("Fehler beim Übermitteln");
if (
$copy != ""mail($copyto,$_POST['betreff'],$text2,$header) or die ("Fehler beim Übermitteln");


$sqlhost="...";
$sqluser="...";
$sqlpass="...";
$sqldb="...";
$sqltable="kefir-kombucha";
$connection=mysql_connect("$sqlhost","$sqluser","$sqlpass");
if (!
$connection) {
      echo 
"Keine Verbindung moeglich!/n";
      exit;
}
mysql_select_db($sqldb)
or die( 
mysql_error() );
$sql "INSERT INTO `kefir-kombucha` ( `datum` , `zeit` , `kombucha` , `wasserkefir` , `labessenz` , `vname` , `nname` , `strasse`, `plz`, `ort`, `sendermail` , `telefon` , `fax` , `homepage` , `addtext` )
VALUES (
'$datum',
'$zeit',
'$_POST[kombucha]',
'$_POST[wasserkefir]',
'$_POST[labessenz]',
'$_POST[vname]',
'$_POST[nname]',
'$_POST[strasse]',
'$_POST[plz]',
'$_POST[ort]',
'$_POST[sendermail]',
'$_POST[telefon]',
'$_POST[fax]',
'$_POST[homepage]',
'$_POST[addtext]')"
;

$result mysql_db_query('usr_web35_1',$sql) or die(mysql_error());
mysql_close($connection);



if(
$senden) {
        
Header("Location: ".$_POST['url']);
} else {
    echo 
"Fehler beim Senden! Bitte <a href=\"mailto:
frank.deubert@kefir-kombucha.de
\">
frank.deubert@kefir-kombucha.de
</a> kontaktieren!<br><a href=\"javascript:history.back()\">Zurück zum Formular</a>"
;
}

?>
das script, dass mein bekannter verwendet ist das gleiche wie oben nur ohne datenbankanbindung.
habt ihr vielleicht einen tipp wie ich das script "sicher" machen koennte - sofern es hier irgendwelche sicherheitsluecken gibt?

im voraus vielen dank und auf die diskussion zum thema sicherheit bin ich gespannt.

MIMAMO

Geändert von mimamo (18.03.2005 um 09:24 Uhr).
mimamo ist offline   Mit Zitat antworten


Alt 17.03.2005, 16:18   #2
Guest
 
Registriert seit: Aug 2002
Strogij hilft, wo's gehtStrogij hilft, wo's geht
Die Sicherheitslücke ist einfach die, dass $_POST['email'] und weitere POST-Elemente verändert werden können und man danach auf deinem Server Spam vertreiben könnte.
Strogij ist offline   Mit Zitat antworten
Alt 17.03.2005, 16:35   #3
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Oyten
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht
Da stellt sich mir die Frage wie man das Script sicher machen kann.

Im Prinzip ist dann doch jedes Script betroffen, welches die Empfängeradresse aus der POST- oder GET-Umgebung ausliest (und das sind ne Menge *g*).
Wie kann man die Lücke schließen?
__________________
Gruß, DSB
Einfaches Backup/ Restore Deiner MySQl-Datenbank
DSB ist offline   Mit Zitat antworten
Alt 17.03.2005, 16:36   #4
TP-Supporter
 
Benutzerbild von mimamo
 
Registriert seit: Oct 2002
Ort: Berlin
mimamo macht alles soweit korrekt
und wie koennte man das umgehen, bzw. diese sicherheitsluecke stopfen???
mimamo ist offline   Mit Zitat antworten
Alt 17.03.2005, 17:05   #5
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
Indem man checkt, woher die Anfrage aufgerufen wurde - wenn die Anfrage von woanders als z.B. der Domain von Deinem Webpack kam, kannst Du schwer davon ausgehen, dass es jemand missbrauchen wollte - und dementsprechend den Mailversand verhindern.
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist gerade online   Mit Zitat antworten
Alt 17.03.2005, 17:12   #6
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Oyten
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht
Zitat:
Zitat von Boris
Indem man checkt, woher die Anfrage aufgerufen wurde
Wie?
Welche Variable eignet sich dafür?
Der HTTP-Referer muss ja nicht zwangsläufig übergeben werden.
__________________
Gruß, DSB
Einfaches Backup/ Restore Deiner MySQl-Datenbank
DSB ist offline   Mit Zitat antworten
Alt 17.03.2005, 17:30   #7
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
Tja, das ist ein anderes Problem
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist gerade online   Mit Zitat antworten
Alt 17.03.2005, 17:52   #8
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Zitat:
Der HTTP-Referer muss ja nicht zwangsläufig übergeben werden
Bei der eigenen Seite weiss man doch den Referer, und wenn keiner da ist, wars ja auch von einer anderen Seite, also ist das der einfachste Weg.

Auch eine Möglichkeit wäre (wenn auch nicht sicher), die mailadresse in 3 Felder zu verteilen und bei den $_POST mit ganz anderen Namen zu belegen. Natürlich bekommt man das raus, wenn man die Seite untersucht.
i.d.R. sind aber Spambots Scripte, die Seiten nach bekannten Mustern abgrasen, und das wäre dann erst mal ein unbekanntes.

P.S. die vorgeschlagenen Alternativen arbeiten mit dem referer
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 17.03.2005, 17:53   #9
TP-Veteran
 
Benutzerbild von the-architect
 
Registriert seit: Jun 2004
Ort: Stuttgart
the-architect bringt sich richtig einthe-architect bringt sich richtig ein
man kann die session oder ein cookie überprüfen bevor was gesendet wird
__________________
mein blog | imedo.de | clubrating.de | deviantart


the-architect ist offline   Mit Zitat antworten
Alt 17.03.2005, 20:09   #10
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Oyten
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht
Zitat:
Zitat von St@eff.en
Bei der eigenen Seite weiss man doch den Referer, und wenn keiner da ist, wars ja auch von einer anderen Seite, also ist das der einfachste Weg.
Nein, da muss ich wiedersprechen.
Der Referer steht im HTML-Header, den der Browser sendet.
Das abgeschickte Formular wird vom Browser versendet, nicht von der eigenen Seite.
Jedoch kann man den Referer ausschalten (bzw. jede Firewall kann das ausschalten) und so weißt Du eben nicht woher die Anfrage kommt, wenn kein Referer gesetzt ist.
__________________
Gruß, DSB
Einfaches Backup/ Restore Deiner MySQl-Datenbank
DSB ist offline   Mit Zitat antworten
Alt 17.03.2005, 20:26   #11
TP-Moderator
 
Benutzerbild von Adromir
 
Registriert seit: Jun 2004
Ort: Hannover
Adromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKE
Ich glaube, daß einfachste wäre doch, die Empfängeradresse im Script fest zu coden und nicht per $_POST zu übergeben.. Wenn ich die Mail von 1&1 richtig verstanden habe..

Deswegen reicht doch ein

$senden=mail("deineemail@deinedomain.de",$_POST['betreff'],$text,$header)
eigentlich schon aus..
Dann noch das entsprechende Feld/Hiddenfield aus dem Formmailer raus und die Spammer sehen gleich, daß die Empfängeradresse irgendwo im Sendescript hardgecodet ist.
Damit wird das Script für sie uninteressant dein Mailformular als "Spamversender" zu mißbrauchen um damit Spam zu verschicken, da die Mails ja nur bei der dir vorgegebenen Emailadresse landen würden..
Adromir ist offline   Mit Zitat antworten
Alt 17.03.2005, 20:56   #12
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
@adormir: fix coden heisst, dass die Mail-Addy nicht mehr wählbar ist,
was für Tell-a-friend und ähnliche Scripts nicht sinnvoll ist
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]


use my HTML-Tester

Motto'06: Mut zur deutschen Sprache!
321 ist offline   Mit Zitat antworten
Alt 17.03.2005, 22:21   #13
TP-Moderator
 
Benutzerbild von Adromir
 
Registriert seit: Jun 2004
Ort: Hannover
Adromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKE
Klar.. Aber für einen reines Kontaktformular anstelle eines Mail-Links reicht es aus..
Adromir ist offline   Mit Zitat antworten
Alt 17.03.2005, 23:43   #14
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
und was ist mit der email des Ausfüllers ? Der will doch ne Antwort, sonst macht "Kontakt" gar keinen Sinn.

Will man Kontakt, lässt sich Unsicherheit nicht vermeiden.

Man könnte allerdings nach Ausfühtung eine Sperre von 3 min einbauen, das schreckt jeden Spammer ab !
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 18.03.2005, 05:48   #15
TP-Moderator
 
Benutzerbild von Adromir
 
Registriert seit: Jun 2004
Ort: Hannover
Adromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKEAdromir ist ein richtiges Arbeitstier - DANKE
Die Email des Ausfüllers ist für den Spammer ja auch uninteressant. Er will das Kontaktformular als Spamversender mißbrauchen. Ihm ist erstrangig wichtig, daß er manipulieren kann, wohin die Mails gesendet werden und nicht, woher diese Mails dann stammen. An einer Rückantwort auf seine Spams ist er gar nicht interessiert..

Ich würde im Eingabescript eine Session starten und aden Wert von $PHP_SELF als md5-Hash in die Session speichern. Dann kann man im Versendescript diesen Wert abfragen und erst versenden, wenn dieser Wert stimmt.

Dann ist das Script in der Hinsicht sicher, daß die Eingabe nicht über ein Fremdes Script von einem fremden Server kommt...
Adromir ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
sicherheit in formular scripts? sicherheit in formular scripts?
« Kalender Uhrzeit Datum | form action value eine Variable zuweisen?? »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu