Zitat:
Zitat von nikosch Naja, direkter Zugriff auf Dein mailscript eben. Die einfachste (i.S.v. nachvollziehbarste) Lösung wäre, wenn ich mir ein alternatives Form bastele, das als action Dein Mailscript angibt. Leichter geht das für Spammer natürlich über Scripte, die direkt POST oder GET Daten an eine Webressource absenden. |
Hi Nikosch
Danke für die Antwort
Aber wo ist da die Schwachstelle und wie ist sie vermeidbar:
1. Datei die in die Webseite für den Kontakt "included" ist:
(Datenbankaufbau erfolgt separat über PDO - prepared statement)
PHP-Code:
<?php
session_start();
require("ikenndifunctions.inc.php");
// Prüfen, ob sich die Seite selbst aufgerufen hat
if ( isset($_POST["do"]) && $_POST["do"] == "insert" )
{
// Die Seite hat sich selbst aufgerufen
//Variablenkontrolle:
if (!isset($_POST["Vorname"])|| !isset($_POST["Zuname"])
|| !isset($_POST["frmAdresse"])||!isset($_POST["frmPLZ"])||!isset($_POST["frmOrt"])
|| !isset($_POST["frmTelNr"])||!isset($_POST["email"])||!isset($_POST["Anliegen"]))
{
die;
}
// Pflichtfeldkontrolle
$error_msg = "";
if ( $_POST["Vorname"] == "" )
{
$error_msg = "Bitte geben Sie einen Vornamen an.<br>";
}
if ( $_POST["Zuname"] == "" )
{
$error_msg .= "Bitte geben Sie einen Zunamen an.<br>";
}
if ( $_POST["email"] == "" )
{
$error_msg .= "Bitte geben Sie eine email Adresse an.<br>";
}
if ( $_POST["Anliegen"] == "" )
{
$error_msg .= "Bitte geben Sie ein Anliegen ein .<br>";
}
// CAPTCHA
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
}
else{
$error_msg .= "Der Sicherheitscode ist falsch.<br>";
}
// End CAPTCHA
if ( $error_msg == "")
{
// Alles o.k.
$strVorname = $_POST["Vorname"];
$strZuname = $_POST["Zuname"];
$strAdresse = $_POST["frmAdresse"];
$strPLZ = $_POST["frmPLZ"];
$strOrt = $_POST["frmOrt"];
$strTelNr = $_POST["frmTelNr"];
$stremail = $_POST["email"];
$strAnliegen = $_POST["Anliegen"];
// Datenbank-Zugriff
$objDb = mysqlconnectpdo();
// INSERT
$dbInsertikenndi = $objDb->prepare("INSERT INTO ikenndi (Vorname, Zuname, frmAdresse, frmPLZ, frmOrt, frmTelNr, email, Anliegen)
VALUES (:Vorname, :Zuname, :frmAdresse, :frmPLZ, :frmOrt, :frmTelNr, :email, :Anliegen)");
$dbInsertikenndi->bindParam('Vorname', $strVorname);
$dbInsertikenndi->bindParam('Zuname', $strZuname);
$dbInsertikenndi->bindParam('frmAdresse', $strAdresse);
$dbInsertikenndi->bindParam('frmPLZ', $strPLZ);
$dbInsertikenndi->bindParam('frmOrt', $strOrt);
$dbInsertikenndi->bindParam('frmTelNr', $strTelNr);
$dbInsertikenndi->bindParam('email', $stremail);
$dbInsertikenndi->bindParam('Anliegen', $strAnliegen);
// In die Datenbank eintragen
$result = $dbInsertikenndi->execute();
if ( false===$result )
{
die("Konnte den Datensatz nicht eintragen: " . mysql_error() );
}
//Variablen in Session speichern
$_SESSION["Vorname"] = $_POST["Vorname"];
$_SESSION["Zuname"] = $_POST["Zuname"];
$_SESSION["frmAdresse"] = $_POST["frmAdresse"];
$_SESSION["frmPLZ"] = $_POST["frmPLZ"];
$_SESSION["frmOrt"] = $_POST["frmOrt"];
$_SESSION["frmTelNr"] = $_POST["frmTelNr"];
$_SESSION["email"] = $_POST["email"];
$_SESSION["Anliegen"] = $_POST["Anliegen"];
// Wechsel auf Vorschau
header("Location: tnx.php");
die;
}
}
?>
<span class="errormessage">
<?php
if ( $error_msg != "")
{
echo $error_msg;
}
?>
</span>
<span style="color:#FFCC00" align="center">
<h1>KONTAKT</h1>
<h2>Bitte nehmen Sie über folgendes Formular Kontakt zu mir auf.</h2>
<h3>Durch die serverseitige Verarbeitung des Formulars, wird der Versuch Dritter unterbunden auf sensible Daten zuzugreifen. </h3>
<br /><br />
</span>
<form action="<?php echo $_POST["PHP_SELF"]; ?>" method="POST" >
<input type="hidden" value="kontakt.html" name="referer">
<table style="color:#FFCC00; font-weight:bold;">
<tr>
<td style="font-weight:bold;">* = Eingabe erforderlich</td><td> </td>
</tr>
<tr>
<td>Vorname*:</td><td> <input type="text" name="Vorname" value="<?php echo htmlspecialchars($_POST['Vorname']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
</tr>
<tr>
<td>Zuname*:</td><td> <input type="text" name="Zuname" value="<?php echo htmlspecialchars($_POST['Zuname']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
</tr>
<tr>
<td>Adresse:</td><td> <input type="text" name="frmAdresse" value="<?php echo htmlspecialchars($_POST['frmAdresse']); ?>" size="80" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
</tr>
<tr>
<td>PLZ:</td><td> <input type="text" name="frmPLZ" value="<?php echo htmlspecialchars($_POST['frmPLZ']); ?>" size="20" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
</tr>
<tr>
<td>Ort:</td><td> <input type="text" name="frmOrt" value="<?php echo htmlspecialchars($_POST['frmOrt']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
</tr>
<tr>
<td>Telefonnummer:</td><td> <input type="text" name="frmTelNr" value="<?php echo htmlspecialchars($_POST['frmTelNr']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
</tr>
<tr>
<td>Email*:</td><td> <input type="text" name="email" value="<?php echo htmlspecialchars( $_POST['email']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
</tr>
<tr>
<td>Anliegen*:</td><td> <textarea rows="4" name="Anliegen" value="<?php echo htmlspecialchars($_POST['Anliegen']); ?>" cols="40"style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></textarea></td>
</tr>
<tr>
<td align="left" width="10%"><input type="hidden" name="do" value="insert"></td>
</tr>
</table>
Enter security code:<br />
<input type="text" name="sicherheitscode" size="5"><br />
<br />
Sollten Sie den Code nicht lesen können, drücken sie in ihrem Browser auf "reload" um ihre Eingaben zu behalten und einen anderen Code angezeigt zu bekommen.<br />
<p><input type="submit" value="Absenden" name="submit"><input type="reset" value="Reset" name="B2"></p>
<img src="../captcha/captcha.php" border="0" title="Sicherheitscode"><br />
<br />
</form> Und hier die Datei die innerhalb der Session via header location aufgerufen wird um eine Vorschau anzuzeigen und einem hidden - Formular um über den Submit - Button die Daten an den phpmailer-fe zu übergeben:
PHP-Code:
<?php
session_start ();
if (!isset($_SESSION["Vorname"])|| !isset($_SESSION["Zuname"])
|| !isset($_SESSION["frmAdresse"])||!isset($_SESSION["frmPLZ"])||!isset($_SESSION["frmOrt"])
|| !isset($_SESSION["frmTelNr"])||!isset($_SESSION["email"])||!isset($_SESSION["Anliegen"]))
{
die;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>Kontakt2</title>
<link rel="stylesheet" type="text/css" href="gbuch/styles/lalstyle/stylesheet.css"</link>
</head>
<body>
<div id="headersection">
<a href="http://www.lustaufleben.at"><img src="gbuch/img/toplogo.png" border="0" /></a>
</div>
?>
<table class="booktable">
<tr class="header">
<td colspan="3" width="100%">
<p class="maintitle">Vorschau ihrer Eingaben</p>
</td>
</tr>
<tr class="seperator">
<td width="20%"> </td>
<td width="50%"> </td>
<td width="30%"> </td>
</tr>
</table>
<p></p>
<table class="booktable">
<tr class="msgcolumn">
<td class="label_datfield" width="10%">Vorname</td>
<td class="contentfield01"colspan="2" width="90%">
<p class="titel"><?php echo $_SESSION["Vorname"]; ?></p>
</td>
</tr>
<tr class="seperator">
<td width="10%"> </td>
<td width="60%"> </td>
<td width="30%"> </td>
</tr>
<tr class="msgcolumn">
<td class="label_datfield" width="10%">Zuname</td>
<td class="contentfield01"colspan="2" width="90%">
<p class="titel"><?php echo $_SESSION["Zuname"]; ?></p>
</td>
</tr>
<tr class="seperator">
<td width="10%"> </td>
<td width="60%"> </td>
<td width="30%"> </td>
</tr>
<tr class="msgcolumn">
<td class="label_datfield" width="10%">Adresse</td>
<td class="contentfield01"colspan="2" width="90%">
<p class="titel"><?php echo $_SESSION["frmAdresse"]; ?></p>
</td>
</tr>
<tr class="seperator">
<td width="10%"> </td>
<td width="60%"> </td>
<td width="30%"> </td>
</tr>
<tr class="msgcolumn">
<td class="label_datfield" width="10%">PLZ</td>
<td class="contentfield01"colspan="2" width="90%">
<p class="titel"><?php echo $_SESSION["frmPLZ"]; ?></p>
</td>
</tr>
<tr class="seperator">
<td width="10%"> </td>
<td width="60%"> </td>
<td width="30%"> </td>
</tr>
<tr class="msgcolumn">
<td class="label_datfield" width="10%">Ort</td>
<td class="contentfield01"colspan="2" width="90%">
<p class="titel"><?php echo $_SESSION["frmOrt"]; ?></p>
</td>
</tr>
<tr class="seperator">
<td width="10%"> </td>
<td width="60%"> </td>
<td width="30%"> </td>
</tr>
<tr class="msgcolumn">
<td class="label_datfield" width="10%">Telefon</td>
<td class="contentfield01"colspan="2" width="90%">
<p class="titel"><?php echo $_SESSION["frmTelNr"]; ?></p>
</td>
</tr>
<tr class="seperator">
<td width="10%"> </td>
<td width="60%"> </td>
<td width="30%"> </td>
</tr>
<tr class="msgcolumn">
<td class="label_datfield" width="10%">email</td>
<td class="contentfield01"colspan="2" width="90%">
<p class="titel"><?php echo $_SESSION["email"]; ?></p>
</td>
</tr>
<tr class="seperator">
<td width="10%"> </td>
<td width="60%"> </td>
<td width="30%"> </td>
</tr>
<tr class="msgcolumn">
<td class="label_datfield" width="10%">Anliegen</td>
<td class="contentfield01"colspan="2" width="90%">
<p class="titel"><?php echo $_SESSION["Anliegen"]; ?></p>
</td>
</tr>
<tr class="seperator">
<td width="10%"> </td>
<td width="60%"> </td>
<td width="30%"> </td>
</tr>
<tr class="seperator">
<td width="10%"> </td>
<td width="60%"> </td>
<td width="30%"> </td>
</tr>
</table>
<form method="POST" action="phpmailer/phpmailer-fe.php">
<input type="hidden" value="kontakt2.html" name="referer">
<table style="width:100%">
<tr>
</tr>
<tr>
<input type="hidden" name="Vorname" value="<?php echo $_SESSION['Vorname']; ?>"</td>
</tr>
<tr>
<input type="hidden" name="Zuname" value="<?php echo $_SESSION['Zuname']; ?>" </td>
</tr>
<tr>
<td><input type="hidden" name="frmAdresse" value="<?php echo $_SESSION['frmAdresse']; ?>"</td>
</tr>
<tr>
<td><input type="hidden" name="frmPLZ" value="<?php echo $_SESSION['frmPLZ']; ?>"</td>
</tr>
<tr>
<td><input type="hidden" name="frmOrt" value="<?php echo $_SESSION['frmOrt']; ?>"</td>
</tr>
<tr>
<td><input type="hidden" name="frmTelNr" value="<?php echo $_SESSION['frmTelNr']; ?>"</td>
</tr>
<tr>
<td><input type="hidden" name="email" value="<?php echo $_SESSION['email']; ?>"</td>
</tr>
<tr>
<td><input type="hidden" name="Anliegen" value="<?php echo $_SESSION['Anliegen']; ?>"</td>
</tr>
<tr>
<td><input type="hidden" name="do" value="insert"></td>
</tr>
<tr>
<td><img src="phpmailer/worxturing.php"></td>
</tr>
<tr>
<td style="color:#FFCC00; font-weight:bold">Enter security code:</td>
</tr>
<tr>
<td><input name="WorxTuringTest" id="WorxTuringTest"></td>
</tr>
<tr>
<td style="color:#FFCC00">Sollten Sie den Code nicht lesen können, drücken sie in ihrem Browser auf "reload"<br /> um ihre Eingaben zu behalten und einen anderen Code angezeigt zu bekommen.<br />
Das kleine 0 - Zeichen ist die Zahl 0</td>
</tr>
<tr>
<td> <input type="submit" value="Submit" name="submit"> </td>
</tr>
</table>
</form>
</body>
</html>
Wo ich noch keine Lösung habe, aber das wäre ein extra - Thread ist die Behandlung des Falles, dass der User die Daten - Vorschau NICHT bestätigen wil ...
Liebe Grüße und Vielen Dank
phpels