php contact form verbeteren

Status
Niet open voor verdere reacties.

Example5

Terugkerende gebruiker
Lid geworden
9 mrt 2008
Berichten
2.172
beste ...

ik heb op internet een contact formulier gevonden dat ik gebruik voor mijn site. het gaat om dit contact formulier (inclusief recaptcha): http://css-tricks.com/examples/NiceSimpleContactForm2/

nu viel het mij op dat ik bij email en telefoonnummer gewoon onzin in kan vullen en weet ik eigenlijk niet of dit script wel veilig is (kunnen er bijvoorbeeld html of php codes in the forms worden ingevuld waardoor mijn site 'gehackt'/aangepast kan worden?)

zouden jullie mij kunnen helpen om dit script veilig te maken, dus zodat er geen html of php codes in de forms ingevoerd kunnen worden en dat hij ook controleert of het telefoonnummer wel een telefoonnummer is (alleen nummers en exact 10 dus) en of het emailadres wel een emailadres is (dat hij een @ en . bevat).

ik zal hieronder de code geven voor de engine, maar via de link is het gehele script te downloaden dat ik compleet heb overgenomen (m.u.v. de recaptcha code uiteraard).

alvast bedankt!!


hieronder de code van de engine:
Code:
<?php

require_once('recaptchalib.php');
$privatekey = "hier heb ik mijn key ingevoerd";
$resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

if (!$resp->is_valid) {
  die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
       "(reCAPTCHA said: " . $resp->error . ")");
}

$EmailFrom = "lalala ContactFormulier";
$EmailTo = "mijnemailadres";
$Subject = "Contact via lalala Website";
$Name = Trim(stripslashes($_POST['Name'])); 
$Tel = Trim(stripslashes($_POST['Tel'])); 
$Email = Trim(stripslashes($_POST['Email'])); 
$Message = Trim(stripslashes($_POST['Message'])); 

// validation
$validationOK=true;
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
  exit;
}

// prepare email body text
$Body = "";
$Body .= "Name: ";
$Body .= $Name;
$Body .= "\n";
$Body .= "Tel: ";
$Body .= $Tel;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $Email;
$Body .= "\n";
$Body .= "Message: ";
$Body .= $Message;
$Body .= "\n";

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=contactthanks.php\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
}
?>
 
wederom bedankt voor je reactie phobia!

ik heb er vanochtend naar gekeken en snap het idee denk ik wel. ik begrijp dat ik vormen als "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$" zal moeten gebruiken om te controleren of het emailadres geldig is. het enige wat ik nog niet snap hoe ik zo een preg match ook daadwerkelijk in de code van mij verwerk. zou je daar misschien een tip voor kunnen geven, of wellicht een voordoen (bijvoorbeeld het telefoonnummer?)

tevens, zal als ik deze preg matches gebruik, het script ook veilig zijn? dat er dus niet via deze e-mail forms met mijn site geknoeid kan worden door html of php code in de form te zetten?
 
ipv $Email = Trim(stripslashes($_POST['Email']));

gebruik je $Email = preg_match($key,$_POST['Email'];

En veilig, jawel, ze kunnen wel <script>blah blah</script> invoeren, maar het zal niet daar de preg_match komen
omdat hij niet aan de door jou gestelde condities voldoet.
 
hmm op een of andere manier werkt dat niet goed, als ik onzin invul verstuurt hij de email alsnog maar komt er eerst nog een error voor het succesvol bericht. maar ik denk ook dat het niet zo simpel zal liggen omdat er ook nog wat if en elses toegevoegd zouden moeten worden en messages voor als de e-mail niet goed is ingevuld enzo.
 
okey,

$send = false;
if(preg_match(.......)) {
//mail is okey en mag gebruikt worden
} else {
//mail niet okey, geef error en verzend geen mail
$send = true;
}
if($send) {
//send mail
} else {
// verwerk error
}

Dit is een globale voorstelling hoe je het kunt aanpakken.
 
ik kom er niet uit. wat je schreef hierboven snap ik zelf ook, het punt is niet dat ik niet snap hoe ik het aan zou moeten pakken, het probleem is dat mijn kennis over php te beperkt is om daadwerkelijk de code te weten.
 
met andere woorden, je zou graag hebben dat andere voor jou het werk gaan doen!:)
 
Oh, eventjes tussendoor, @phobia: je if/else is verkeerd om, nu stuur je juist een mail als dat niet moet.

PHP:
$send = false;

if(preg_match(.......))
{
   $send = true;
}else{
   echo "verkeerde email!";
}

