PDA

Bekijk Volledige Versie : php contactformulier krijg ik niet werkend



Andre
03/02/08, 14:05
op www.andrebijkerk.nl draait een flash template met onderstaand
contactformulier


<?

Error_Reporting(E_ALL & ~E_NOTICE);

while ($request = current($_REQUEST)) {

if (key($_REQUEST)!='recipient') {

$pre_array=split ("&777&", $request);

$post_vars[key($_REQUEST)][0]=$pre_array[0];

$post_vars[key($_REQUEST)][1]=$pre_array[1];

}

next($_REQUEST);

}

reset($post_vars);

$subject="From ".$post_vars['your_name'][0] ;

$headers= "From: ".$post_vars['your_email'][0] ."\n";

$headers.='Content-type: text/html; charset=iso-8859-1';

$message='';

while ($mess = current($post_vars)) {

if ((key($post_vars)!="i") && (key($post_vars)!="your_email") &&
(key($post_vars)!="your_name")) {

$message.="<strong>".$mess[1]."</strong>&nbsp;&nbsp;&nbsp;".$mess[0]."<br>";

}

next($post_vars);

}

mail($_REQUEST['recipient'], $subject, "

<html>

<head>

<title>Contact letter</title>

</head>

<body>

<br>

".$message."

</body>

</html>" , $headers);

echo ("Your message was successfully sent!");

?>

<script>

resizeTo(300, 300);

</script>



Als ik het formulier op de site invul en submit geef gebeurt er niets.

Ik krijg dit formulier niet werkend kan iemand mij op de juiste weg helpen?
Googlelen geeft te veel hits ik zie door de bomen het bos niet meer

Alvast bedankt voor de moeite

gr

Andre

Leihcim
03/02/08, 20:05
Andre wrote:
> op www.andrebijkerk.nl draait een flash template met onderstaand
> contactformulier

Dit is iig. een ontzettend slecht script. Het stelt mensen in staat om een
willekeurig bericht naar een willekeurige ontvanger te sturen en dus een
leuke tool voor spammers.

Ik zou toch echt even verder zoeken naar een beter beveiligd contact
formulier. Als je het veilig wilt houden laat je de gebruiker geen To,
Subject, From of andere headers invoeren, ivm 'header injection'.

>
>
> <?
>
> Error_Reporting(E_ALL & ~E_NOTICE);
>
> while ($request = current($_REQUEST)) {
>
> if (key($_REQUEST)!='recipient') {
>
> $pre_array=split ("&777&", $request);
>
> $post_vars[key($_REQUEST)][0]=$pre_array[0];
>
> $post_vars[key($_REQUEST)][1]=$pre_array[1];
>
> }
>
> next($_REQUEST);
>
> }
>
> reset($post_vars);
>
> $subject="From ".$post_vars['your_name'][0] ;
>
> $headers= "From: ".$post_vars['your_email'][0] ."\n";
>
> $headers.='Content-type: text/html; charset=iso-8859-1';
>
> $message='';
>
> while ($mess = current($post_vars)) {
>
> if ((key($post_vars)!="i") && (key($post_vars)!="your_email") &&
> (key($post_vars)!="your_name")) {
>
> $message.="<strong>".$mess[1]."</strong>&nbsp;&nbsp;&nbsp;".$mess[0]."<br>";
>
>
> }
>
> next($post_vars);
>
> }
>
> mail($_REQUEST['recipient'], $subject, "
>
> <html>
>
> <head>
>
> <title>Contact letter</title>
>
> </head>
>
> <body>
>
> <br>
>
> ".$message."
>
> </body>
>
> </html>" , $headers);
>
> echo ("Your message was successfully sent!");
>
> ?>
>
> <script>
>
> resizeTo(300, 300);
>
> </script>
>
>
>
> Als ik het formulier op de site invul en submit geef gebeurt er niets.
>
> Ik krijg dit formulier niet werkend kan iemand mij op de juiste weg
> helpen? Googlelen geeft te veel hits ik zie door de bomen het bos niet meer
>
> Alvast bedankt voor de moeite
>
> gr
>
> Andre
>
>
>
>
>

Nico Schuyt
03/02/08, 20:35
Leihcim wrote:
> Andre wrote:
>> op www.andrebijkerk.nl draait een flash template met onderstaand
>> contactformulier
> [knip script]

> Dit is iig. een ontzettend slecht script. Het stelt mensen in staat
> om een willekeurig bericht naar een willekeurige ontvanger te sturen
> en dus een leuke tool voor spammers.
> Ik zou toch echt even verder zoeken naar een beter beveiligd contact
> formulier. Als je het veilig wilt houden laat je de gebruiker geen To,
> Subject, From of andere headers invoeren, ivm 'header injection'.

Maar die 'From' is toch belangrijk?
Desgewenst kun je injection voorkomen met trim($_POST['from'])
of
$verzender = $_POST['from'];
if (eregi("\r", $from) || eregi("\n", $from)) {die();}

--
Nico

Bozweb
03/02/08, 21:05
On Sun, 3 Feb 2008 14:00:18 +0100, "Andre"
<andrewilbijkerkgeenspam@wanadoo.nl> wrote:

>op www.andrebijkerk.nl draait een flash template met onderstaand
>contactformulier
>
Deze werkt bij mij wel

<html>
<body>

<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$message = $_REQUEST['message'] ;
mail( "u@emailadres", "Subject:vul hier wat in",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />

Message:<br />
<textarea name='message' rows='10' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>

Eerder gepost in deze nieuwsgroep.
--
Ik heb niks te verbergen Award:
http://www.bigbrotherawards.nl/
Website:
http://www.bozweb.net/

Leihcim
03/02/08, 21:25
Nico Schuyt wrote:
> Leihcim wrote:
>
>>Andre wrote:
>>
>>>op www.andrebijkerk.nl draait een flash template met onderstaand
>>>contactformulier
>>
>>[knip script]
>
>
>>Dit is iig. een ontzettend slecht script. Het stelt mensen in staat
>>om een willekeurig bericht naar een willekeurige ontvanger te sturen
>>en dus een leuke tool voor spammers.
>>Ik zou toch echt even verder zoeken naar een beter beveiligd contact
>>formulier. Als je het veilig wilt houden laat je de gebruiker geen To,
>>Subject, From of andere headers invoeren, ivm 'header injection'.
>
>
> Maar die 'From' is toch belangrijk?

Tja, wat is belangrijk. Als het adres maar doorgestuurd wordt zou ik
zeggen, dat kan ook in de body. Ik wou het voor OP vooral simpel houden,
gezien de aard van zijn vraag en vermoedelijke niveau van kennis.

> Desgewenst kun je injection voorkomen met trim($_POST['from'])

Die snap ik niet.

> of
> $from = $_POST['from'];
> if (eregi("\r", $from) || eregi("\n", $from)) {die();}

Die snap ik wel.

Natuurlijk kun je header injection voorkomen, maar dat is wel iets voor
gevorderden.

Nico Schuyt
03/02/08, 21:25
Leihcim wrote:
> Nico Schuyt wrote:
>> Leihcim wrote:
>>> Andre wrote:

>>>> op www.andrebijkerk.nl draait een flash template met onderstaand
>>>> contactformulier

>>> [knip script]

>>> Dit is iig. een ontzettend slecht script. Het stelt mensen in staat
>>> om een willekeurig bericht naar een willekeurige ontvanger te sturen
>>> en dus een leuke tool voor spammers.
>>> Ik zou toch echt even verder zoeken naar een beter beveiligd contact
>>> formulier. Als je het veilig wilt houden laat je de gebruiker geen
>>> To, Subject, From of andere headers invoeren, ivm 'header
>>> injection'.

>> Maar die 'From' is toch belangrijk?

> Tja, wat is belangrijk. Als het adres maar doorgestuurd wordt zou ik
> zeggen, dat kan ook in de body. Ik wou het voor OP vooral simpel
> houden, gezien de aard van zijn vraag en vermoedelijke niveau van
> kennis.

>> Desgewenst kun je injection voorkomen met trim($_POST['from'])

> Die snap ik niet.

http://nl3.php.net/trim :
This function returns a string with whitespace stripped from the beginning
and end of str . Without the second parameter, trim() will strip these
characters:
a.. " " (ASCII 32 (0x20)), an ordinary space.
b.. "\t" (ASCII 9 (0x09)), a tab.
c.. "\n" (ASCII 10 (0x0A)), a new line (line feed).
d.. "\r" (ASCII 13 (0x0D)), a carriage return.
e.. "\0" (ASCII 0 (0x00)), the NUL-byte.
f.. "\x0B" (ASCII 11 (0x0B)), a vertical tab.

--
Nico

Erick T. Barkhuis
03/02/08, 21:25
Nico Schuyt:
> Leihcim wrote:

> >> Desgewenst kun je injection voorkomen met trim($_POST['from'])
>
> > Die snap ik niet.
>
> http://nl3.php.net/trim :
> This function returns a string with whitespace stripped from the beginning
> and end of str .

Let hierbij op "beginning" en "end".

Je houdt er niet iets mee tegen als
FROM: adres1\r\nbcc:adres2\r\nbcc:adres3\r\n...enz...

--
Erick

"Je moet die <div class=mijntekstDiv> niet in de head maar in de body-
sectie van je document zetten" - Ronald Klip in niwo

Nico Schuyt
03/02/08, 21:35
Erick T. Barkhuis wrote:
> Nico Schuyt:
>> Leihcim wrote:

>>>> Desgewenst kun je injection voorkomen met trim($_POST['from'])

>>> Die snap ik niet.

>> http://nl3.php.net/trim :
>> This function returns a string with whitespace stripped from the
>> beginning and end of str .

> Let hierbij op "beginning" en "end".
> Je houdt er niet iets mee tegen als
> FROM: adres1\r\nbcc:adres2\r\nbcc:adres3\r\n...enz...

Je hebt helemaal gelijk Erick!

--
Nico

Hans
03/02/08, 23:55
On Sun, 3 Feb 2008 21:24:58 +0100,
Erick T Barkhuis <erick.use-net@ardane.c-o-m> wrote:
> Nico Schuyt:
>> Leihcim wrote:
>
>> >> Desgewenst kun je injection voorkomen met trim($_POST['from'])
>>
>> > Die snap ik niet.
>>
>> http://nl3.php.net/trim :
>> This function returns a string with whitespace stripped from the beginning
>> and end of str .
>
> Let hierbij op "beginning" en "end".
>
> Je houdt er niet iets mee tegen als
> FROM: adres1\r\nbcc:adres2\r\nbcc:adres3\r\n...enz...

Wat is er mis met een beetje validatie? Als men kijkt of er 1 apestaartje
in voorkomt kan men al veel meuk voorkomen. Daarnaast een check op een
geldig tld enzo is natuurlijk ook handig. Er zijn perl guru's die het
in 1 check doen maar ik geloof dat de regex 4kb is ofzo.

Hans


--
IM: hans.wolters@xs4all.nl
http://lonki.xs4all.nl

Leihcim
04/02/08, 00:15
Hans wrote:
> On Sun, 3 Feb 2008 21:24:58 +0100,
> Erick T Barkhuis <erick.use-net@ardane.c-o-m> wrote:
>
>>Nico Schuyt:
>>
>>>Leihcim wrote:
>>
>>>>>Desgewenst kun je injection voorkomen met trim($_POST['from'])
>>>
>>>>Die snap ik niet.
>>>
>>>http://nl3.php.net/trim :
>>>This function returns a string with whitespace stripped from the beginning
>>>and end of str .
>>
>>Let hierbij op "beginning" en "end".
>>
>>Je houdt er niet iets mee tegen als
>>FROM: adres1\r\nbcc:adres2\r\nbcc:adres3\r\n...enz...
>
>
> Wat is er mis met een beetje validatie? Als men kijkt of er 1 apestaartje
> in voorkomt kan men al veel meuk voorkomen. Daarnaast een check op een
> geldig tld enzo is natuurlijk ook handig. Er zijn perl guru's die het
> in 1 check doen maar ik geloof dat de regex 4kb is ofzo.

Het ging hier puur om het voorkomen van header injection. Daar helpt een
check op een apestaartje niet tegen. Al kun je natuurlijk wel een regex
gebruiken om header injection te ondervangen.

Overigens hoeft zo'n regex niet zo groot te zijn, hiermee kom je al een
heel eind:

http://www.regular-expressions.info/email.html

Jan Reilink
11/02/08, 22:25
Bozweb wrote:

[...]
> Deze werkt bij mij wel
>
[snip]

Waarbij wéér een header-injection kwetsbaar script op het net geplaatst
wordt... Én gebruik van $_REQUEST én geen validatie op $email.

if (isset($_POST["email"])) {
// controleer of er linefeeds en/of carriage returns
// zijn ingegeven, aldanniet in de hexadecimale waarde
if (eregi("\r",$_POST["email"]) || eregi("\n",$_POST["email"]) ||
eregi("%0A",$_POST["email"]) || eregi("%0D",$_POST["email"]) ) {
die();
}
$email = trim($_POST["email"]);
// ga verder
}

Groeten,
Jan

--
no sig.

Erick T. Barkhuis
12/02/08, 08:05
Jan Reilink:
> Bozweb wrote:
>
> [...]
> > Deze werkt bij mij wel
> >
> [snip]
>
> Waarbij wéér een header-injection kwetsbaar script op het net geplaatst
> wordt... Én gebruik van $_REQUEST én geen validatie op $email.
>
> if (isset($_POST["email"])) {
> // controleer of er linefeeds en/of carriage returns
> // zijn ingegeven, aldanniet in de hexadecimale waarde
> if (eregi("\r",$_POST["email"]) || eregi("\n",$_POST["email"]) ||
> eregi("%0A",$_POST["email"]) || eregi("%0D",$_POST["email"]) ) {
> die();
> }

Zou je in plaats daarvan niet liever willen controleren op syntactische
juistheid van de input (in dit geval een mailadres)?
Het lijkt wat vreemd om slechts 1 aspect van onjuistheid te detecteren.

--
Erick

Rik Wasmus
12/02/08, 08:25
On Tue, 12 Feb 2008 07:55:17 +0100, Erick T. Barkhuis
<erick.usenet@ardane.c-o-m> wrote:

> Jan Reilink:
>> Bozweb wrote:
>>
>> [...]
>> > Deze werkt bij mij wel
>> >
>> [snip]
>>
>> Waarbij wéér een header-injection kwetsbaar script op het net geplaatst
>> wordt... Én gebruik van $_REQUEST én geen validatie op $email.
>>
>> if (isset($_POST["email"])) {
>> // controleer of er linefeeds en/of carriage returns
>> // zijn ingegeven, aldanniet in de hexadecimale waarde
>> if (eregi("\r",$_POST["email"]) || eregi("\n",$_POST["email"]) ||
>> eregi("%0A",$_POST["email"]) || eregi("%0D",$_POST["email"]) ) {
>> die();
>> }
>
> Zou je in plaats daarvan niet liever willen controleren op syntactische
> juistheid van de input (in dit geval een mailadres)?
> Het lijkt wat vreemd om slechts 1 aspect van onjuistheid te detecteren.

Hangt er van af. Je kunt natuurlijk friedl's totale regex erop los laten,
dat lijkt me behoorlijk overkill. Ik controleer meestal maar op 3 zaken:
1. Geen whitespace (zoals hierboven).
2. 1 @ (niet meer, niet minder)
3. Karakter(s) vóór en na de @.

Proberen emailadressen volledig te valideren is, gezien ze makkelijk
buiten het ascii formaat kunnen vallen, best lastig. Je zou zelfs een
socket kunnen openen naar de server, om te kijken of die bestaat
(controleer wel MX records, en val terug naar het standaard domein), en of
deze mail accepteerd aan de geadresseerde. Dat heeft best wat overhead, en
nog steeds geen uitsluitsel.
--
Rik Wasmus