mailscript fail :(
hallo iedereen,
Ik ben sinds enige tijd bezig met een relatief groot project voor mij, echter heeft dit het gevolg dat er problemen bij komen kijken... nu zit ik met iets waar ik echt niet meer mee uit kwam maar toch een beginners probleempje is, en anders alvast me excuses voor het verkeert posten... het gaat om een website waarbij ik laatst een mailformulier heb, echter wordt de controle uitgevoerd, de mail wordt niet verstuurd en er zijn geen meldingen dat het bericht verstuurd word... ik heb de host via een vorig project waar we ook een mail systeem hadden, daar werkte het echter wel, helaas ben ik door omstandigheden de bestanden en wachtwoorden kwijt waardoor ik het niet meer op kan halen...
dan nu de codes die hiervoor moeten zorgen:
het mailformulier:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Carsten PT</title>
<link href="/include/style.css" rel="stylesheet" type="text/css" >
<script>
function validateForm()
{
var x = document.forms["contact"]["email"].value;
var y = document.forms["contact"]["voornaam"].value;
var z = document.forms["contact"]["onderwerp"].value;
var q = document.forms["contact"]["bericht"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (y == null || y == "") {
alert("Je hebt je naam nog niet ingevuld.");
return false;
}
if (z == null || z == "") {
alert("Je hebt geen onderwerp ingevuld.");
return false;
}
if (q == null || q == "") {
alert("Je hebt nog geen bericht meeverstuurd.");
return false;
}
if (atpos < 1 || dotpos<atpos+2 || dotpos+2>x.length) {
alert("Je hebt geen geldig e-mailadres ingevoerd.");
return false;
}
}
</script>
</head>
<body>
<div id="ctleft">
<h2>
Contact
</h2>
</div>
<div id="ctright">
<div style="margin-top:30px;">
<form name="contact" onSubmit="return validateForm()" action= method="POST" >
<table border="0">
<tr>
<td>Voornaam:</td>
<td><input type="text" name="voornaam" placeholder="Voornaam" /></td>
</tr>
<tr>
<td>E-mailadres:</td>
<td><input type="text" name="email" placeholder="[email protected]" /> </td>
</tr>
<tr>
<td>Onderwerp:</td>
<td><input type="text" name="onderwerp" placeholder="Onderwerp" /></td>
</tr>
<tr>
<td>Bericht:</td>
<td><textarea name="bericht" placeholder="type hier jouw bericht..." rows="10" cols="30" >
</textarea></td>
</tr>
<tr>
<td>
<input name="Submit" type="submit" value="verzenden" />
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
bij voorbaat dank
met vriendelijke groet,
Ik ben sinds enige tijd bezig met een relatief groot project voor mij, echter heeft dit het gevolg dat er problemen bij komen kijken... nu zit ik met iets waar ik echt niet meer mee uit kwam maar toch een beginners probleempje is, en anders alvast me excuses voor het verkeert posten... het gaat om een website waarbij ik laatst een mailformulier heb, echter wordt de controle uitgevoerd, de mail wordt niet verstuurd en er zijn geen meldingen dat het bericht verstuurd word... ik heb de host via een vorig project waar we ook een mail systeem hadden, daar werkte het echter wel, helaas ben ik door omstandigheden de bestanden en wachtwoorden kwijt waardoor ik het niet meer op kan halen...
dan nu de codes die hiervoor moeten zorgen:
het mailformulier:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Carsten PT</title>
<link href="/include/style.css" rel="stylesheet" type="text/css" >
<script>
function validateForm()
{
var x = document.forms["contact"]["email"].value;
var y = document.forms["contact"]["voornaam"].value;
var z = document.forms["contact"]["onderwerp"].value;
var q = document.forms["contact"]["bericht"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (y == null || y == "") {
alert("Je hebt je naam nog niet ingevuld.");
return false;
}
if (z == null || z == "") {
alert("Je hebt geen onderwerp ingevuld.");
return false;
}
if (q == null || q == "") {
alert("Je hebt nog geen bericht meeverstuurd.");
return false;
}
if (atpos < 1 || dotpos<atpos+2 || dotpos+2>x.length) {
alert("Je hebt geen geldig e-mailadres ingevoerd.");
return false;
}
}
</script>
</head>
<body>
<div id="ctleft">
<h2>
Contact
</h2>
</div>
<div id="ctright">
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if (isset($_REQUEST['email'])) { // als e-mail ingevuld is,
$signature = $_REQUEST['voornaam'];
$email = $_REQUEST['email'];
$subject = $_REQUEST['onderwerp'];
$message = $_REQUEST['bericht'];
$receiver = "[email protected]";
mail($receiver, $subject, $message, "From:" . $signature . " <" . $email . ">");
echo "Bericht is succesvol verzonden.";
} else {
?>
if (isset($_REQUEST['email'])) { // als e-mail ingevuld is,
$signature = $_REQUEST['voornaam'];
$email = $_REQUEST['email'];
$subject = $_REQUEST['onderwerp'];
$message = $_REQUEST['bericht'];
$receiver = "[email protected]";
mail($receiver, $subject, $message, "From:" . $signature . " <" . $email . ">");
echo "Bericht is succesvol verzonden.";
} else {
?>
<div style="margin-top:30px;">
<form name="contact" onSubmit="return validateForm()" action= method="POST" >
<table border="0">
<tr>
<td>Voornaam:</td>
<td><input type="text" name="voornaam" placeholder="Voornaam" /></td>
</tr>
<tr>
<td>E-mailadres:</td>
<td><input type="text" name="email" placeholder="[email protected]" /> </td>
</tr>
<tr>
<td>Onderwerp:</td>
<td><input type="text" name="onderwerp" placeholder="Onderwerp" /></td>
</tr>
<tr>
<td>Bericht:</td>
<td><textarea name="bericht" placeholder="type hier jouw bericht..." rows="10" cols="30" >
</textarea></td>
</tr>
<tr>
<td>
<input name="Submit" type="submit" value="verzenden" />
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
bij voorbaat dank
met vriendelijke groet,
Gewijzigd op 24/12/2012 01:15:31 door C -
Deze regel:
Gebruik ipv
Op mijn server werkt het script dan wel, anders ook niet
Vraag: heb je een host waar het bestand op staat of draai je een eigen webserver?
In geval van eigen webserver zou je even de instellingen in php.ini moeten nakijken of die goed staan
Gebruik ipv
Op mijn server werkt het script dan wel, anders ook niet
Vraag: heb je een host waar het bestand op staat of draai je een eigen webserver?
In geval van eigen webserver zou je even de instellingen in php.ini moeten nakijken of die goed staan
Gewijzigd op 24/12/2012 02:13:30 door jack maessen
ik heb een host hiervoor :)
k heb hem net getest en kom tot de conclusie dat ik rechtstreeks doorgestuurd wordt naar de homepage, zonder dat ik de melding krijg van bericht is verzonden of dat me bericht wordt verstuurt... wel krijg ik als ik daarna me pagina vernieuw nog de melding van dat de gegevens opnieuw worden verzonden van chrome...
k heb hem net getest en kom tot de conclusie dat ik rechtstreeks doorgestuurd wordt naar de homepage, zonder dat ik de melding krijg van bericht is verzonden of dat me bericht wordt verstuurt... wel krijg ik als ik daarna me pagina vernieuw nog de melding van dat de gegevens opnieuw worden verzonden van chrome...
* Je controleert alleen client-side of de velden wel goed zijn ingevuld, maar je moet dat ook altijd nog server side controleren
* Ik heb gister nog ergens hier op het forum gelezen dat PHP_SELF niet veilig is, maar waarom zou je action niet gewoon helemaal weglaten?
* je moet ook controleren of de mail wel is verzonden, gooi hem gewoon ff in een if-statement.
* Je bent vatbaar voor een mail-injection.
* Zoals hier ongeveer 10x per dag wordt verteld, maak je niet gebruik van de juiste mailheaders, neem hier is een kijkje: http://phpwiki.santhe.nl/index.php/De_juiste_mailheaders
* Ik heb gister nog ergens hier op het forum gelezen dat PHP_SELF niet veilig is, maar waarom zou je action niet gewoon helemaal weglaten?
* je moet ook controleren of de mail wel is verzonden, gooi hem gewoon ff in een if-statement.
* Je bent vatbaar voor een mail-injection.
* Zoals hier ongeveer 10x per dag wordt verteld, maak je niet gebruik van de juiste mailheaders, neem hier is een kijkje: http://phpwiki.santhe.nl/index.php/De_juiste_mailheaders
Gewijzigd op 24/12/2012 11:10:07 door Bo Ter Ham
wat Bo zegt...en waarom heb je de PHP code voor het verzenden van een e-mail midden in de html gezet? Ik raad je aan om de code te scheiden tussen php en html. Zo is het een stuk overzichtelijker...
en voor het emailen kun je beter gebruik maken van PHPmailer. geen gesodemieter met mailheaders, dat wordt allemaal voor je geregeld...
en voor het emailen kun je beter gebruik maken van PHPmailer. geen gesodemieter met mailheaders, dat wordt allemaal voor je geregeld...
mbt veiligheid PHP_SELF; hier staat daar een duidelijk artikel over
http://www.scriptorama.nl/security/tips-veiligere-site-phpself
http://www.scriptorama.nl/security/tips-veiligere-site-phpself
na heel wat pogingen heb ik de script gescheiden en nu werkt het wel
controle en me headers was ik nog mee bezig, me eerste zorg was dat het niet werkte terwijl hij dat wel zou moeten...
in iedergeval bedankt iedereen :)
controle en me headers was ik nog mee bezig, me eerste zorg was dat het niet werkte terwijl hij dat wel zou moeten...
in iedergeval bedankt iedereen :)
Cyvan Oort op 24/12/2012 01:13:32:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
if (isset($_REQUEST['email'])) { // als e-mail ingevuld is,
$signature = $_REQUEST['voornaam'];
$email = $_REQUEST['email'];
$subject = $_REQUEST['onderwerp'];
$message = $_REQUEST['bericht'];
$receiver = "[email protected]";
mail($receiver, $subject, $message, "From:" . $signature . " <" . $email . ">");
echo "Bericht is succesvol verzonden.";
?>
if (isset($_REQUEST['email'])) { // als e-mail ingevuld is,
$signature = $_REQUEST['voornaam'];
$email = $_REQUEST['email'];
$subject = $_REQUEST['onderwerp'];
$message = $_REQUEST['bericht'];
$receiver = "[email protected]";
mail($receiver, $subject, $message, "From:" . $signature . " <" . $email . ">");
echo "Bericht is succesvol verzonden.";
?>
Waarom gebruik je $_REQUEST? Je formulier heb je $_POST staan.
Waarom kopieer je eigenlijk de gegevens? Gezien je verdere script is dat overbodig.




