Dj Mike
Mitglied
Hallo,
ich bin mir nich ganz sicher, ob ich mit diesem Post hier richtig bin. Ich habe ein Mailformular geschrieben, aber ich habe nun das Gefühl, dass es für Spam-Zwecke misbraucht wird. Ich hab es also schnell wieder aus dem Internet genommen.
Meine Frage: Kann mir jemand sagen, ob dieses Script eine Sicherheitslücke hat?
Script im Anhang!
Micha
[Edit by Dennis Wronka]Ich bin mal so frei und setz das Script der Einfachheit halber mit in den Beitrag.
ich bin mir nich ganz sicher, ob ich mit diesem Post hier richtig bin. Ich habe ein Mailformular geschrieben, aber ich habe nun das Gefühl, dass es für Spam-Zwecke misbraucht wird. Ich hab es also schnell wieder aus dem Internet genommen.
Meine Frage: Kann mir jemand sagen, ob dieses Script eine Sicherheitslücke hat?
Script im Anhang!
Micha
[Edit by Dennis Wronka]Ich bin mal so frei und setz das Script der Einfachheit halber mit in den Beitrag.
PHP:
<?php
// Settings
$webmaster = "user@server.tld"; // Email to which the submitted form is sent
$mailError = "Es ist ein Fehler aufgetreten. Falls der Fehler weiterhin auftritt, nehmen Sie bitte per <a href='kontakt.html'>Email</a> kontakt mit uns auf."; // General error message
$redirect = "success.html"; // Automatic redirect to a specific page (absolute or relative path) after the success message (leave empty to disable)
$submitOk = $_POST['submitOk']; // Variable that tells, if the form was submitted or not
if(isset($submitOk)){ // If the form was submitted
// Get variables from post
// All slashes and code are being striped
$name = isset($_POST['name']) ? stripslashes(strip_tags($_POST['name'])) : "";
$firstName = isset($_POST['firstName']) ? stripslashes(strip_tags($_POST['firstName'])) : "";
$street = isset($_POST['street']) ? stripslashes(strip_tags($_POST['street'])) : "";
$nr = isset($_POST['nr']) ? stripslashes(strip_tags($_POST['nr'])) : "";
$zip = isset($_POST['zip']) ? stripslashes(strip_tags($_POST['zip'])) : "";
$city = isset($_POST['city']) ? stripslashes(strip_tags($_POST['city'])) : "";
$phone = isset($_POST['phone']) ? stripslashes(strip_tags($_POST['phone'])) : "";
$fax = isset($_POST['fax']) ? stripslashes(strip_tags($_POST['fax'])) : "";
$mobile = isset($_POST['mobile']) ? stripslashes(strip_tags($_POST['mobile'])) : "";
$mail = isset($_POST['mail']) ? stripslashes(strip_tags($_POST['mail'])) : "";
$os = isset($_POST['os']) ? stripslashes(strip_tags($_POST['os'])) : "";
$age = isset($_POST['age']) ? stripslashes(strip_tags($_POST['age'])) : "";
$floppy = isset($_POST['floppy']) ? "Ja" : "Nein";
$cd = isset($_POST['cd']) ? "Ja" : "Nein";
$dvd = isset($_POST['dvd']) ? "Ja" : "Nein";
$usb = isset($_POST['usb']) ? stripslashes(strip_tags($_POST['usb'])) : "Kein USB";
$internet = isset($_POST['internet']) ? stripslashes(strip_tags($_POST['internet'])) : "Kein Internet";
$description = stripslashes(strip_tags($_POST['description']));
// Check variables for plausibility
$error = array(); // Array, holding the errors
$i = 0;
// The check funktions
function checkName($variable){
if(preg_match("/^[a-zäöüÄÖÜß.`´'\-[:space:]]{3,}$/i",$variable))
return true;
else
return false;
}
function checkNumber($variable){
if(preg_match("/^[0-9a-z[:space:]]{1,}$/i",$variable))
return true;
else
return false;
}
function checkZip($variable){
if(preg_match("/^[0-9]{5}$/",$variable))
return true;
else
return false;
}
function checkPhone($variable){
if(preg_match("/^[0-9[:space:]\/\-]{3,}$/",$variable))
return true;
else
return false;
}
function checkMail($variable){
//Leading and following whitespaces are ignored
$variable = trim($variable);
//Email-address is set to lower case
$variable = strtolower($variable);
//List of signs which are illegal in name, subdomain and domain
$illegalString = '\\\\(\\n)@';
//Parts of the regular expression = name@subdomain.domain.toplevel
$name = '([^\\.'.$illegalString.'][^'.$illegalString.']?)+';
$subdomain = '([^\\._'.$illegalString.']+\\.)?';
$domain = '[^\\.\\-_'.$illegalString.'][^\\._'.$illegalString.']*[^\\.\\-_'.$illegalString.']';
$toplevel = '([a-z.]{2,})';
if(preg_match('/^'.$name.'[@]'.$subdomain.$domain.'\.'.$toplevel.'$/',$variable))
return true;
else
return false;
}
function checkOs($variable){
if(preg_match("/^((Windows (95|98|98 SE|ME|NT|2000|XP Home|XP Professional|Server 2003))|Linux|Mac OS|Anderes)$/",$variable))
return true;
else
return false;
}
function checkAge($variable){
if(preg_match("/^(neu|1 Jahr|[2-9] Jahre|10 Jahre|Älter als 10 Jahre)$/",$variable))
return true;
else
return false;
}
function checkDrive($variable){
if(preg_match("/^(Ja|Nein)$/",$variable))
return true;
else
return false;
}
function checkUsb($variable){
if(preg_match("/^(1.1|2.0|Kein USB)$/",$variable))
return true;
else
return false;
}
function checkInternet($variable){
if(preg_match("/^(Modem|ISDN|DSL|Kein Internet)$/",$variable))
return true;
else
return false;
}
function checkDescription($variable){
if(preg_match("/^[a-z0-9äÄöÖüÜß[:space:].,`´_:;!?'\"\&\+\/\(\)\-]{10,}$/i",$variable))
return true;
else
return false;
}
// Calling the check funktions
if(!checkName($name)){
$error[$i] = "name";
$i++;
}
if(!checkName($firstName)){
$error[$i] = "firstName";
$i++;
}
if(!checkName($street) && $street!=""){
$error[$i] = "street";
$i++;
}
if(!checkNumber($nr) && $nr!=""){
$error[$i] = "nr";
$i++;
}
if(!checkZip($zip) && $zip!=""){
$error[$i] = "zip";
$i++;
}
if(!checkName($city) && $city!=""){
$error[$i] = "city";
$i++;
}
if(!checkPhone($phone)){
$error[$i] = "phone";
$i++;
}
if(!checkPhone($fax) && $fax!=""){
$error[$i] = "fax";
$i++;
}
if(!checkPhone($mobile) && $mobile!=""){
$error[$i] = "mobile";
$i++;
}
if(!checkMail($mail) && $mail!=""){
$error[$i] = "mail";
$i++;
}
if(!checkOs($os)){
$error[$i] = "os";
$i++;
}
if(!checkAge($age)){
$error[$i] = "age";
$i++;
}
if(!checkDrive($floppy)){
$error[$i] = "floppy";
$i++;
}
if(!checkDrive($cd)){
$error[$i] = "cd";
$i++;
}
if(!checkDrive($dvd)){
$error[$i] = "dvd";
$i++;
}
if(!checkUsb($usb)){
$error[$i] = "usb";
$i++;
}
if(!checkInternet($internet)){
$error[$i] = "internet";
$i++;
}
if(!checkDescription($description)){
$error[$i] = "description";
$i++;
}
// If there where errors, reload the form
if(count($error)){
unset($submitOk);
$isError = true;
}
else{ // Else, send the email
// Create the email:
$subj = "Anfrage von pccare-aachen.de"; // Subject of the message
$sender = "$firstName $name <$mail>";
$body = "
Name: $firstName $name
Email: $mail
Telefon: $phone
Mobil: $mobile
Fax: $fax
Adresse: $street $nr
$zip $city
Betriebssystem: $os
Alter des PC's: $age
Diskette: $floppy
CD: $cd
DVD: $dvd
USB: $usb
Internet: $internet
Problembeschreibung:
$description"; // Body of the message
// Send email
error_reporting(0); // Disable error reporting (Errors are recorded in a textfile (maillog.txt)
if(!mail("$webmaster","$subj","$body","FROM: $sender\n")){
//mailError
$logfile = "maillog.txt";
$logfileHandle = fopen($logfile, 'a') or die("$mailError<br/><a href='javascript:history.back();'>Zurück</a>");
$date = getdate();
$date = $date['mday'].".".$date['mon'].".".$date['year']." - ".$date['hours'].":".$date['minutes'].":".$date['seconds'];
$errormsg = "Fehler beim Emailversenden:\n$date\n\n$body\n\n\n";
fwrite($logfileHandle,$errormsg);
fclose($logfileHandle);
die("$mailError<br/><a href='javascript:history.back();'>Zurück</a>");
}
// Success
if($redirect != ""){
header("Location: $redirect");
}
}
}
if(!isset($submitOk)){ // If the form was not submitted (or there where errors) display the submit form
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>PCCare Computer Hilfe - Anfrage</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<meta http-equiv="content-language" content="de">
<meta http-equiv="msthemecompatible" content="no">
<meta name="keywords" content="PCCare, PC-Care, PCare, PCCare.GbR, PC-Care.GbR, PCare.GbR, Jona Wernerus, Micha Rappaport, Programme, Einführung, Aachen, AC, Webseiten, Webseite, Homepage, Homepages, Gestaltung, Instandsetzung, Problembehebung, Internetauftritt, gestalten, instand setzen, Probleme beheben, designen, PC-Reparatur, Dienstleistung, Dienstleistungen, Internet, Computer, PC, Hilfe, Reperatur, Reparieren, Webdesign, Design, Hardware, Software, Netz, Netzwerk, Support, Unterstützung, Virus, Viren, HTML, Sicherheit, Computer Aachen, PC Aachen">
<meta name="description" content="Wenn Sie Hilfe bei der Anschaffung, der Installation oder der Nutzung ihres PC benötigen, dann wenden sie sich einfach an aus. Wir helfen Ihnen auch gerne bei allen anderen Fragen, Problemen oder Aufgaben rund um den PC, z.B. erstellen wir ihnen auch gerne eine eigene Internetseite!">
<meta name="distribution" content="global">
<meta name="author" content="PCCare">
<meta name="revisit-after" content="30 days">
<meta name="robots" content="index,follow">
</head>
<body>
<div id="content">
<h3>Anfrage - Bitte füllen Sie das Kontaktformular möglichst vollständig aus</h3>
<p>Unter <a href="kontakt.html">Kontakt</a> können Sie auch persönlich mit uns Kontakt aufnehmen.</p>
<form id="anfrage" method="post" action="<?=$_SERVER['PHP_SELF']?>">
<input type="hidden" name="submitOk" value="true">
<div>
<div>
<h4>Persönliche Informationen, Kontaktdaten:</h4>
<div>
<span class="column01">Name*</span>
<span class="column02"><input type="text" name="name" tabindex="1" id="name"<?php if($isError) echo " value=\"$name\""; ?>><img class="info" id="nameInfo" src="images/info.gif" alt="!" onMouseover="showhint('Nur folgende Zeichen sind erlaubt:<br/>- Alle Buchstaben: a-z<br/>- Sonderzeichen: äöüß.\'´`<br/>- Leerschritte<br/>Mindestlänge: Drei Zeichen', this, event, '200px')"/></span>
<span class="column03">Straße, Nr</span>
<span class="column04"><input type="text" name="street" tabindex="3" id="street"<?php if($isError) echo " value=\"$street\""; ?>><img class="info" id="streetInfo" src="images/info.gif" alt="!" onMouseover="showhint('Nur folgende Zeichen sind erlaubt:<br/>- Alle Buchstaben: a-z<br/>- Sonderzeichen: äöüß.\'<br/>- Leerschritte<br/>Mindestlänge: Drei Zeichen', this, event, '200px')"/></span>
<span class="column05"><input type="text" name="nr" class="smallInput" tabindex="4" id="nr"<?php if($isError) echo " value=\"$nr\""; ?>><img class="info" id="nrInfo" src="images/info.gif" alt="!" onMouseover="showhint('Nur folgende Zeichen sind erlaubt:<br/>- Alle Zahlen: 0-9<br/>- Alle Buchstaben: a-7<br/>- Leerschritte', this, event, '200px')"/></span>
</div>
<div>
<span class="column01">Vorname*</span>
<span class="column02"><input type="text" name="firstName" tabindex="2" id="firstName"<?php if($isError) echo " value=\"$firstName\""; ?>><img class="info" id="firstNameInfo" src="images/info.gif" alt="!" onMouseover="showhint('Nur folgende Zeichen sind erlaubt:<br/>- Alle Buchstaben: a-z<br/>- Sonderzeichen: äöüß.\'<br/>- Leerschritte<br/>Mindestlänge: Drei Zeichen', this, event, '200px')"/></span>
<span class="column03">Ort, Plz</span>
<span class="column04"><input type="text" name="city" tabindex="5" id="city"<?php if($isError) echo " value=\"$city\""; ?>><img class="info" id="cityInfo" src="images/info.gif" alt="!" onMouseover="showhint('Nur folgende Zeichen sind erlaubt:<br/>- Alle Buchstaben: a-z<br/>- Sonderzeichen: äöüß.\'<br/>- Leerschritte<br/>Mindestlänge: Drei Zeichen', this, event, '200px')"/></span>
<span class="column05"><input type="text" name="zip" class="smallInput" tabindex="6" id="zip"<?php if($isError) echo " value=\"$zip\""; ?>><img class="info" id="zipInfo" src="images/info.gif" alt="!" onMouseover="showhint('Nur folgende Zeichen sind erlaubt:<br/>- Alle Zahlen: 0-9<br/>- Länge muss fünf Zeichen sein', this, event, '200px')"/></span>
</div>
<div>
<span class="column01">Tel*</span>
<span class="column02"><input type="text" name="phone" tabindex="7" id="phone"<?php if($isError) echo " value=\"$phone\""; ?>><img class="info" id="phoneInfo" src="images/info.gif" alt="!" onMouseover="showhint('Nur folgende Zeichen sind erlaubt:<br/>- Alle Zahlen: 0-9<br/>- Sonderzeichen: /-<br/>- Leerschritte', this, event, '200px')"/></span>
<span class="column03">Handy</span>
<span class="column04"><input type="text" name="mobile" tabindex="8" id="mobile"<?php if($isError) echo " value=\"$mobile\""; ?>><img class="info" id="mobileInfo" src="images/info.gif" alt="!" onMouseover="showhint('Nur folgende Zeichen sind erlaubt:<br/>- Alle Zahlen: 0-9<br/>- Sonderzeichen: /-<br/>- Leerschritte', this, event, '200px')"/></span>
</div>
<div>
<span class="column01">Fax</span>
<span class="column02"><input type="text" name="fax" tabindex="9" id="fax"<?php if($isError) echo " value=\"$fax\""; ?>><img class="info" id="faxInfo" src="images/info.gif" alt="!" onMouseover="showhint('Nur folgende Zeichen sind erlaubt:<br/>- Alle Zahlen: 0-9<br/>- Sonderzeichen: /-<br/>- Leerschritte', this, event, '200px')"/></span>
<span class="column03">Email</span>
<span class="column04"><input type="text" name="mail" tabindex="10" id="mail"<?php if($isError) echo " value=\"$mail\""; ?>><img class="info" id="mailInfo" src="images/info.gif" alt="!" onMouseover="showhint('Bitte eine gültige Emailadresse angeben', this, event, '200px')"/></span>
</div>
</div>
<div>
<h4 class="space">Informationen zu Ihrem Computer:</h4>
<div>
<span class="column01">
<select size="1" name="os" tabindex="11" id="os">
<option <?php if(!$isError || $os == "Betriebssystem*") echo "selected"; ?>>Betriebssystem*</option>
<option <?php if($os == "Windows 95") echo "selected"; ?>>Windows 95</option>
<option <?php if($os == "Windows 98") echo "selected"; ?>>Windows 98</option>
<option <?php if($os == "Windows 98 SE") echo "selected"; ?>>Windows 98 SE</option>
<option <?php if($os == "Windows ME") echo "selected"; ?>>Windows ME</option>
<option <?php if($os == "Windows NT") echo "selected"; ?>>Windows NT</option>
<option <?php if($os == "Windows 2000") echo "selected"; ?>>Windows 2000</option>
<option <?php if($os == "Windows XP Home") echo "selected"; ?>>Windows XP Home</option>
<option <?php if($os == "Windows XP Professional") echo "selected"; ?>>Windows XP Professional</option>
<option <?php if($os == "Windows Server 2003") echo "selected"; ?>>Windows Server 2003</option>
<option <?php if($os == "Linux") echo "selected"; ?>>Linux</option>
<option <?php if($os == "Mac OS") echo "selected"; ?>>Mac OS</option>
<option <?php if($os == "Anderes") echo "selected"; ?>>Anderes</option>
</select>
<img class="info" id="osInfo" src="images/info.gif" alt="!" onMouseover="showhint('Bitte einen Eintrag aus der Liste wählen', this, event, '100px')"/>
</span>
<span class="column04">
<select size="1" name="age" tabindex="12" id="age">
<option <?php if(!$isError || $age == "Alter des PC´s*") echo "selected"; ?>>Alter des PC´s*</option>
<option <?php if($age == "neu") echo "selected"; ?>>neu</option>
<option <?php if($age == "1 Jahr") echo "selected"; ?>>1 Jahr</option>
<option <?php if($age == "2 Jahre") echo "selected"; ?>>2 Jahre</option>
<option <?php if($age == "3 Jahre") echo "selected"; ?>>3 Jahre</option>
<option <?php if($age == "4 Jahre") echo "selected"; ?>>4 Jahre</option>
<option <?php if($age == "5 Jahre") echo "selected"; ?>>5 Jahre</option>
<option <?php if($age == "6 Jahre") echo "selected"; ?>>6 Jahre</option>
<option <?php if($age == "7 Jahre") echo "selected"; ?>>7 Jahre</option>
<option <?php if($age == "8 Jahre") echo "selected"; ?>>8 Jahre</option>
<option <?php if($age == "9 Jahre") echo "selected"; ?>>9 Jahre</option>
<option <?php if($age == "10 Jahre") echo "selected"; ?>>10 Jahre</option>
<option <?php if($age == "Älter als 10 Jahre") echo "selected"; ?>>Älter als 10 Jahre</option>
</select>
<img class="info" id="ageInfo" src="images/info.gif" alt="!" onMouseover="showhint('Bitte einen Eintrag aus der Liste wählen', this, event, '200px')"/>
</span>
</div>
<div class="space">
<span class="column01">Laufwerke*</span>
<span class="column03">Internet</span>
</div>
<div>
<span class="column01">
<input class="noBorder" type="checkbox" name="floppy" value="true" tabindex="13" <?php if($floppy == "Ja") echo "checked"; ?>>Diskette
<input class="noBorder" type="checkbox" name="cd" value="true" tabindex="14" <?php if($cd == "Ja") echo "checked"; ?>>CD
<input class="noBorder" type="checkbox" name="dvd" value="true" tabindex="15" <?php if($dvd == "Ja") echo "checked"; ?>>DVD
</span>
<span class="column03">
<input class="noBorder" type="radio" name="internet" value="Modem" tabindex="16" <?php if($internet == "Modem") echo "checked"; ?>>Modem
<input class="noBorder" type="radio" name="internet" value="ISDN" tabindex="17" <?php if($internet == "ISDN") echo "checked"; ?>>ISDN
<input class="noBorder" type="radio" name="internet" value="DSL" tabindex="18" <?php if($internet == "DSL") echo "checked"; ?>>DSL
</span>
</div>
<div class="space">USB</div>
<div>
<input class="noBorder" type="radio" name="usb" value="1.1" tabindex="19" <?php if($usb == "1.1") echo "checked"; ?>>1.1
<input class="noBorder" type="radio" name="usb" value="2.0" tabindex="20" <?php if($usb == "2.0") echo "checked"; ?>>2.0
</div>
<div class="space">Problem- / Auftragsbeschreibung* <img class="info" id="descriptionInfo" src="images/info.gif" alt="!" onMouseover="showhint('Nur folgende Zeichen sind erlaubt:<br/>- Alle Buchstaben: a-z<br/>- Alle Zahlen: 0-9<br/>- Sonderzeichen: äöüß.,:;!?\'´`/()+-_<br/>- Leerschritte<br/>- Anführungszeichen<br/>Mindestlänge: 10 Zeichen', this, event, '250px')"/></div>
<div><textarea name="description" rows="10" cols="50" tabindex="21" id="description"><?php if($isError) echo stripslashes($description); ?></textarea></div>
</div>
<p class="small">Die Felder mit * müssen ausgefüllt sein!<br />
Ihre persönlichen Daten werden vertraulich behandelt und nicht
an Dritte weitergegeben!</p>
<div><input type="submit" value="Absenden" tabindex="22"><input type="button" value="Zurücksetzen" tabindex="23" onClick="location='<?=$_SERVER['PHP_SELF']?>'"></div>
</form>
</div>
<?php
if($isError){
print "<script type='text/javascript'>";
for($i=0; $i<count($error); $i++){
print "document.getElementById('".$error[$i]."').style.border = '1px solid red';";
print "document.getElementById('".$error[$i]."Info').style.visibility = 'visible';";
}
print "</script>";
}
?>
</body>
</html>
<?php
}
?>