Contactformulier beveiligen tegen verzending van lege velden
Pagina: « vorige 1 2 3 volgende »
Maar als ik 1 of meerdere velden niet heb ingevuld, dan krijg ik een goeie foutmelding. Dus dat zit nu al juist.
Voorbeeld van de foutmelding :
De volgende fouten zijn opgetreden:
Er is geen email ingevuld
Er is geen bericht ingevuld
Dan weet je in ieder geval of hij in dit stuk terecht komt, na een goede validatie.
if(count($errors)>0) { // er zijn één of meerdere errors
echo 'De volgende fouten zijn opgetreden:<ul>';
foreach($errors as $error) {
echo "<li>".$error."</li>".PHP_EOL;
}
echo '</ul>';
} else {
echo "De mail is goed verzonden";
// alle validaties zijn goed, we kunnen hier mailen
Gewijzigd op 11/03/2016 11:47:18 door Dirk De Coster
Heb je geen voorbeeld die we kunnen inzien?
Verder hebben we code-tags op het forum om code in te plaatsen ;-)
Gewijzigd op 11/03/2016 11:49:00 door - Ariën -
Alle mails komen voorlopig bij mij terecht. De winkeljuffrouw zal er niets van merken :-)
Gewijzigd op 11/03/2016 12:16:40 door Dirk De Coster
Dus ik heb het idee dat de code niet goed over is genomen?
Verder is dit geen script om direct in productie te draaien. Er is geen flooding controle, geen controle op spam, geen controle op headers.
Bedankt voor je hulp. Ik ben in elk geval een stukje verder ...
Groeten,
Dirk
Ah, een missende accolade, nu moet 'ie werken.
100.000 x dank voor je bereidwillige samenwerking.
Groeten,
Dirk
Fijn dat het werkt, ik zou je verder wel richten op de verdere genoemde beveiliging voordat je het openbaar zet.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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;
?>
// 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 ?
Gewijzigd op 11/03/2016 14:44:56 door Dirk De Coster
$naam_verzender en $email_verzender kan je in je headers vervangen door de juiste waardes uit je $_POST.
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
Code (php)
1
2
2
$headers = 'From: ' . $_POST['name'] . ' <' . $_POST['email'] . '>' . "\r\n";
$headers .= 'Reply-To: ' . $_POST['name'] . ' <' . $_POST['email'] . '>' . "\r\n";
$headers .= 'Reply-To: ' . $_POST['name'] . ' <' . $_POST['email'] . '>' . "\r\n";
Gewijzigd op 11/03/2016 15:02:31 door - Ariën -
"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 ;-)
Code (php)
1
2
2
$headers = 'From: ' . $_POST['name'] . ' <' . $_POST['email'] . '>' . "\r\n";
$headers .= 'Reply-To: ' . $_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.
Gewijzigd op 11/03/2016 15:21:59 door Thomas van den Heuvel
Dan rest alleen nog een (captcha-)check of die gene een mens is, en een beveiliging tegen flooding en bij sterke voorkeur ook CSRF.
Gewijzigd op 11/03/2016 15:23:54 door - Ariën -
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 ?
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.).