if($send == true)
{
   mail();
}



:thumb:


[edit]omgwtf mudkipz bbq[/edit]
 
Laatst bewerkt:
haha klopt helemaal, krijg je van te snel willen typen ;)
 
met andere woorden, je zou graag hebben dat andere voor jou het werk gaan doen!:)
Ik vind je reactie een beetje kort door de bocht... om te beginnen help ik hier dagelijks meerdere mensen (net als jij waarschijnlijk) en maak ik op dit moment gratis voor iemand een complete website en heb alleen een klein probleempje met een contactform. Als ik 'al het werk' wou laten doen, had ik wel een vraag gesteld of iemand voor mij een complete site wou maken. Vandaar dat ik de manier waarop dit gezegd wordt toch wel een klein beetje apart vind... Anyway, de reden dat ik de vraag stel is simpelweg omdat ik te weinig kennis over een specifieke taal heb en aangezien ik geen php expert ben of wil worden, ga ik geen gehele taal leren om dit kleine probleem op te lossen.

Ik snap overigens zelf best hoe ik in pseudocode een if {} else{} van wat ik wil kan maken en hoe die opbouw moet zijn snap ik ook (en dat is eigenlijk hetgene dat jij in je eerdere posts ook al liet zien).

Maar als je vraagt of ik wil dat iemand 'alles voor mij gaat doen' (en er van uit gaande dat dit script 'alles' is, wat volgens mij voor een php kenner echt een matter of seconds is), dan antwoord ik simpelweg 'ja graag'. En dan denk ik dat ik nog niet eens echt heel gek veel vraag, aangezien in de tijd dat het mensen zou duren om dit constant uit te leggen, de code wel 5 keer geschreven had kunnen worden. Ik stel deze vraag juist op dit forum omdat hier meestal niet zo moeilijk wordt gedaan over 'Wat heb je zelf al geprobeerd'/'Ga zelf eens zoeken'.
 
Laatst bewerkt:
haha oei ai dat was ff een prikje op een teer plekkie ;)

Maar hier is je code, de preg_match moet je zelf ff invullen en ik heb de code niet getest( Ik hoop dat je me dat vergeeft om deze tijd ;) )

PHP:
<?php

require_once('recaptchalib.php');
$privatekey = "hier heb ik mijn key ingevoerd";
$resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

if (!$resp->is_valid) {
  die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
       "(reCAPTCHA said: " . $resp->error . ")");
}

$EmailFrom = "lalala ContactFormulier";
$EmailTo = "mijnemailadres";
$Subject = "Contact via lalala Website";
$Name = Trim(stripslashes($_POST['Name'])); 
$Tel = Trim(stripslashes($_POST['Tel'])); 
$Email = Trim(stripslashes($_POST['Email'])); 
$Message = Trim(stripslashes($_POST['Message'])); 

// validation
$validationOK=true;
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
  exit;
}
$send = false;
if(preg_match(.......)) {
//mail is okey en mag gebruikt worden

// prepare email body text
$Body = "";
$Body .= "Name: ";
$Body .= $Name;
$Body .= "\n";
$Body .= "Tel: ";
$Body .= $Tel;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $Email;
$Body .= "\n";
$Body .= "Message: ";
$Body .= $Message;
$Body .= "\n";

$send = true;
}

if($send) {
//send mail
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");
} else {
// verwerk error
$success = false;
}
// send email 


// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=contactthanks.php\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
}
?>
 
haha sorry hoor als dat een beetje overtrokken was, maargoed.

heb hem getest en naar een paar kleine aanpassingen werkt hij nu. ik gebruikt de preg:

if (preg_match('/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/',$Email)) {

bedankt :D, ik ga nu zelf wel verder knoeien met het telefoonnummer :p
 
is al okey, ik was ook een beetje kort door de bocht. Maar je moet ze de kost geven die het wel makkelijk vinden om andere voor zich te laten werken.

Dat ze nog niet eens zelf de moeite nemen om ff te googlen en wat dingen uit te proberen.

Maar ik denk dat je er nu wel uitkomt met wat je nu hebt!
 
ja snap ik, probeer ik normaal ook te vermijden, maar dacht dat dit niet zo'n big deal zou zijn en had zelf al het een en ander geknoeid. waar ik zelf overigens niet op was gekomen was om het // prepare email body text ook in de if te zetten, ik probeerde zelf een if te maken die net voor het success gedeelte kwam, maar had geen idee hoe dat te koppelen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan