Avatar billede php_programmoer Nybegynder
08. december 2006 - 20:34 Der er 14 kommentarer og
1 løsning

En simpel Reg.Exp som skal fjerne skidt fra emailformular

Jeg skal bare have fjernet alle muligheder for at lave SQL injections og det synes jeg burde gøres med Reg.Exp, da jeg ikke har helt styr på det ville jeg gerne bede om at få det lavet herinde.

Til dem der ikke helt ved hvad SQL injections er så kan i læse kort om det her: http://www.fortconsult.net/artikler/060306.php#faq7
Avatar billede php_programmoer Nybegynder
08. december 2006 - 20:55 #1
Nu hvor jeg tænker over det, er der så overhovedet behov for at tjekke en tekst igennem når det alligevel skal sendes som en mail?
Ved ikke lige hvorfor jeg nævnte det med SQL injections når det ikke har spor med min problemstilling at gøre. Sry guys...
Avatar billede erikjacobsen Ekspert
08. december 2006 - 21:01 #2
Der findes også email-injections ;)

Uden at være en komplet liste, så et par forslag

1) Inddata som email-adresse, emne, etc, der indtastes i en <input type="textbox"> skal tjekkes for at være på een linie, hvis de skal bruges i en emails standard header. Ellers kan en hacker sætte et linieskift på, og så bestemmer han over indholdet af headeren. Fx. kan han sætte en Cc: på

2) Kroppen bør ikke ligne en MIME-krop - måske er det ligegyldigt, hvis du har styr på 1), men for en sikkerheds skyld. Jeg har ikke selv brugt dette, så jeg kan ikke lige sige dig hvordan du nemmest gør det.

3) ... der er sikkert mere...
Avatar billede php_programmoer Nybegynder
08. december 2006 - 21:07 #3
Aha, ja det er en god ide.

En ting som jeg synes er utrolig svært er at fjerne special tegn uden at det skal genere brugeren så han/hun ikke kan bruge almindelige tegn. Altså to bindestreger (--) kan jo bruges til at afslutte en query, er det relevant i denne sammenhæng? Har aldrig læst om emnet hvilket giver stof til eftertanke i mit hovede.
Jeg vil fx ikke fjerne brug af anførselstegn osv da det i visse tilfælde bruges i en mail, enda ret ofte. Så hvad vil du foreslå at jeg gør?

Udover det, vil jeg lige høre hvordan man kan sørge for at alt input er på én linie?

NB. er allerede igang med at læse om email-injections! :-)
Avatar billede php_programmoer Nybegynder
08. december 2006 - 21:14 #4
og kan funktioner som nl2br og htmlentities bruges til at løse mit "problem"?
Avatar billede erikjacobsen Ekspert
08. december 2006 - 21:17 #5
Finder du noget godt, så læg et link ;)

Hvad var det nu jeg gjorde ved 1) ?  Jo, jeg fjernede linieskift fra de felter, og får regelmæssigt sjove mails. Seneste i papirkurven så ud i retning af (lidt rettet for at beskytte de skyldige)

Subject: ountry am is uncooked, cured, dried, smoked or unsmoked
bcc: anxxxxxxxna@bluexxxxxxxxxw.com

Var den smuttet igennem, havde de sendt en mail via min mailformular, til en mig ubekendt person. Egentlig var det bare mig, der skulle have den.
Avatar billede erikjacobsen Ekspert
08. december 2006 - 21:19 #6
Alternativt kan man jo også bare lade være med at brugeren af mailformularen skriver noget i headeren. 

Jeg tror jeg fjernede linieskift med et regulært udtryk.
Avatar billede php_programmoer Nybegynder
08. december 2006 - 21:23 #7
Tjoh, der er da et brugbart link her: http://www.securephpwiki.com/index.php/Email_Injection
Den blev opsnappet i min søgen på google.

Dog, blev jeg lige interesseret og ville lige høre om nl2br og htmlentities kan løse mit "problem"?

Jeg vil lige tilføje at brugere ikke selv kan tilføje en header, de kan vælge imellem 5 sætninger i en rullemenu som indeholder 5 "lovlige" sætninger. Når de vælger en af dem så kommer den i headeren der ser således ud: Kontaktform - $det_man_valgte

Så det burde betyde at jeg ikke skal bekymre mig om mail injections, eller?

Det er i selve beskeden/mail-inholdet jeg spørger om hjælp til beskyttelse - tror jeg :-)
Avatar billede php_programmoer Nybegynder
08. december 2006 - 21:29 #8
Det eneste mine brugere har adgang til er at skrive selve beskeden.
Men jeg har lige fundet på en lidt bedre måde at gøre det hele på. Jeg tilføjer min mail via GDlib også kan de selv gøre resten via outlook.

Ideen med det hele var at de skulle kunne bestille noget, men det har jeg valgt at gøre på en hel anderledes og sikker måde.

Mig bekendt er du ikke den store point samler, men jeg er da villig til at gøre et forsøg på at give dig nogle alligevel :-)
Avatar billede erikjacobsen Ekspert
08. december 2006 - 21:35 #9
Hvis de 5 sætninger står i HTML-koden, kan enhver hacker jo skifte dem ud med noget andet, med linieskift. Dur ikke. Du må aldrig stole på noget, der kommer fra en bruger.
Nej nl2br og htmlentities er kun til at vise ting på en HTML-side - kan ikke bruges her.
Avatar billede php_programmoer Nybegynder
08. december 2006 - 21:36 #10
Det er bare iorden, er som sagt ny på området.
Kunne jeg få sneget et svar ud af dig?
Avatar billede erikjacobsen Ekspert
08. december 2006 - 21:37 #11
Godt link du fandt.
Avatar billede erikjacobsen Ekspert
08. december 2006 - 21:40 #12
Nej tak, jeg samler slet ikke på point.  Du kan:

<select name="s">
<option value="1">Hjemmebryg</option>
<option value="2">Score sætninger</option>
<option value="3">Fede mobiler</option>
</select>

og så i din kode (skitse med PHP)

if ($_POST['s']=='1') {
  $emne = 'Hjemmebryg';
} else if ($_POST['s']=='2') {
  $emne = 'Score sætninger';
} else if ($_POST['s']=='3') {
  $emne = 'Fede mobiler';
}
Avatar billede php_programmoer Nybegynder
08. december 2006 - 21:43 #13
Jep, det er præcis samme måde jeg har gjort det på.
Lige en sidste ting, der er intet galt i at skrive sin mail som en fuld sætning på sin hjemmeside, vel?

Altså istedet for at skulle skrive admin (a) site dot dk
kan man så ikke bare skrive admin@site.dk
Avatar billede erikjacobsen Ekspert
08. december 2006 - 21:52 #14
Jo, det er sikkert også galt. Igen er det meget nemt at skrive et regulært udtryk, som finder mulige emails. Om email-robotterne gør det, vides ikke, men de kan jo komme til det.  En smule bedre  admin<b>@</b>minside.her
Avatar billede php_programmoer Nybegynder
08. december 2006 - 22:03 #15
Jamen så siger jeg tak.
Ærgeligt for mig at du ikke tager imod point.
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
Kurser inden for grundlæggende programmering

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