Hallo allemaal,

Ik heb een website gemaakt voor de winkel van mijn vrouw, en op de html-pagina met haar contactgegevens heb ik een php-contactformulier gezet dat ik ergens op het internet vond.

Nu stel ik vast dat je dit kan verzenden ook als je niks hebt ingevuld. Kan iemand mij helpen om dit te beveiligen. Ik heb zelf weinig kaas gegeten van php, vandaar mijn postje op dit forum.

Het php bestandje mail.php ziet er zo uit :

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$formcontent="From: $name \n Message: $message";
$formcontent="From: $name \n Telefoon; $phone \n Message: $message"; 

//verander hieronder je emailadres
$recipient = "[email protected]";


//verander hieronder evt de teksten en de html
$subject = "Aanvraag via de website van ArteShop";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "
<h3>Bedankt! Uw bericht werd goed verzonden. We nemen zo snel mogelijk contact met u op.<br />
<a href='index.html'>Terug naar de website van ArteShop</a></h3>
";
?>



En het html-bestand contact.html ziet er zo uit :

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8" name="keywords" content="ArteShop, lederwaren, juwelen, jewels, bags, fashion">
	<title>Arte Shop</title>
	<link rel="stylesheet" href="css/style.css" type="text/css">
	<style type="text/css">
<!--
.style5 {font-family: Arial, Helvetica, sans-serif}
.style6 {color: #333333}
.style3 {
	color: #333333;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 13px;
	font-weight: bold;
}
.style7 {font-size: 12px}
.style12 {font-weight: bold}
.style14 {color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 20px; font-weight: bold; }
-->
    </style>

</head>
<body>
<div class="header" style="display:block;">
	  <div>	  
	  <img src="images/logoarteshop2.png" alt="" width="327">
	  <ul>
				<li>
					<a href="index.html">Home</a>
				</li>
				<li>
					<a href="about.html">About</a>
				</li>
				<li>
					<a href="#">Collections</a>
					<ul>
						<li>
							<a href="jewels.html">Jewels</a>
						</li>
						<li>
							<a href="handbags.html">Bags</a>
						</li>
						<li>
							<a href="fashion.html">Fashion</a>
						</li>
					 </ul>
				  </li>
				        <li>
					<a href="shop.html">Shop</a>
				</li>
				<li>
				    <a href="contact.html">Contact</a>			      
				</li>
		</ul>
  	  </div>
	</div>
	<div class="body">
	  <div>
		<div class="collections">
			<div class="navigation">
				<ul>
					<li class="selected">
					<a href="#">CONTACT ARTESHOP</a>
					</li>
				</ul>
			</div>
	
		  <div>
		    <table width="100%" height="100%" border="0">
              <tr>
                <td height="86" colspan="5"><div align="center"><span class="style14"><br>ARTESHOP- Straat 12 - 9999 De Gemeente- Tel. 059 99 99 99</span></div></td>
              </tr>
            </table>
		    <table width="100%" height="100%" border="0">
                 <tr>
                   <td width="266" rowspan="10"><img src="images/figure34.jpg" alt="" width="218" style="border:1px solid white"></td>
                          <td>&nbsp;</td>
                          <td colspan="3"><span class="style3">OPENINGSUREN </span></td>
              </tr>
                 <tr>
                   <td>&nbsp;</td>
                          <td colspan="3">&nbsp;</td>
              </tr>
                 <tr>
                   <td>&nbsp;</td>
                          <td>&nbsp;</td>
                          <td colspan="2">&nbsp;</td>
              </tr>
                 <tr>
                   <td width="8">&nbsp;</td>
                          <td width="143"><span class="style7 style6 style5 style12"><strong>Maandag</strong></span></td>
                          <td colspan="2"><span class="style7 style6 style5"><strong>gesloten</strong></span></td>
              </tr>
                 <tr>
                   <td>&nbsp;</td>
                          <td><span class="style7 style6 style5 style2"><strong>Dinsdag</strong></span></td>
                          <td width="135"><span class="style7 style6 style5 style2"><strong>10:00-12:30</strong></span></td>
                          <td width="370"><span class="style7 style6 style5 style2"><strong>14:00-18:00</strong></span></td>
              </tr>
                 <tr>
                   <td>&nbsp;</td>
                          <td><span class="style7 style6 style5 style2"><strong>Woensdag</strong></span></td>
                          <td><span class="style7 style6 style5 style2"><strong>10:00-12:30</strong></span></td>
                          <td><span class="style7 style6 style5 style2"><strong>14:00-18:00</strong></span></td>
              </tr>
                 <tr>
                   <td>&nbsp;</td>
                          <td><span class="style7 style6 style5 style2"><strong>Donderdag</strong></span></td>
                          <td><span class="style7 style6 style5 style2"><strong>10:00-12:30</strong></span></td>
                          <td><span class="style7 style6 style5 style2"><strong>14:00-18:00</strong></span></td>
              </tr>
                 <tr>
                   <td>&nbsp;</td>
                          <td><span class="style7 style6 style5 style2"><strong>Vrijdag</strong></span></td>
                          <td><span class="style7 style6 style5 style2"><strong>10:00-12:30</strong></span></td>
                          <td><span class="style7 style6 style5 style2"><strong>14:00-18:00</strong></span></td>
              </tr>
                 <tr>
                   <td>&nbsp;</td>
                          <td><span class="style7 style6 style5 style2"><strong>Zaterdag</strong></span></td>
                          <td><span class="style7 style6 style5 style2"><strong>10:00-12:30</strong></span></td>
                          <td><span class="style7 style6 style5 style2"><strong>14:00-18:00</strong></span></td>
              </tr>
                 <tr>
                   <td>&nbsp;</td>
                          <td><span class="style7 style6 style5 style2"><strong>Zondag</strong></span></td>
                          <td colspan="2"><span class="style7 style6 style5 style2"><strong>10:00-13:00 (enkel tijdens schoolvakanties)</strong></span></td>
              </tr>
                 <tr>
                   <td>&nbsp;</td>
                          <td>&nbsp;</td>
                          <td>&nbsp;</td>
                          <td colspan="2">&nbsp;</td>
              </tr>
                 <tr>
                   <td height="86" colspan="5"><div align="center"><span class="style3"><br>
                   Hebt u een vraag, een klacht of een opmerking ? ArteShop staat klaar om ze te beantwoorden. <br>
                   U kunt ons bereiken per telefoon of door gebruik te maken van onderstaand contactformulier.</span></div></td>
              </tr>
            </table>
		    <style>
input, textarea {
	padding:5px; 
	border:2px solid #ccc; 
	border-radius: 5px;
	width="60";
	font:12px Verdana;
	margin-bottom:10px;
}

input[type=submit] {
	padding:5px 15px; 
	background:#ccc; 
	border:0 none;
	cursor:pointer;
	width:100px;
	border-radius: 5px; }
	
input[type=submit]:active {
	padding:5px 15px; 
	background:#cdc; 
}
            </style>
            <form name="contactform" method="post" action="mail.php">
  
            <div align="center">
      <input type="text" name="name" placeholder="Naam"  size="60"/>
      <br />
      
  <input type="email" name="email" placeholder="Email"  size="60"/>
      <br />
      
  <input type="text" name="phone" placeholder="Telefoonnummer"  size="60"/>
      <br />
      
  <textarea name="message" placeholder="Bericht" cols="60" rows="6"></textarea>
      <br />
      <br />
      <input type="submit" value="Verzenden" />													  
              </div>
            </form>
            <table width="870" height="49%" border="0"> 
<tr>
 
   <td width="614"><iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2496.132492806767!2d3.0341832000000113!3d51.27188020000002!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47dcaafb4d232d9b%3A0x6d658c1be745677e!2sArte+Mio!5e0!3m2!1snl!2sbe!4v1440675281009" width="100%" height="349" frameborder="0" style="border:1px solid white" allowfullscreen></iframe></t>
   <td width="22">   
   <td width="220"> <img src="images/figure5.jpg" width="218" height="349" style="border:1px solid white">
</tr>
</table>


				
		  </div>
		</div>
	  </div>
</div>
	<div class="footer">
		<div>
			<p>
				&#169; 2015 DIRK DE COSTER</p>
			<div class="connect">			    <a href="index.html" id="facebook">Facebook</a> <a href="https://www.google.be/maps/place/Arte+Shop/@51.2719902,3.0341832,17z/data=!3m1!4b1!4m2!3m1!1s0x47dcaafb4d232d9b:0x6d568c1be745677e" id="googleplus">Google+</a>
			</div>
		</div>
	</div>
</body>
</html>




Voor alle duidelijkheid : ik heb hier en daar wat gegevens (mail adres - telefoonnummer, etc ...) gewijzigd in dit script om de privacy te bewaren.


Hopelijk kan iemand mij helpen ?

Alvast bedankt,
Dirk
Ariën, nog een klein vraagske. Ik merk dat het opgegeven e-mail adres van de verzender niet doorkomt in de mail die ik krijg. Ik heb mijn e-mailadres enkel bij eigen emailadres en error emailadres aangepast. Wat moet ik invullen bij email verzender en bij bcc emailadres ?

<?php
// Geef GELDIGE adressen op
// Een korte benaming voor jouw website
$website_naam = 'ArteMio Website';
// Jouw eigen geldige emailadres
$eigen_emailadres = '[email protected]';
// Een geldig emailadres voor errors
$error_emailadres = '[email protected]';
// De naam van de verzender
$naam_verzender = 'Afzender';
// Het geldige emailadres van de afzender
$email_verzender = 'emailadres_van_verzender@zijn_domein.nl';
// Een geldig emailadres of helemaal leeg laten
$bcc_emailadres = 'geldig_emailadres@geldig_domein.nl';
// HTML mail? True/False
$html = true;

?>

Wil je dit nog even bekijken ?
$naam_verzender en $email_verzender kan je in je headers vervangen door de juiste waardes uit je $_POST.
Snap ik niet. Als ik alle gegevens invul op het contactformulier krijg ik :

Bericht: Dit is een test ! Telefoon :+3250999999 Naam: Dirk De Coster

In het php-script staan deze regels voor de headers :

$headers = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . "\r\n";
$headers .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . "\r\n";
$headers .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . "\r\n" : '';
$headers .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers .= 'X-Priority: Normal' . "\r\n";
$headers .= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
$headers .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . "\r\n" : '';

Kan je eens duidelijk aangeven wat ik moet wijzigen zodat het opgegeven mail adres van de afzender ook doorkomt in de mail ?

Zoals gezegd, Ariën, van php heb ik weinig kaas gegeten ... sorry hoor !

Groeten,
Dirk

$headers = 'From: ' . $_POST['name'] . ' <' . $_POST['email'] . '>' . "\r\n";
$headers .= 'Reply-To: ' . $_POST['name'] . ' <' . $_POST['email'] . '>' . "\r\n";
Ariën, 'k heb het zelf gevonden. Er stond een regeltje te kort in je php-script :

"Bericht: ".$_POST['message'].PHP_EOL .
"E-mailadres: ".$_POST['email'].PHP_EOL .
"Telefoon :".$_POST['phone'].PHP_EOL .
"Naam: ".$_POST['name'];

Nu is 't perfect zoals ik het wil.

Groeten en nogmaals bedankt voor alle hulp.

Dirk
Kuch.... iets met veiligheid ;-)
$headers = 'From: ' . $_POST['name'] . ' <' . $_POST['email'] . '>' . "\r\n";
$headers .= 'Reply-To: ' . $_POST['name'] . ' <' . $_POST['email'] . '>' . "\r\n";


Ah, hier zat ik al een beetje op te wachten :).

Als je data opneemt in je mailheaders zul je deze goed moeten filteren. Je zult in ieder geval moeten controleren of $_POST['email'] een geldig e-mailadres is (en voor $_POST['name'] zul je iets soortgelijks moeten doen, maar het is makkelijker om dit onderdeel van het mailadres achterwege te laten), anders wordt dit veld mogelijk misbruikt voor MIME header injectie. Simpel uitgelegd kun je daarmee meer To, Bcc etc. regels toevoegen als je $_POST['email'] niet goed inspecteert zodat je mailformulier (verder/makkelijker) misbruikt kan worden voor het versturen van spam.

De oplossing van Ariën werkt waarschijnlijk wel, maar in deze vorm zul je een beetje uit moeten gaan van de ... ah... goodwill van een gebruiker van je contactformulier :).

En als je mailbody HTML bevat en toestaat loont het misschien de moeite om e.e.a. te escapen.
Daarom ben ik zelf voorstander van die library phpMailer. Die mailt met enkele regeltjes al, en hoeft geen volledige specificatie van de nodige headers te verwachten. Tevens is deze al veilig tegen de mailheader-injection die Thomas noemt.

Dan rest alleen nog een (captcha-)check of die gene een mens is, en een beveiliging tegen flooding en bij sterke voorkeur ook CSRF.
Mannen, da's chinees voor mij. Moet ik die twee regeltjes opnemen in mijn php-script om te voorkomen dat iemand anders mails verstuurd vanaf de server waar de website wordt gehost ? Is dat de bedoeling ?
Als het 'chinees' is, dan loont het misschien om de taal te leren.
En ik kan je verzekeren het is gelukkig niet te vergelijken met Chinees en sneller te leren.

Een PHP-script bouwen is niet geheel zonder risoco's want er zijn diverse vuilkuilen en punten waar je op moet letten ten behoeve van de veiligheid. Je wilt immers niet dat je hosting je domein tijdelijk blokkeert omdat er opeens bakken vol met spam worden verstuurd.

Als je niet bereid bent om PHP te leren, dan is het zinvoller om het uit te besteden. Want zonder enige bouwervaring ga je zelf ook geen eigen dakkapel bouwen, die uiteindelijk voor waterschade in je huis zorgt omdat de regenwaterafvoer niet goed is aangesloten. Dan laat je het liever doen, om je leert het (nu is een opleiding tot bouwkundige toch wel aanzienlijk langer dan PHP te leren, maar het gaat om het idee.).

Reageren