Contactformulier beveiligen tegen verzending van lege velden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

Dirk De Coster

Dirk De Coster

11/03/2016 11:34:36
Quote Anchor link
Neen, dat bericht krijg ik niet. En ik krijg ik geen bericht in mijn mailbox als alle velden ingevuld zijn. Ik kom enkel op een lege pagina in een nieuw tabblad terecht.

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
 
PHP hulp

PHP hulp

25/12/2024 02:14:00
 
- Ariën  -
Beheerder

- Ariën -

11/03/2016 11:40:39
Quote Anchor link
Zet na de else van lijn 38 eens een echo neer met een willekeurige tekst?
Dan weet je in ieder geval of hij in dit stuk terecht komt, na een goede validatie.
 
Dirk De Coster

Dirk De Coster

11/03/2016 11:46:44
Quote Anchor link
Heb ik gedaan (zie stukje script hieronder), maar 't resultaat is 't zelfde : een blanco tabblad en geen mail in de mailbox

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
 
- Ariën  -
Beheerder

- Ariën -

11/03/2016 11:48:19
Quote Anchor link
Vreemd dat je die echo niet ziet. Ik kan het niet direct reproduceren. Want als er geen errors zijn gemeld, dan moet je die melding gewoon zien.

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 -
 
Dirk De Coster

Dirk De Coster

11/03/2016 11:51:55
Quote Anchor link
Oké, de website zit op "verwijderd". Klik op contact rechtsboven. Je zal zien wat ik bedoel als je het contactformulier volledig invult en op versturen klikt.

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
 
- Ariën  -
Beheerder

- Ariën -

11/03/2016 11:57:33
Quote Anchor link
Je zou toch echt een melding moeten zien als hij in de else-statement komt. Er zijn immers geen errors gemeld.

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.
 
Dirk De Coster

Dirk De Coster

11/03/2016 12:19:53
Quote Anchor link
Geen probleem, Ariën. Ik zal mijn probleem eens voorleggen bij een paar collega's op 't werk die ook wat van php kennen.

Bedankt voor je hulp. Ik ben in elk geval een stukje verder ...

Groeten,
Dirk
 
- Ariën  -
Beheerder

- Ariën -

11/03/2016 12:28:14
Quote Anchor link
Ah, een missende accolade, nu moet 'ie werken.
 
Dirk De Coster

Dirk De Coster

11/03/2016 13:53:16
Quote Anchor link
Ariën, nu werkt het perfect. Als je 1 of meerdere velden niet invult krijg ik een foutmelding en als alles perfect ingevuld is, krijg ik de melding dat de mail goed verzonden is (en die melding heb ik wat verfijnd) en wordt de mail verstuurd naar mijn mailbox.

100.000 x dank voor je bereidwillige samenwerking.

Groeten,
Dirk
 
- Ariën  -
Beheerder

- Ariën -

11/03/2016 13:56:27
Quote Anchor link
Fijn dat het werkt, ik zou je verder wel richten op de verdere genoemde beveiliging voordat je het openbaar zet.
 
Dirk De Coster

Dirk De Coster

11/03/2016 14:43:29
Quote Anchor link
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 ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;

?>


Wil je dit nog even bekijken ?
Gewijzigd op 11/03/2016 14:44:56 door Dirk De Coster
 
- Ariën  -
Beheerder

- Ariën -

11/03/2016 14:48:01
Quote Anchor link
$naam_verzender en $email_verzender kan je in je headers vervangen door de juiste waardes uit je $_POST.
 
Dirk De Coster

Dirk De Coster

11/03/2016 14:57:49
Quote Anchor link
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
 
- Ariën  -
Beheerder

- Ariën -

11/03/2016 15:02:20
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$headers = 'From: ' . $_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 -
 
Dirk De Coster

Dirk De Coster

11/03/2016 15:11:50
Quote Anchor link
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
 
- Ariën  -
Beheerder

- Ariën -

11/03/2016 15:18:19
Quote Anchor link
Kuch.... iets met veiligheid ;-)
 
Thomas van den Heuvel

Thomas van den Heuvel

11/03/2016 15:20:42
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$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.
Gewijzigd op 11/03/2016 15:21:59 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

11/03/2016 15:23:25
Quote Anchor link
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.
Gewijzigd op 11/03/2016 15:23:54 door - Ariën -
 
Dirk De Coster

Dirk De Coster

11/03/2016 15:25:12
Quote Anchor link
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 ?
 
- Ariën  -
Beheerder

- Ariën -

11/03/2016 15:31:57
Quote Anchor link
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.).
 

Pagina: « vorige 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.