/ 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
Beskyttelse imod injection
Fra : Lasse Hedegaard


Dato : 17-02-06 21:49

Hej!

Jeg troede jeg havde beskyttet mig mod injection, men nu har en
spammer netop været i gang - øv!

Hvordan beskytter jeg mig nemt og sikkert mod injection? Jeg har
kigget lidt på http://dk2.php.net/mail - og det er umiddelbart et hav
af forslag. Hvordan går jeg det lettest, smartest osv.?

Lige nu har jeg et hjemmebrygget script, som bl.a. giver hver
email/henvendelse et unikt nummer. Det er noget rodet lavet, og det
betyder så bl.a., at det nok ikke bare at kopiere en af de foreslåede
løsninger.

Hvorfor er der ikke "bare" indbygget denne form for beskyttelse i PHPs
mail-funktion? Det er måske ikke muligt?

Det skal siges, at den email der sendes, når formularen udfyldes,
ALTID skal sendes til den samme mailadresse - og kun denne ene. Det
kan måske gøre det nemmere, at finde en nem (og ikke mindst brugbar)
løsning?

Lige nu er formularen sat ud af drift. Jeg håber på hurtig respons, så
jeg kan få den online igen hurtigst muligt. På forhånd tak!

Venligst,
Lasse Hedegaard

--
http://www.simlock.dk/ - låsesmeden til din simlock!

simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

 
 
Martin Ploug (17-02-2006)
Kommentar
Fra : Martin Ploug


Dato : 17-02-06 23:11


"Lasse Hedegaard" <laxxe@nospam.dk> wrote in message
news:91dcv1plknkojdv7areran45u33f02tu8r@4ax.com...
> Hej!
>
> Jeg troede jeg havde beskyttet mig mod injection, men nu har en
> spammer netop været i gang - øv!
>
> Hvordan beskytter jeg mig nemt og sikkert mod injection? Jeg har
> kigget lidt på http://dk2.php.net/mail - og det er umiddelbart et hav
> af forslag. Hvordan går jeg det lettest, smartest osv.?
>
> Lige nu har jeg et hjemmebrygget script, som bl.a. giver hver
> email/henvendelse et unikt nummer. Det er noget rodet lavet, og det
> betyder så bl.a., at det nok ikke bare at kopiere en af de foreslåede
> løsninger.
>
> Hvorfor er der ikke "bare" indbygget denne form for beskyttelse i PHPs
> mail-funktion? Det er måske ikke muligt?
>
> Det skal siges, at den email der sendes, når formularen udfyldes,
> ALTID skal sendes til den samme mailadresse - og kun denne ene. Det
> kan måske gøre det nemmere, at finde en nem (og ikke mindst brugbar)
> løsning?
>
> Lige nu er formularen sat ud af drift. Jeg håber på hurtig respons, så
> jeg kan få den online igen hurtigst muligt. På forhånd tak!
>
> Venligst,
> Lasse Hedegaard
>
> --
> http://www.simlock.dk/ - låsesmeden til din simlock!
>
> simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
> og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

Hej Lasse

Jeg oprettede 15/2 her i php gruppen et indlæg/spørgsmå der hedder
"Send brugeroplysninger?". Dan Storm lavede et script til mig, som
vist nok skulle beskytte mod injection.

Funktionen ser sådan ud: '".mysql_real_escape_string($_POST['mail'])."'");

Prøv at kigge på Dans svar til mig.

Jeg ved ikke, om det er det du efterlyser?

Med venlig hilsen
Martin



Lasse Hedegaard (17-02-2006)
Kommentar
Fra : Lasse Hedegaard


Dato : 17-02-06 23:29

Hej Martin!

Det er ikke den samme form for injection vi taler om - mit problem har
intet med databaser at gøre.

Jeg tror dog jeg har fået løst mit problem (men det troede jeg også
sidst).

Jeg bruger den her:

if (preg_match("/(%0A|%0D|\\n+|\\r+)(content-type|to:|cc:|bcc:)/i",
$subject))
   {
   header("HTTP/1.0 403 Forbidden");
   echo("Spam protection - email not sent!");
   die;
   }

Venligst,
Lasse Hedegaard

--
http://www.simlock.dk/ - låsesmeden til din simlock!

simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

Bertel Lund Hansen (17-02-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 17-02-06 23:47

Lasse Hedegaard skrev:

>    echo("Spam protection - email not sent!");

Lad være med at oplyse afsenderen om at der ikke sendes mail.
Hvis det er en robot, kan det være det samme. Hvis der sidder en
idiot og tamper i tasterne, så lad ham for alt i verden blive ved
med det.

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

Lasse Hedegaard (18-02-2006)
Kommentar
Fra : Lasse Hedegaard


Dato : 18-02-06 00:31

Bertel Lund Hansen <nospamfilius@lundhansen.dk> skrev:

>Lad være med at oplyse afsenderen om at der ikke sendes mail.

Det gør jeg også snart...

>Hvis det er en robot, kan det være det samme. Hvis der sidder en
>idiot og tamper i tasterne, så lad ham for alt i verden blive ved
>med det.

Jeg vil blot sikre mig, at jeg ikke har overset et eller andet, og
fælden klapper - hvor der ikke er tale om spam. Hvis man får sådan en
besked, så ved man, at man skal forsøge igen, eller på anden vis...

Beskeden bliver fjernet i løbet af et par dage, hvis alt går vel.

Venligst,
Lasse Hedegaard

--
http://www.simlock.dk/ - låsesmeden til din simlock!

simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

Bent Stigsen (18-02-2006)
Kommentar
Fra : Bent Stigsen


Dato : 18-02-06 00:28

Lasse Hedegaard wrote:
> Hej Martin!
>
> Det er ikke den samme form for injection vi taler om - mit problem har
> intet med databaser at gøre.
>
> Jeg tror dog jeg har fået løst mit problem (men det troede jeg også
> sidst).
>
> Jeg bruger den her:
>
> if (preg_match("/(%0A|%0D|\\n+|\\r+)(content-type|to:|cc:|bcc:)/i",
> $subject))
>    {
>    header("HTTP/1.0 403 Forbidden");
>    echo("Spam protection - email not sent!");
>    die;
>    }

Kommer vist an på hvilken php-version man har, om det er nødvendigt at
checke subject. På min (php 5.0.4) bliver subject strippet for alle LF
og CRs af mail selv.

Hvad stopper du i mail-funktionens 4 parameter (additional_headers)?


/Bent

Lasse Hedegaard (18-02-2006)
Kommentar
Fra : Lasse Hedegaard


Dato : 18-02-06 00:39

Bent Stigsen <ngap@thevoid.dk> skrev:

>Kommer vist an på hvilken php-version man har, om det er nødvendigt at
>checke subject. På min (php 5.0.4) bliver subject strippet for alle LF
>og CRs af mail selv.

Den pågældende maskine kører PHP 4.4.2.

>Hvad stopper du i mail-funktionens 4 parameter (additional_headers)?

mail("FJERNET", "[#$count] $subject","$hilsen\n\n$ref\n$tilbud","From:
$fra\nX-GeoIP: ".$geoip."\nX-Originating-IP: ".$REMOTE_HOST."
[".$REMOTE_ADDR."]", "-fFJERNET");

Venligst,
Lasse Hedegaard

--
http://www.simlock.dk/ - låsesmeden til din simlock!

simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

Bent Stigsen (18-02-2006)
Kommentar
Fra : Bent Stigsen


Dato : 18-02-06 01:17

Lasse Hedegaard wrote:
[snip]
> mail("FJERNET", "[#$count] $subject","$hilsen\n\n$ref\n$tilbud","From:
> $fra\nX-GeoIP: ".$geoip."\nX-Originating-IP: ".$REMOTE_HOST."
> [".$REMOTE_ADDR."]", "-fFJERNET");

Hvis "$fra" er noget der kommer udefra, skal det checkes. Eller evt.
læg alt input fra brugeren ind i selve beskeden, og angiv selv værdier
til subject og afsender. Så er der ikke så meget (i.e. ingenting) at
checke for.

En anden ting/detalje, hvis det skal være helt efter standarden
(RFC2822), så skal linier afsluttes med "\r\n".


/Bent

Lasse Hedegaard (18-02-2006)
Kommentar
Fra : Lasse Hedegaard


Dato : 18-02-06 01:50

Bent Stigsen <ngap@thevoid.dk> skrev:

>Lasse Hedegaard wrote:
>[snip]
>> mail("FJERNET", "[#$count] $subject","$hilsen\n\n$ref\n$tilbud","From:
>> $fra\nX-GeoIP: ".$geoip."\nX-Originating-IP: ".$REMOTE_HOST."
>> [".$REMOTE_ADDR."]", "-fFJERNET");
>
>Hvis "$fra" er noget der kommer udefra, skal det checkes.

Det er det - det kigger jeg på.

>Eller evt. læg alt input fra brugeren ind i selve beskeden, og angiv selv
>værdier til subject og afsender. Så er der ikke så meget (i.e. ingenting)
>at checke for.

Så kan jeg jo ikke blot vælge reply/besvar i mit mailprogram, når jeg
vil svare på henvendelsen - eller er der noget jeg har misforstået?

>En anden ting/detalje, hvis det skal være helt efter standarden
>(RFC2822), så skal linier afsluttes med "\r\n".

Det må jeg få fikset.

Venligst,
Lasse Hedegaard

--
http://www.simlock.dk/ - låsesmeden til din simlock!

simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

Bent Stigsen (18-02-2006)
Kommentar
Fra : Bent Stigsen


Dato : 18-02-06 03:51

Lasse Hedegaard wrote:
> Bent Stigsen <ngap@thevoid.dk> skrev:
[snip]
>>Eller evt. læg alt input fra brugeren ind i selve beskeden, og angiv selv
>>værdier til subject og afsender. Så er der ikke så meget (i.e. ingenting)
>>at checke for.
>
> Så kan jeg jo ikke blot vælge reply/besvar i mit mailprogram, når jeg
> vil svare på henvendelsen - eller er der noget jeg har misforstået?

Heheh :) Indrømmet, kønt er det måske ikke, men jeg ville nu mene, at det er
et acceptabelt tradeoff. For magelighedens skyld kunne du måske skrive en
makro (hvis dit mailprogram kan det), der lige klippe-klistrer det op i
adressefeltet. Eller hvis du har din egen mailserver med procmail el.
lignende, kunne du sende det igennem dit eget filter, der tilføjer en
reply-to til headerne.


/Bent

[snip]

Lasse Hedegaard (20-02-2006)
Kommentar
Fra : Lasse Hedegaard


Dato : 20-02-06 03:49

Bent Stigsen <ngnix@thevoid.dk> skrev:

>Heheh :) Indrømmet, kønt er det måske ikke, men jeg ville nu mene, at det er
>et acceptabelt tradeoff. For magelighedens skyld kunne du måske skrive en
>makro (hvis dit mailprogram kan det), der lige klippe-klistrer det op i
>adressefeltet. Eller hvis du har din egen mailserver med procmail el.
>lignende, kunne du sende det igennem dit eget filter, der tilføjer en
>reply-to til headerne.

Det bliver noget hø efter min mening.

I øvrigt virker mit "filter" åbenbart ikke godt nok. Hvad er det lige
ved nedenstående, der ikke er korrekt?

if (preg_match("/(%0A|%0D|\\n+|\\r+)(content-type|to:|cc:|bcc:)/i",
$subject_and_from)) { skæld ud! }

Venligst,
Lasse Hedegaard

--
http://www.simlock.dk/ - låsesmeden til din simlock!

simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

Lasse Hedegaard (20-02-2006)
Kommentar
Fra : Lasse Hedegaard


Dato : 20-02-06 04:05

Lasse Hedegaard <laxxe@nospam.dk> skrev:

>I øvrigt virker mit "filter" åbenbart ikke godt nok. Hvad er det lige
>ved nedenstående, der ikke er korrekt?
>
>if (preg_match("/(%0A|%0D|\\n+|\\r+)(content-type|to:|cc:|bcc:)/i",
>$subject_and_from)) { skæld ud! }

Flot Lasse! Det er åbenbart en helt anden fil, end den jeg sidder og
retter i, spammerne bruger! Det er en gammel fil, som blev brugt
tidligere - og spammerne har åbenbart opsamlet informationerne før jeg
gik væk fra at bruge denne.

Fikse fikse, og nu krydser jeg fingre, og håber det løser problemet.

Venligst,
Lasse Hedegaard

--
http://www.simlock.dk/ - låsesmeden til din simlock!

simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

Bent Stigsen (20-02-2006)
Kommentar
Fra : Bent Stigsen


Dato : 20-02-06 18:16

Lasse Hedegaard wrote:
> Bent Stigsen <ngnix@thevoid.dk> skrev:
>
>>Heheh :) Indrømmet, kønt er det måske ikke, men jeg ville nu mene, at det er
>>et acceptabelt tradeoff. For magelighedens skyld kunne du måske skrive en
>>makro (hvis dit mailprogram kan det), der lige klippe-klistrer det op i
>>adressefeltet. Eller hvis du har din egen mailserver med procmail el.
>>lignende, kunne du sende det igennem dit eget filter, der tilføjer en
>>reply-to til headerne.
>
> Det bliver noget hø efter min mening.

Tjo, til foremålet måske, men jeg mente det skam alvorligt, det med at
bare lægge det hele i message-body.
De umiddelbare fordele er, at injection slet ikke er mulig, og du får
et simplere mail-script fordi check slet ikke er nødvendigt. Når du er
i en situation hvor du tvivler på dit injection check, synes jeg det
er et fornuftigt udgangspunkt.

Det er selvfølgelig et temperamentsspørgsmål, og afhængig af antallet
af mails, om man bryder sig om ulemperne der taler imod, som fx. at
der i første omgang ikke skelnes mellem spamforsøg og
kundehenvendelse, og som du er inde på, at ved besvarelse skal
afsender aflæses fra besked felt.

Personligt har jeg det lidt sådan, at gå efter det sikre først,
bagefter kig på hvordan gener kan filtreres fra eller afhjælpes.
Når du lukker alt igennem, kan du direkte se hvad problemet er, og du
behøver ikke gætte dig frem til hvad de har gjort for at få mails'ene
sendt ud i verden istedet for kun til dig.

> I øvrigt virker mit "filter" åbenbart ikke godt nok. Hvad er det lige
> ved nedenstående, der ikke er korrekt?
>
> if (preg_match("/(%0A|%0D|\\n+|\\r+)(content-type|to:|cc:|bcc:)/i",
> $subject_and_from)) { skæld ud! }

"%0A" og "%0D" har ikke nogen speciel mening i mail-headers, og du er
i det hele taget ikke er interesseret i terminering af en linie uanset
hvad der kommer efter, så som Dan også foreslår, check kun på det.

Udover med ereg, kan det også gøres med preg_match("/\\r|\\n/", ...
(eller strpos)


/Bent

Lasse Hedegaard (20-02-2006)
Kommentar
Fra : Lasse Hedegaard


Dato : 20-02-06 19:17

Bent Stigsen <ngap@thevoid.dk> skrev:

>Tjo, til foremålet måske, men jeg mente det skam alvorligt, det med at
>bare lægge det hele i message-body.
>De umiddelbare fordele er, at injection slet ikke er mulig, og du får
>et simplere mail-script fordi check slet ikke er nødvendigt. Når du er
>i en situation hvor du tvivler på dit injection check, synes jeg det
>er et fornuftigt udgangspunkt.

Jeg tror problemet er løst nu. Grunden til der ikke rigtig var noget
der ændrede sig, var simpelthen at spammerne brugte et andet script,
end det jeg sad og rettede i - flot Lasse!

>"%0A" og "%0D" har ikke nogen speciel mening i mail-headers, og du er
>i det hele taget ikke er interesseret i terminering af en linie uanset
>hvad der kommer efter, så som Dan også foreslår, check kun på det.

Det er også det jeg gør lige nu - og i det rigtige script! Selvom der
kun er én der er blevet fanget*, så ser det heller ikke ud til, at der
blevet udsendt spam.

>Udover med ereg, kan det også gøres med preg_match("/\\r|\\n/", ...
>(eller strpos)

Jeg tror jeg venter lidt med at pille/optimere - men tak.

* Den pågældende IP-adresse er automatisk blevet "bannet", og jeg vil
i øvrigt få en mail, hvis der kommer besøg fra den pågældende adresse
igen - det har der underligt nok ikke været. Jeg er klar over, at
spammerne bruger mange maskiner - men der har tilsyneladende ikke
været andre forsøg end dette ene (siden i nat).

Venligst,
Lasse Hedegaard

--
http://www.simlock.dk/ - låsesmeden til din simlock!

simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

Mads Lie Jensen (20-02-2006)
Kommentar
Fra : Mads Lie Jensen


Dato : 20-02-06 18:53

On Sat, 18 Feb 2006 01:17:21 +0100, Bent Stigsen <ngap@thevoid.dk>
wrote:

>Hvis "$fra" er noget der kommer udefra, skal det checkes. Eller evt.
>læg alt input fra brugeren ind i selve beskeden, og angiv selv værdier
>til subject og afsender. Så er der ikke så meget (i.e. ingenting) at
>checke for.

Hvis man mailer til en hard-coded adresse i sit script og lige sørger
for at der er en tom linie før man indsætter indholdet indtastet på
websiden i mailen, så behøver man ganske rigtigt ikke tjekke for
spamforsøg - så vil det ikke være muligt at spamme via den formular.

Men det afholder bare ikke spammere fra at forsøge alligevel.
Jeg har haft en "kontakt webmaster"-formular på en side som sendte
mailen ala:
$body="Mail fra webmaster-formular:\n\n" . $_POST['besked'];
mail("test@gartneriet.invalid", "Besked til webmaster", $body);

Der var ikke noget tjek af inputtet fra $_POST['besked']. Inden der kom
det blev der de sidste par dage forsøgt omkring 300 gange at spamme - om
dagen! Mange gange med flere tusinde emailadresser pr. forsøg.

Intet af dette blev sendt ud, til gengæld havnede det i webmasterens
indbakke - det var han pænt træt af skal jeg hilse og sige.

I princippet kan alt der gives videre til mail()-funktionen bruges til
spam-forsøg, så tjek alt inden der sendes noget.

Jeg endte med at lave en funktion som:
function spam_attempt($string) {
   if (preg_match(
      "/^\s*bcc:|^\s*cc:|^\s*from:|^\s*subject:|^\s*to:" .
      "|^\s*content-type:|^\s*content-transfer-encoding:" .
      "|^\s*content-disposition:/mi"
      , $string)) {
      return true;
   }
   return false;
}

Den fanger alle linier som minder om noget der kunne være en mailheader.

Alt indput fra webformularen kører gennem denne inden det godtages og
forsøges sendt.

Om den er perfekt, sikkert ikke. Men webmasteren får i hvert fald ikke
længere alle disse spam-forsøg i sin indbakke.

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403

Gartneriet - nu ny indpakning (delvist i hvert fald): http://www.gartneriet.dk/

Lasse Hedegaard (20-02-2006)
Kommentar
Fra : Lasse Hedegaard


Dato : 20-02-06 19:12

Mads Lie Jensen <mads@gartneriet.dk> skrev:

>Hvis man mailer til en hard-coded adresse i sit script og lige sørger
>for at der er en tom linie før man indsætter indholdet indtastet på
>websiden i mailen, så behøver man ganske rigtigt ikke tjekke for
>spamforsøg - så vil det ikke være muligt at spamme via den formular.

Bruger man ikke altid det her med en tom linie? Ellers er der vel
stadig tale om headers.

I den pågældende formular, der kan/skal indtastes tre ting: Subject,
from og body.

Venligst,
Lasse Hedegaard

--
http://www.simlock.dk/ - låsesmeden til din simlock!

simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

Bertel Lund Hansen (20-02-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 20-02-06 20:43

Lasse Hedegaard skrev:

> Bruger man ikke altid det her med en tom linie? Ellers er der vel
> stadig tale om headers.

Ja, sådan siger definitionen. Alt det første er headers lige til
der optræder en tom linje. Resten er brødtekst.

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

Mads Lie Jensen (21-02-2006)
Kommentar
Fra : Mads Lie Jensen


Dato : 21-02-06 08:14

On Mon, 20 Feb 2006 20:42:47 +0100, Bertel Lund Hansen
<nospamfilius@lundhansen.dk> wrote:

>> Bruger man ikke altid det her med en tom linie? Ellers er der vel
>> stadig tale om headers.
>
>Ja, sådan siger definitionen. Alt det første er headers lige til
>der optræder en tom linje. Resten er brødtekst.

Php indsætter selv denne tomme linie kan jeg nu se - det troede jeg ikke
den gjorde.


--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403

Gartneriet - nu ny indpakning (delvist i hvert fald): http://www.gartneriet.dk/

Bertel Lund Hansen (21-02-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 21-02-06 09:53

Mads Lie Jensen skrev:

> Php indsætter selv denne tomme linie kan jeg nu se - det troede jeg ikke
> den gjorde.

Det er den da pisket til når den bilder folk ind at den kan holde
headerne adskilt fra brødteksten. Uden en tom linje ville det
hele blive til (misdannede) headere.

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

Mads Lie Jensen (21-02-2006)
Kommentar
Fra : Mads Lie Jensen


Dato : 21-02-06 10:46

On Tue, 21 Feb 2006 09:52:48 +0100, Bertel Lund Hansen
<nospamfilius@lundhansen.dk> wrote:

>> Php indsætter selv denne tomme linie kan jeg nu se - det troede jeg ikke
>> den gjorde.
>
>Det er den da pisket til når den bilder folk ind at den kan holde
>headerne adskilt fra brødteksten. Uden en tom linje ville det
>hele blive til (misdannede) headere.

Selvfølgelig - ejg har vist ikek helt haft hovedet med mig
(Og fingrene fungerer heller ikke helt synkront kan jeg se ....)

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403

Gartneriet - nu ny indpakning (delvist i hvert fald): http://www.gartneriet.dk/

Bent Stigsen (22-02-2006)
Kommentar
Fra : Bent Stigsen


Dato : 22-02-06 03:54

Mads Lie Jensen wrote:
[snip]
> Men det afholder bare ikke spammere fra at forsøge alligevel.
> Jeg har haft en "kontakt webmaster"-formular på en side som sendte
> mailen ala:
> $body="Mail fra webmaster-formular:\n\n" . $_POST['besked'];
> mail("test@gartneriet.invalid", "Besked til webmaster", $body);
>
> Der var ikke noget tjek af inputtet fra $_POST['besked']. Inden der kom
> det blev der de sidste par dage forsøgt omkring 300 gange at spamme - om
> dagen! Mange gange med flere tusinde emailadresser pr. forsøg.
>
> Intet af dette blev sendt ud, til gengæld havnede det i webmasterens
> indbakke - det var han pænt træt af skal jeg hilse og sige.

Piveskid :)
Dem hvor jeg har mail-server hos besluttede pludseligt, at nu skulle
de tilbyde Spam-detection med et eller andet fancy system. Global
kill-level = 20, ... DELETED.
Ok, næsten. Hvis vi mente vi ikke havde fået en mail, kunne vi bare
sende en mail, og bede dem om at fiske den frem. Så er det jo bare
lige, at ved man hvad man mangler, er det nok nemmere at få det sendt
igen ad anden vej. Og ved man ikke hvad man mangler,... tjaa, bare
ærgeligt.

Jeg *bad* venligst om at få lov til at få alt min spam, som de trods
alt godt ville tilbyde, men uden rating fra deres system, så man meget
belejligt ikke kunne vurdere om kill-level 20 var en fornuftig værdi.

/Bent

[snip]

Dan Storm (19-02-2006)
Kommentar
Fra : Dan Storm


Dato : 19-02-06 18:31

Lasse Hedegaard skrev:
> Hvordan beskytter jeg mig nemt og sikkert mod injection? Jeg har
> kigget lidt på http://dk2.php.net/mail - og det er umiddelbart et hav
> af forslag. Hvordan går jeg det lettest, smartest osv.?

Den mest simple måde, men som også virker effektivt (uden en masse
omskrivning):

<?php
$fra=$_POST["fra"];
if (eregi("\r",$fra) || eregi("\n",$fra)){
die("Why ?? :(");
}
?>

Den lidt mere effektive med mod_security:
SecFilterSelective ARGS_VALUES "\n[[:space:]]*(to|bcc|cc)[[:space:]]*:.*@"


Benyt dig af begge og du bør være helt fri for det.

Du bør ikke benytte dig af brugerinputs *efter* "From:".
På den måde er du igen på et mere sikkert plan.

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Lasse Hedegaard (20-02-2006)
Kommentar
Fra : Lasse Hedegaard


Dato : 20-02-06 03:52

Dan Storm <shadyz@_REMOVETHIS_err0r.dk> skrev:

>Den mest simple måde, men som også virker effektivt (uden en masse
>omskrivning):
>
><?php
> $fra=$_POST["fra"];
> if (eregi("\r",$fra) || eregi("\n",$fra)){
> die("Why ?? :(");
> }
> ?>

Jeg forsøger, tak! Det ser jo ganske simpelt ud. Jeg har set ganske
avancerede scripts, og "mistænker" af samme grund dit script for at
ikke at være skudsikkert. Fortæl mig meget gerne, at jeg tager fejl :)

>Den lidt mere effektive med mod_security:
>SecFilterSelective ARGS_VALUES "\n[[:space:]]*(to|bcc|cc)[[:space:]]*:.*@"

Kan jeg få dig til at forklare lidt mere? Jeg ved min udbyder kører
mod_security, måske kunne de overtales til at indsætte linien - men
det er jo rart at vide, hvad der helt præcist sker.

>Benyt dig af begge og du bør være helt fri for det.

Af ren interesse: Det er ikke "nok" med den ene?

>Du bør ikke benytte dig af brugerinputs *efter* "From:".
>På den måde er du igen på et mere sikkert plan.

Jeg er ikke sikker på, at jeg forstår dig. Hvad med selve bodyen? Der
skal jo gerne stå noget i mailen :)

Venligst,
Lasse Hedegaard

--
http://www.simlock.dk/ - låsesmeden til din simlock!

simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

Dan Storm (20-02-2006)
Kommentar
Fra : Dan Storm


Dato : 20-02-06 19:57

Lasse Hedegaard skrev:
> Jeg forsøger, tak! Det ser jo ganske simpelt ud. Jeg har set ganske
> avancerede scripts, og "mistænker" af samme grund dit script for at
> ikke at være skudsikkert. Fortæl mig meget gerne, at jeg tager fejl :)
Det ene script kan være lige så smart som det andet.
Mange af de scripts du finder vil være multifunktionelle forstået på den
måde at den tager højde for en masse situationer og variabler som langt
fra størstedelen af almene brugere nogensinde vil få brug for.
Løs problemet hvor det opstår og ikke andre steder, så er det nemmere at
selv finde ud af.

Igen, så opstår problemet med injection, fordi personen som benytter sig
af at sende med CC og BCC. Dette gøres ved at oprette nye linier eller
_line feed_(\r\n eller hex 0x0A) som gør at SMTP serveren parser disse
linier som havde du selv oprettet dem - fortalt i grove træk.




> Kan jeg få dig til at forklare lidt mere? Jeg ved min udbyder kører
> mod_security, måske kunne de overtales til at indsætte linien - men
> det er jo rart at vide, hvad der helt præcist sker.
mod_security kan gøre den herlige ting at scanne dine $_GET's og
$_POST's for eventuelle BCC, CC og TO linierne. Den lille stump kode gør
at mod_security ganske enkelt filtrerer disse fra. Du skal så ikke tænke
på om dit script so kan sende mails, for det er jo kun $_REQUEST's den
scanner.

> Af ren interesse: Det er ikke "nok" med den ene?
Jo! Jeg vil anbefale mod_security da den er den mest sikre.

> Jeg er ikke sikker på, at jeg forstår dig. Hvad med selve bodyen? Der
> skal jo gerne stå noget i mailen :)
Den måde du har sat din form op på har ikke noget med mail() funktionen
at gøre. Når jeg skriver at brugerne ikke bør have mulighed for at
skrive noget til den header der angiver hvem der sender mailen. Dermed
er det underforstået at *AL* data som du ikke ønsker vil skulle placeres
efter injection punktet.


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Lasse Hedegaard (20-02-2006)
Kommentar
Fra : Lasse Hedegaard


Dato : 20-02-06 03:57

For at finde ud af, hvad spammerne præcis gør, så forsøger jeg at lave
det sådan, at jeg får tilsendt en email, når der gøres forsøg på at
spamme.

Jeg ønsker så mange oplysninger som muligt - dvs. alle variabler osv.
Er der en smart, hurtig og nem måde at gøre dette på?

Jeg har forsøgt at kigge i loggen fra Apache, men der står ikke rigtig
noget brugbart (form method="post").

Venligst,
Lasse Hedegaard

--
http://www.simlock.dk/ - låsesmeden til din simlock!

simlock.dk fylder 5 år til marts. Tilmeld dig nyhedsbrevet,
og få gode fødselsdagstilbud - http://www.simlock.dk/nyheder/

Bertel Lund Hansen (20-02-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 20-02-06 04:59

Lasse Hedegaard skrev:

> Jeg ønsker så mange oplysninger som muligt - dvs. alle variabler osv.
> Er der en smart, hurtig og nem måde at gøre dette på?

Det ved jeg ikke. Jeg bruger dette:

   // Tjek på brugeren:
   $user_agent = $_SERVER['HTTP_USER_AGENT'];
   $ip = $_SERVER['REMOTE_ADDR'];
   $port = $_SERVER['REMOTE_PORT'];
   $hostname = gethostbyaddr($ip);
   $idag=date('d/m-Y');
   $nu=date('H:i:s');
   $tjekinfo=
      "User_agent: $user_agent\n".
      "IP: $ip\n".
      "Port: $port\n".
      "Hostname: $hostname\n".
      "Dato: $idag Tid: $nu\n".
      "Input: $newentry\n\n";

$newentry indeholder alt det som personen har skrevet.

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

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste