/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Formmail - spørgsmål fra totalt nybegynder~
Fra : Buzzemand


Dato : 03-06-07 11:02

Hej,

Jeg bruger Surftown som webhotel. På en hjemmeside har jeg en
kontaktformular (www.virksundcentret.dk/kontakt.htm). For at få den til at
virke, skal jeg - iflg. Surftown - benytte nedenstående PHP script. Men jeg
kan ikke få det til at virke som jeg vil have det til.
Som det fremgår af hjemmesiden, har jeg flere felter i min formular end der
er lagt op til i script'et fra Surftown. Jeg kan godt få det til at virke,
ved at køre det som det er - men hvordan tilføjer jeg de ekstra form-felter
jeg har på min formular (adresse, postnr., by, telefonnr.)?

Håber der er nogen der kan hjælpe.

Mvh

Lars
-----------

Scriptet fra Surftown:


<?php

// Surftown formmail

// angiv modtagere af formmailen
// flere modtagere kan tilføjes som
// $modtagere[1] = "adresse@domain.dk"
// $modtagere[2] = "adresse2@domain.dk"
// osv.
$modtagere[0] = "";
//$modtagere[1] = "";

// succes og fejlsider
$succes = "tak.htm";
$fejl = "fejl.htm";

// standard tesktbokse er
// navn
// emailadresse
// emne
// tekst

// disse skal være "name" på de forskellige tekstbokse på html-siden
// f.eks. <input type="text" name="navn"></input>

// lav liste over modtagere
$mail_modtagere = implode(",", $modtagere);

// klargør parametre
$navn = sanitize($_POST['navn']);
$emailadresse = "From: " . sanitize($_POST['emailadresse']);
$emne = "Besked fra " . $navn . ": " . sanitize($_POST['emne']);
$tekst = $_POST['tekst'];

// send mail
$mail_status = mail($mail_modtagere, $emne, $tekst, $emailadresse);

if ($mail_status) {
header("Location: " . $succes);
} else {
header("Location: " . $fejl);
}

function sanitize($data) {
$safe_data = $data;

if ($pos = strpos($safe_data, "\n")) {
$safe_data = substr($safe_data, 0, $pos-1);
}
if ($pos = strpos($safe_data, "\r")) {
$safe_data = substr($safe_data, 0, $pos-1);
}
return $safe_data;
}
?>



 
 
Bertel Lund Hansen (03-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 03-06-07 11:23

Buzzemand skrev:

> ved at køre det som det er - men hvordan tilføjer jeg de ekstra form-felter
> jeg har på min formular (adresse, postnr., by, telefonnr.)?

> Scriptet fra Surftown:

> $navn = sanitize($_POST['navn']);

Her har du et eksempel på forbindelsen mellem et formularfelt og
en PHP-variabel. Formularen bruger navnet "navn", og i PHP får
man så fat i værdien med $_POST['navn'].

Hvis du har et formulatrfelt hvis navn er "adresse", kan du altså
aflæse værdien i PHP med $_POST['adresse'].

Scriptets funktion, sanitize(), kan erstattes af den indbyggede
PHP-funktion trim():

   $navn = trim($_POST['navn']);

Derfor kan den helt slettes fra scriptet.

Og det sikrer overhovedet ikke at brugerdata er i orden sådan som
det ellers antydes af variabelnavnet "$safe". Scriptet er
pivåbent for misbrug.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Johan Holst Nielsen (03-06-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 03-06-07 11:44

Bertel Lund Hansen wrote:
> Scriptets funktion, sanitize(), kan erstattes af den indbyggede
> PHP-funktion trim():
>
>    $navn = trim($_POST['navn']);
>
> Derfor kan den helt slettes fra scriptet.
>
> Og det sikrer overhovedet ikke at brugerdata er i orden sådan som
> det ellers antydes af variabelnavnet "$safe". Scriptet er
> pivåbent for misbrug.
>

Øøøh - sanitize() funktionen i scriptet sikrer sig mod injection - så
hvis det var mig der havde det script ville jeg *ikke* slette den... og
trim() kan ikke overtage dens rolle.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Bertel Lund Hansen (03-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 03-06-07 13:27

Johan Holst Nielsen skrev:

> Øøøh - sanitize() funktionen i scriptet sikrer sig mod injection -

Hvordan det? Hvad gør den ud over at fjerne retur og linjeskift
fra slutningen af strengen?

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Johan Holst Nielsen (03-06-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 03-06-07 14:50

Bertel Lund Hansen wrote:
> Johan Holst Nielsen skrev:
>
>> Øøøh - sanitize() funktionen i scriptet sikrer sig mod injection -
>
> Hvordan det? Hvad gør den ud over at fjerne retur og linjeskift
> fra slutningen af strengen?

http://www.php-security.org/MOPB/MOPB-34-2007.html
http://www.securephpwiki.com/index.php/Email_Injection

og sikkert flere steder...

De fjerner \n osv som kan lave injection i headeren (da værdierne der
ryger gennem sanitize bliver lagt i headeren).

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Bertel Lund Hansen (03-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 03-06-07 19:50

Johan Holst Nielsen skrev:

> De fjerner \n osv som kan lave injection i headeren (da værdierne der
> ryger gennem sanitize bliver lagt i headeren).

Du har ret; sanitize() kan fjerne nogle typer injektion.

Men hvad hvis man skriver sit navn som:

   ";system("cmd.exe format C:");

eller evt. indlægger et JavaScript (uden linjeskift)?

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Johan Holst Nielsen (03-06-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 03-06-07 19:56

Bertel Lund Hansen wrote:
> Johan Holst Nielsen skrev:
>
>> De fjerner \n osv som kan lave injection i headeren (da værdierne der
>> ryger gennem sanitize bliver lagt i headeren).
>
> Du har ret; sanitize() kan fjerne nogle typer injektion.
>
> Men hvad hvis man skriver sit navn som:
>
>    ";system("cmd.exe format C:");
>
> eller evt. indlægger et JavaScript (uden linjeskift)?

Injectionen i denne sammenhæng er at udnytte formularer til at udsende
spam. Prøv at google på injection php email på google og du kan læse
lidt om det... en hurtig søgning gav denne historie:

http://www.tonyspencer.com/2005/12/15/email-injection-exploit-through-a-php-contact-form/


--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Bertel Lund Hansen (03-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 03-06-07 20:14

Johan Holst Nielsen skrev:

> Injectionen i denne sammenhæng er at udnytte formularer til at udsende
> spam.

Hm. Sådan har jeg ikke brugt ordet, men jeg påstår ikke at min
opfattelse er autoriseret. Jeg opfattede "injektion" som at man
putter sin egen kode ind via formularen, uanset hvad koden skal
bruges til.

Det er da ikke specielt interessant at ens brugere får smidt hård
porno lige i synet når de går ind på en formularside - sådan som
jeg var ude for det for et års tid siden. Det muligt med det
script der er gengivet her.

> Prøv at google på injection php email på google og du kan læse
> lidt om det... en hurtig søgning gav denne historie:

Injektion er ikke et nyt begreb for mig.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Johan Holst Nielsen (03-06-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 03-06-07 20:17

Bertel Lund Hansen wrote:
> Johan Holst Nielsen skrev:
>
>> Injectionen i denne sammenhæng er at udnytte formularer til at udsende
>> spam.
>
> Hm. Sådan har jeg ikke brugt ordet, men jeg påstår ikke at min
> opfattelse er autoriseret. Jeg opfattede "injektion" som at man
> putter sin egen kode ind via formularen, uanset hvad koden skal
> bruges til.

Injektion er vel blot at der bliver tilføjet noget som tingene ikke er
beregnet til. Den normale betegnelse for det (alle de steder jeg har set
det) er email injection - altså at man tilføjer ekstra e-mail-adresser
til en formular således man kan sende spammails til alle mulige via en
formular på et website - ved at manipulere headerne (via injectionen).

> Det er da ikke specielt interessant at ens brugere får smidt hård
> porno lige i synet når de går ind på en formularside - sådan som
> jeg var ude for det for et års tid siden. Det muligt med det
> script der er gengivet her.

Øh, jeg kan ikke se hvorledes brugerne kan se hård porno via det script
som Surftown har givet vores kære trådstarter.

>> Prøv at google på injection php email på google og du kan læse
>> lidt om det... en hurtig søgning gav denne historie:
>
> Injektion er ikke et nyt begreb for mig.

Det var ikke for at forklare dig ordet injektion (ja - jeg ved du også
er aktiv i sproggruppen) - mere for at vise dig hvad der menes med
e-mail injection så jeg ikke skulle genopfinde beskrivelsen af den dybe
tallerken igen ;)

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Bertel Lund Hansen (04-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-06-07 09:10

Johan Holst Nielsen skrev:

> Øh, jeg kan ikke se hvorledes brugerne kan se hård porno via det script
> som Surftown har givet vores kære trådstarter.

Hvis man udskriver variablernes indhold på en HTMLside (f.eks.
som kontrol), og brugerens 'navn' indeholder "";)<script
type='txt/JavaScript'>[omstilling til en anden side]</script>",
så er det muligt.

Derudover er PHP i øvrigt heller ikke afhængig af linjeskift i
koden, så der er adgang til fuld PHP-programmering hvis man
begynder med ";) og undlader linjeskift.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Johan Holst Nielsen (04-06-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 04-06-07 18:29

Bertel Lund Hansen wrote:
> Johan Holst Nielsen skrev:
>
>> Øh, jeg kan ikke se hvorledes brugerne kan se hård porno via det script
>> som Surftown har givet vores kære trådstarter.
>
> Hvis man udskriver variablernes indhold på en HTMLside (f.eks.
> som kontrol), og brugerens 'navn' indeholder "";)<script
> type='txt/JavaScript'>[omstilling til en anden side]</script>",
> så er det muligt.
>
> Derudover er PHP i øvrigt heller ikke afhængig af linjeskift i
> koden, så der er adgang til fuld PHP-programmering hvis man
> begynder med ";) og undlader linjeskift.

Men ovenstående kode udsrkiver ikke data - det er noget helt andet. Der
skal man blot bruge htmlentities eller lign når man udskriver brugerdata
i f.eks. formularer.... så det hr intet med det script at gøre.

Omkring at PHP er afhængig af linjeskift fatter jeg ikke hvorfor du
bringer ind i diskussionen. Omkring fjernelsen af \n og \r så bedes du
lige bruge de 5 minutter det tager at læse de links igennem jeg har
givet i tråden.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Bertel Lund Hansen (04-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-06-07 18:52

Johan Holst Nielsen skrev:

> Men ovenstående kode udsrkiver ikke data - det er noget helt andet. Der
> skal man blot bruge htmlentities eller lign når man udskriver brugerdata
> i f.eks. formularer.... så det hr intet med det script at gøre.

Jeg har flere formularer hvor jeg præsenterer folks inddata for dem. Mange gør det inden afsendelsen og spørger brugeren om de er korrekte. Hvis man gør det, vil et indlejret (på den specielle måde) JavaScript blive udført hvis man ikke tager højde for det.

> Omkring at PHP er afhængig af linjeskift fatter jeg ikke hvorfor du
> bringer ind i diskussionen. Omkring fjernelsen af \n og \r så bedes du
> lige bruge de 5 minutter det tager at læse de links igennem jeg har
> givet i tråden.

Du hænger dig meget i problemer med masseudsendelse af e-mail.
Der er bare mange andre slags skadelig kode end
e-mail-afsendelse.

Hvis jeg ikke gætter forkert, kunne dette her 'navn' resultere i
at jeg selv fik en mail, og at scriptet troede at alt forløb
fejlfrit. Det er muligt at der er fejl i koden, men princippet
skulle være til at forstå.

Navn = "); $mail_status = mail('nospam@lundhansen.dk', 'Fusket mail afsendt', 'Mail afsendt fra webstedet www.virksundcentret.dk/kontakt.htm'); echo ("

Da man kan smugle et komplet PHP-program ind på den måde, er der
vide rammer for hvad man kan lave.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Johan Holst Nielsen (04-06-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 04-06-07 19:04

Bertel Lund Hansen wrote:
> Johan Holst Nielsen skrev:
>
>> Men ovenstående kode udsrkiver ikke data - det er noget helt andet. Der
>> skal man blot bruge htmlentities eller lign når man udskriver brugerdata
>> i f.eks. formularer.... så det hr intet med det script at gøre.
>
> Jeg har flere formularer hvor jeg præsenterer folks inddata for dem. Mange gør det inden afsendelsen og spørger brugeren om de er korrekte. Hvis man gør det, vil et indlejret (på den specielle måde) JavaScript blive udført hvis man ikke tager højde for det.

Jah - men det har intet med funktionen at gøre.

>> Omkring at PHP er afhængig af linjeskift fatter jeg ikke hvorfor du
>> bringer ind i diskussionen. Omkring fjernelsen af \n og \r så bedes du
>> lige bruge de 5 minutter det tager at læse de links igennem jeg har
>> givet i tråden.
>
> Du hænger dig meget i problemer med masseudsendelse af e-mail.
> Der er bare mange andre slags skadelig kode end
> e-mail-afsendelse.

ja - fordi du ville fjerne sanitize funktionen som forhindrede det.

> Hvis jeg ikke gætter forkert, kunne dette her 'navn' resultere i
> at jeg selv fik en mail, og at scriptet troede at alt forløb
> fejlfrit. Det er muligt at der er fejl i koden, men princippet
> skulle være til at forstå.

Nej - du kan få ANDRE til at få e-mail... f.eks. kunne der sendes e-mals
til mig fra formularer på din side - uden at du anede noget som helst om
det. Læs dog de links i stedet for at gætte...

> Navn = "); $mail_status = mail('nospam@lundhansen.dk', 'Fusket mail afsendt', 'Mail afsendt fra webstedet www.virksundcentret.dk/kontakt.htm'); echo ("
>
> Da man kan smugle et komplet PHP-program ind på den måde, er der
> vide rammer for hvad man kan lave.

Så læs dog de links i stedet for at gætte - så vi kan få stoppet denne
nonsens diskussion.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Bertel Lund Hansen (04-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-06-07 19:09

Johan Holst Nielsen skrev:

> Nej - du kan få ANDRE til at få e-mail...

Man kan lave et PHP-script der sender mails til adresser i et
array. Dette script kan skrives uden linjeskift. I den form kan
det indlejres i formularfeltet "navn" på den af mig angivne måde.
Det vil virke uafhængigt af om variablens indhold skrives ud
eller ej.

> Så læs dog de links i stedet for at gætte - så vi kan få stoppet denne
> nonsens diskussion.

Så forstå dog hvad jeg skriver.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Johan Holst Nielsen (04-06-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 04-06-07 19:20

Bertel Lund Hansen wrote:
> Johan Holst Nielsen skrev:
>
>> Nej - du kan få ANDRE til at få e-mail...
>
> Man kan lave et PHP-script der sender mails til adresser i et
> array. Dette script kan skrives uden linjeskift. I den form kan
> det indlejres i formularfeltet "navn" på den af mig angivne måde.
> Det vil virke uafhængigt af om variablens indhold skrives ud
> eller ej.

Det der er pointen i dette - er hvorvidt sanitize er nødvendig eller ej.
Det er det jeg skriver. Jeg skriver - sanitize ER nødvendig da den
hindrer at der bliver sendt mails til personer man ikke ønsker der
bliver sendt mails til jrf. de links jeg har givet.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Bertel Lund Hansen (04-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-06-07 22:50

Johan Holst Nielsen skrev:

>> Man kan lave et PHP-script der sender mails til adresser i et
>> array. Dette script kan skrives uden linjeskift. I den form kan
>> det indlejres i formularfeltet "navn" på den af mig angivne måde.
>> Det vil virke uafhængigt af om variablens indhold skrives ud
>> eller ej.

> Det der er pointen i dette - er hvorvidt sanitize er nødvendig eller ej.

Min pointe er at den er utilstrækkelig. Vi er helt enige om at
der bør spærres for misbrug.

> Det er det jeg skriver. Jeg skriver - sanitize ER nødvendig da den
> hindrer at der bliver sendt mails til personer man ikke ønsker der
> bliver sendt mails til jrf. de links jeg har givet.

Jeg har ellers lige givet dig en opskrift på hvordan man kan gøre
det *selv om* sanitize() bliver brugt.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Johan Holst Nielsen (05-06-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 05-06-07 08:14

Bertel Lund Hansen wrote:
>> Det er det jeg skriver. Jeg skriver - sanitize ER nødvendig da den
>> hindrer at der bliver sendt mails til personer man ikke ønsker der
>> bliver sendt mails til jrf. de links jeg har givet.
>
> Jeg har ellers lige givet dig en opskrift på hvordan man kan gøre
> det *selv om* sanitize() bliver brugt.

Nej ikke i det script vi omtaler her - eftersom der ikke bliver
udskrevet nogle data brugerdefinerede data til nogen som helst form.

Du startede med at replace med sanitize med trim() - nu begynder du at
snakke om sikring af data inden de outputtes til en form igen. Men det
er altså *ikke* nødvendig i scriptet eftersom det blot redirecter til en
statisk side alt efter fejl eller ej.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Mads Lie Jensen (04-06-2007)
Kommentar
Fra : Mads Lie Jensen


Dato : 04-06-07 22:17

On Mon, 4 Jun 2007 19:51:51 +0200, Bertel Lund Hansen
<unospamo@lundhansen.dk> wrote:

>Hvis jeg ikke gætter forkert, kunne dette her 'navn' resultere i
>at jeg selv fik en mail, og at scriptet troede at alt forløb
>fejlfrit. Det er muligt at der er fejl i koden, men princippet
>skulle være til at forstå.
>
>Navn = "); $mail_status = mail('nospam@lundhansen.dk', 'Fusket mail afsendt', 'Mail afsendt fra webstedet www.virksundcentret.dk/kontakt.htm'); echo ("
>
>Da man kan smugle et komplet PHP-program ind på den måde, er der
>vide rammer for hvad man kan lave.

Hvordan ville du få det "smuglet ind" via en webformular - altså, uden
at blande eval() ind i det?
Et lille eksempel-script ville være rart.

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

Geert Lund (05-06-2007)
Kommentar
Fra : Geert Lund


Dato : 05-06-07 20:04

Bertel Lund Hansen wrote:

> Navn = "); $mail_status = mail('nospam@lundhansen.dk', 'Fusket mail afsendt', 'Mail afsendt fra webstedet www.virksundcentret.dk/kontakt.htm'); echo ("
>
> Da man kan smugle et komplet PHP-program ind på den måde, er der
> vide rammer for hvad man kan lave.

Du mangler dog lige at redegøre for - hvor i det pågældende script
ovenstående php stump skulle blive afviklet/evalueret og dermed afsende
den mail?


--
Med venlig hilsen
Geert Lund,
www.GLD.dk

Buzzemand (05-06-2007)
Kommentar
Fra : Buzzemand


Dato : 05-06-07 09:06

Hej igen,

Tak for hjælpen - jeg har fået det til at virke. Men når jeg læser den debat
mit spørgsmål har affødt, bliver jeg da helt nervøs for at bruge det

Mvh

Lars

"Buzzemand" <buzzemand@gmail.com> skrev i en meddelelse
news:466291a4$0$8225$edfadb0f@dread14.news.tele.dk...
> Hej,
>
> Jeg bruger Surftown som webhotel. På en hjemmeside har jeg en
> kontaktformular (www.virksundcentret.dk/kontakt.htm). For at få den til at
> virke, skal jeg - iflg. Surftown - benytte nedenstående PHP script. Men
> jeg kan ikke få det til at virke som jeg vil have det til.
> Som det fremgår af hjemmesiden, har jeg flere felter i min formular end
> der er lagt op til i script'et fra Surftown. Jeg kan godt få det til at
> virke, ved at køre det som det er - men hvordan tilføjer jeg de ekstra
> form-felter jeg har på min formular (adresse, postnr., by, telefonnr.)?
>
> Håber der er nogen der kan hjælpe.
>
> Mvh
>
> Lars



Johan Holst Nielsen (05-06-2007)
Kommentar
Fra : Johan Holst Nielsen


Dato : 05-06-07 09:23

Buzzemand wrote:
> Hej igen,
>
> Tak for hjælpen - jeg har fået det til at virke. Men når jeg læser den debat
> mit spørgsmål har affødt, bliver jeg da helt nervøs for at bruge det

Der er intet at være nervøs for, som scriptet er bygget op :)

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste