Avatar billede amews_aj Nybegynder
21. december 2006 - 12:31 Der er 22 kommentarer og
1 løsning

Kontaktformular bliver udnyttet til spam

Jeg har et problem.
Denne kontaktformular bliver udnyttet til spam.
Jeg er klar over at jeg har visse alternativer til at stoppe dette, ved fx at lave sådan et tilfældigt genereret kode felt eller lignende, men det er jeg ikke interesseret i her og nu. Jeg er interesseret i hvorfor den kan blive udnyttet til spam.


$email = htmlentities($_POST['email']);
$navn = htmlentities($_POST['navn']);
$emne = htmlentities($_POST['emne']);
$tekst = htmlentities(str_replace("\n", "\r\n", $_POST['besked']));
$til = "minemail@mitdomæne.dk";

$headers = "From: $navn <$email>\n";
$headers .= "Reply-to: $email\n";
$headers .= "X-Sender: <$email>\n";
$headers .= "X-Mailer: $email\n";
$headers .= "X-Priority: 3\n";
$headers .= "Return-Path: <$email>\n";
mail("$til","$emne","$tekst","$headers")




Da jeg har brugt htmlentities() på alle felter, forstår jeg ikke de kan bruge den til spam.
De får på en eller anden måde emailen sendt til flere personer ved at tilføje til $til, men hvordan i alverden?
Hvis alle tags som < bliver lavet om til &lt; Hvordan kan de så få eksekveret en kode og komme bag om?

Håber I forstår problemet, ellers spørg.
På forhåndtak!
Avatar billede simplus Nybegynder
21. december 2006 - 13:42 #1
smid en preg ind istedet:

    if (!preg_match("/[a-z]/", $var) || !preg_match("/[0-9]/", $var)) {
        //indeholder andet end bogstaver og tal
    }

fx..

du kan så ændre den, jeg ved ikke hvilke tegn du vil tillade, men mit eksempel vil fjerne muligheden med sikkerhed. Dog er den ikke helt brugervenlig da man ikke kan bruge bindestreger og underscores fx.. dem kan du bare tilføje foroven!
Avatar billede amews_aj Nybegynder
21. december 2006 - 13:47 #2
Det skal ikke erstattes med et bestemt tegn, og at angive et tegn for hvert specielt tegn er jo ikke ret smart.
Desuden, hvorfor skulle det virke bedre end htmlentities()

Der skal være mulighed for at skrive beskeder indeholdende specielle tegn så som < > / " osv. Derfor duer forslaget umiddelbart ikke.
Avatar billede simplus Nybegynder
21. december 2006 - 13:47 #3
jeg tænkte på at du kunne gøre således:

    if (!eregi("^[A-Z0-9,._%-!?@&/()=+#]$", $var)) {
        //indeholder snavs
    }
Avatar billede simplus Nybegynder
21. december 2006 - 13:50 #4
Nu forstår jeg ikke helt hvad du mener med at det ikke skal erstattes. Det er jo netop det som htmlentities gør.. Det erstatter det til en kode der ser således ud for < og > : &lt; og &gt;

derfor kan du bruge denne reg.exp:

    $var = ereg_replace("<", "&lt;", $var);
    $var = ereg_replace(">", "&gt;", $var);
Avatar billede amews_aj Nybegynder
21. december 2006 - 14:08 #5
if (!eregi("^[A-Z0-9,._%-!?@&/()=+#]$", $var)) {
        //indeholder snavs
    }

Duer ikke, da folk skal have lov til at bruge de tegn. Det skal erstattes er deres html, hvilket htmlentities() gør. Derfor ser jeg ingen forskel i htmlentities() og din metode. Det er bare mere bøvlet.
Når det gør det samme, så kan det jo heller ikke stoppe spam-misbruget vel?
Avatar billede simplus Nybegynder
21. december 2006 - 14:12 #6
Jo, det burde det netop med det jeg gav hvis du nu lige prøver. Jeg bruger det selv og modtager aldrig spam - og har heller aldrig prøvet.

Vær opmærksom på at den sidste tjekker om den indeholder _ANDET_ end de tegn. Prøv mine metoder inden du koldt afslår dem :-)
Avatar billede amews_aj Nybegynder
21. december 2006 - 14:23 #7
Problemet ligger på en side som jeg ikke uden videre kan tillade mig at ændre på. Desuden tager det jo noget tid før jeg kan sige om den gør eller ej.

Selv modtager jeg heller aldrig spam, men jeg benytter kun htmlentities()

Jeg kan ikke se fordelen i dit script. Kan du ikke forklare hvad den gør anderledes.
Med seneste eksempel så skal man enten manuelt erstatte tegn, hvilket giver samme resultat, eller give en fejlmeddelelse, hvilket ikke duer da brugeren skal have lov til at skrive sådanne tegn.
Avatar billede showsource Seniormester
21. december 2006 - 14:40 #8
Det må vel også være i din headers at mail bliver sendt til andre.
Altså afsender email indeholder f.eks. mail@mail.dk \r\n Cc: anden@mail.dk\r\n

Du kan derfor tjekke på om feltet indeholder tegn for linieskift
Avatar billede amews_aj Nybegynder
21. december 2006 - 15:24 #9
Ehm, min emailvalidator gør så der kun kan stå
xxxxx@xxxxx.xx

\r\n vil ikke være muligt at indsætte
Avatar billede showsource Seniormester
21. december 2006 - 15:32 #10
well, din emailvalidator har vi jo ikke set!
Og du er sikker på det er scriptet du bruger som du viser os?
Altså det script som ligger på serveren er måske anderledes?
Avatar billede amews_aj Nybegynder
21. december 2006 - 15:38 #11
Yup, Den er taget direkte fra serveren, blot fjernet e-mailadressen

Emailvalidator:
if (!preg_match("/^([\w|\.|\-|_]+)@([\w||\-|_]+)\.([\w|\.|\-|_]+)$/i", $_POST['email'])) {
// bad email
}
Avatar billede leif Seniormester
21. december 2006 - 21:16 #12
Du siger at de kan bruge den til at sende til andre i $til ?
Avatar billede amews_aj Nybegynder
21. december 2006 - 21:22 #13
Nej, ved ikke hvordan de gør
Avatar billede leif Seniormester
21. december 2006 - 22:25 #14
Hvordan oplever du så at den bruges til Spam ? Er det fordi de sender dig spam eller har du meldinger fra andre ?
Avatar billede amews_aj Nybegynder
21. december 2006 - 22:46 #15
Modtager selv, og samtidig meldinger fra internetudbyder og webhotel.
Avatar billede amews_aj Nybegynder
02. januar 2007 - 18:32 #16
Flere forslag ?
Avatar billede htm Nybegynder
02. januar 2007 - 18:52 #17
Det er netop fordi det er tilladt at indtaste alle tegn, eks. \r og \n.

Netop disse 2 karakterer bruges som adskiller af de forskellige headers, og dermed kan de smide egne headers ind i mailen, som eks. to, cc og bcc.

Og det er ikke nok at sørge for at mailen ikke indholder disse tegn, det gælder alle felter der indgår i mailen.

Så sørg for at validere alle felter, det er bedst at sætte regler op om hvilke tegn der er tilladt på det enkelte felt.

Jeg har selv været ude for det, og så vidt jeg husker brugte de mit navnefelt eller mit kommentarfelt.
Avatar billede amews_aj Nybegynder
02. januar 2007 - 19:11 #18
er de også tilfældet selvom mailen jo sendes ved


$headers = "..........";

mail($..., $..., $..., $headers);

headers står jo for sig i mail(). Men kan man alligevel tilføje headers i selve teksten, hvor som helst?
Hvis ja, så er det nok det, som jeg ikke har tænkt på
Hvis ja, så smid svar... :)
Avatar billede htm Nybegynder
02. januar 2007 - 19:48 #19
I princippet ja, men jeg vil tro det går galt i dit navne felt - det bliver jo også brugt i dine headers.

Jeg har ikke bruge for point, jeg har ikke sagt noget andre ikke har nævnt. Giv point til dem.
Avatar billede amews_aj Nybegynder
02. januar 2007 - 19:55 #20
Nå ja selvfølgelig...
htmlentities() fjerner heller ikke \ så det kan godt passe... :)
Tak.

De andre har vel ikke nævnt dette direkte..?
Hvem mener du står til at have pointene ?
Avatar billede htm Nybegynder
02. januar 2007 - 20:28 #21
Du styrer selv hvem der skal have point, jeg har bare ikke brug for dem ;-)

Bare glad for at kunne hjælpe
Avatar billede amews_aj Nybegynder
03. januar 2007 - 12:51 #22
showsource du havde fat i det forkerte felt (afsendermail), men princippet var korrekt, så jeg synes du skal have point

smid svar...
Avatar billede showsource Seniormester
03. januar 2007 - 16:39 #23
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging