/ 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
Bliver spammet fra min egen kontaktformula~
Fra : Mads Gildberg


Dato : 11-09-05 08:55

Jeg har lavet en kontaktformular, hvor indholdet af formularen bliver sendt
til mig i en e-mail. Scriptet er baseret på PERFECT feedback.php lavet af
Dem T. Pilafian (http://www.centerkey.com/php).

Jeg har ændret og tilføjet lidt til scriptet, men det virker fint. Problemet
er, at jeg er begyndt at få en masse spam mails, som tilsyneladende er sendt
via feedback.php scriptet.

Hvordan kan jeg lave scriptet "spam-proof", så jeg kan slippe for alle de
mails? Kan man f.eks. kun tillade at scriptet bliver kaldt fra én bestemt
side?



Her er først feedback.php:

De tre første linier har jeg lavet for, at prøve at stoppe misbruget, men
det har ikke hjulpet.


<?
// based on the PERFECT feedback.php by Center Key Software
(www.centerkey.com)

$Besked = @$_POST['besked'];
if(!isset($Besked) || ($Besked==""))
exit;

$Name = @$_POST['navn'];
$Email = @$_POST['email'];

// Configuration Settings
if(!isset($Email) || (isset($Email)&&($Email=="")))
$SendFrom = "Form Feedback <feedback@hojegladsaxe.dk>";
else {
if(isset($Name) && ($Name!=""))
$SendFrom = "$Name <$Email>";
else
$SendFrom = $Email;
}

// $SendFrom = "Form Feedback <feedback@hojegladsaxe.dk>";
$SendTo = "info@hojegladsaxe.dk";
// $SendTo = "mug@fvst.dk";
$SubjectLine = "Besked skrevet online på www.hojegladsaxe.dk";
$ThanksURL = "takmail.html"; //confirmation page
$Divider = "----------------------------------------";

// Build Message Body from Web Form Input
$MsgBody = "Indhold af formular afsendt fra
www.hojegladsaxe.dk:\n$Divider\n";

foreach ($_POST as $Field=>$Value)
$MsgBody .= "$Field: $Value\n";

$MsgBody .= "$Divider\nip-adresse: $REMOTE_ADDR - host: " .
@gethostbyaddr($REMOTE_ADDR);
$MsgBody .= "\nbrowser: $HTTP_USER_AGENT\n";
$MsgBody = htmlspecialchars($MsgBody); //make content safe

$MsgHeaders = "From: $SendFrom\r\n";
$MsgHeaders .= "MIME-Version: 1.0\r\n";
$MsgHeaders .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$MsgHeaders .= "X-Mailer: PHP/" . phpversion();

// Send E-Mail and Direct Browser to Confirmation Page
mail($SendTo, $SubjectLine, $MsgBody, $MsgHeaders);
header("Location: $ThanksURL");
?>



Her er den HTML, som kalder scriptet:

(Kan ses i aktion på www.hojegladsaxe.dk/kontakt.html)


<form method="post" action="feedback.php" onSubmit="return
checkForm(this);">
<table>
<tr>
<td valign="top">Dit navn:</td>
<td valign="top"><input type="text" name="navn" size="40"
class="textbox"></td>
</tr>
<tr>
<td valign="top">Din e-mail adresse:</td>
<td valign="top"><input type="text" name="email" size="30"
class="textbox"></td>
</tr>
<tr>
<td valign="top">Emne:</td>
<td valign="top"><select size="1" name="emne" class="textbox">
<option selected>Vælg et emne</option>
<option value="Kommentar">Kommentar til hjemmesiden</option>
<option value="Fejl">Fejl på hjemmesiden</option>
<option value="Spørgsmål">Spørgsmål</option>
<option value="Andet">Andet</option>
</select></td>
</tr>
<tr>
<td valign="top">Besked:</td>
<td valign="top"><textarea name="besked" cols="49" rows="6"
class="textbox"></textarea></td>
</tr>
<tr>
<td valign="top">&nbsp;</td>
<td valign="top"><br>
<input type="submit" value="Send besked" class="knap">
<input type="reset" value="Slet alle felter"
class="knap"></td>
</tr>
</table>
</form>



Og til sidst et eksempel på de mails jeg får:


-----Oprindelig meddelelse-----
Fra: plb@hojegladsaxe.dk [mailto:plb@hojegladsaxe.dk]
Sendt: 11. september 2005 03:11
Til: info@hojegladsaxe.dk
Emne: Besked skrevet online på www.hojegladsaxe.dk

Indhold af formular afsendt fra www.hojegladsaxe.dk:
----------------------------------------
besked: plb@hojegladsaxe.dk
Content-Type: multipart/mixed;
boundary=&quot;===============0641542150==&quot;
MIME-Version: 1.0
Subject: b123f231
To: plb@hojegladsaxe.dk
bcc: jrubin3546@aol.com
From: plb@hojegladsaxe.dk

This is a multi-part message in MIME format.

--===============0641542150==
Content-Type: text/plain; charset=&quot;us-ascii&quot;
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

kkclqew
--===============0641542150==--

email: plb@hojegladsaxe.dk
navn: plb@hojegladsaxe.dk
----------------------------------------
ip-adresse: 67.109.66.254 - host: 67.109.66.254.ptr.us.xo.net
browser:



Er der nogen, der har et forslag til, hvordan jeg kan komme disse
irriterende mails til livs?

Med venlig hilsen
Mads Gildberg
(mgildberg AT hotmail DOT com)



 
 
Mads Gildberg (11-09-2005)
Kommentar
Fra : Mads Gildberg


Dato : 11-09-05 10:44

Har lige set Nederbasse's indlæg. Det er næsten samme problem, så måske
nogen har en løsning, som kan hjælpe os begge.

Mvh. Mads


"Mads Gildberg" <mgildbergREMTHIS@hotmail.com> skrev i en meddelelse
news:4323fb85$0$78280$157c6196@dreader1.cybercity.dk...
> Jeg har lavet en kontaktformular, hvor indholdet af formularen bliver
> sendt til mig i en e-mail. Scriptet er baseret på PERFECT feedback.php
> lavet af Dem T. Pilafian (http://www.centerkey.com/php).
>
> Jeg har ændret og tilføjet lidt til scriptet, men det virker fint.
> Problemet er, at jeg er begyndt at få en masse spam mails, som
> tilsyneladende er sendt via feedback.php scriptet.



Jacob Atzen (11-09-2005)
Kommentar
Fra : Jacob Atzen


Dato : 11-09-05 11:20

On 2005-09-11, Mads Gildberg <mgildbergREMTHIS@hotmail.com> wrote:
> Jeg har lavet en kontaktformular, hvor indholdet af formularen bliver sendt
> til mig i en e-mail. Scriptet er baseret på PERFECT feedback.php lavet af
> Dem T. Pilafian (http://www.centerkey.com/php).
>
> Jeg har ændret og tilføjet lidt til scriptet, men det virker fint. Problemet
> er, at jeg er begyndt at få en masse spam mails, som tilsyneladende er sendt
> via feedback.php scriptet.
>
> Hvordan kan jeg lave scriptet "spam-proof", så jeg kan slippe for alle de
> mails? Kan man f.eks. kun tillade at scriptet bliver kaldt fra én bestemt
> side?

Jeg forstår ikke rigtig, hvordan du kan modtage multipart mails fra
systemet, når det så vidt jeg kan se kun afsender singlepart. Er du
sikker på afsenderen er systemet? Det burde du kunne se i mailens
headere.

--
Med venlig hilsen
- Jacob Atzen

Geert Lund (11-09-2005)
Kommentar
Fra : Geert Lund


Dato : 11-09-05 12:12

Jacob Atzen wrote:

> Jeg forstår ikke rigtig, hvordan du kan modtage multipart mails fra
> systemet, når det så vidt jeg kan se kun afsender singlepart. Er du
> sikker på afsenderen er systemet? Det burde du kunne se i mailens
> headere.

Der laves garanteret en del fusk med headers gennem scriptet. Det er
meget brugt for tiden. Altså at spammere fusker med dårligt skrevede forms.

Kig lidt på http://securephp.damonkohler.com/index.php/Email_Injection
som ganske godt beskriver hvad der sker og hvordan man som minimum bør
sikre sine form-felter ved brugen af mail() funktionen.


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


Jacob Atzen (11-09-2005)
Kommentar
Fra : Jacob Atzen


Dato : 11-09-05 16:18

On 2005-09-11, Geert Lund <glund-news@post.tele.dk> wrote:
> Jacob Atzen wrote:
>
>> Jeg forstår ikke rigtig, hvordan du kan modtage multipart mails fra
>> systemet, når det så vidt jeg kan se kun afsender singlepart. Er du
>> sikker på afsenderen er systemet? Det burde du kunne se i mailens
>> headere.
>
> Der laves garanteret en del fusk med headers gennem scriptet. Det er
> meget brugt for tiden. Altså at spammere fusker med dårligt skrevede forms.

Så vidt jeg kan se bliver headers sat uafhængigt af brugerinput, så det
tvivler jeg på.

> Kig lidt på http://securephp.damonkohler.com/index.php/Email_Injection
> som ganske godt beskriver hvad der sker og hvordan man som minimum bør
> sikre sine form-felter ved brugen af mail() funktionen.

Jeg har ikke nærlæst artiklen, men det ser ikke ud til at være det, der
er tilfældet her, da headers som sagt ikke bliver berørt af userinput.

--
Med venlig hilsen
- Jacob Atzen

Jacob Atzen (11-09-2005)
Kommentar
Fra : Jacob Atzen


Dato : 11-09-05 16:38

On 2005-09-11, Jacob Atzen <jacob@aub.dk> wrote:
> On 2005-09-11, Geert Lund <glund-news@post.tele.dk> wrote:
>> Der laves garanteret en del fusk med headers gennem scriptet. Det er
>> meget brugt for tiden. Altså at spammere fusker med dårligt skrevede forms.
>
> Så vidt jeg kan se bliver headers sat uafhængigt af brugerinput, så det
> tvivler jeg på.

Jeg korrekser lige mig selv. Jeg har læst kilden igennem igen og O.P. er
formentlig udsat for det du påpeger. Man sikrer sig ved validering af
inputdata.

--
Med venlig hilsen
- Jacob Atzen

Mads Lie Jensen (11-09-2005)
Kommentar
Fra : Mads Lie Jensen


Dato : 11-09-05 12:19

On 11 Sep 2005 10:20:05 GMT, Jacob Atzen <jacob@aub.dk> wrote:

>Jeg forstår ikke rigtig, hvordan du kan modtage multipart mails fra
>systemet, når det så vidt jeg kan se kun afsender singlepart. Er du
>sikker på afsenderen er systemet? Det burde du kunne se i mailens
>headere.

Det virker som om at disse mailheadere er en del af mailens body - som
om nogen smider dem i 'besked'-feltet og trykker send.

De kommer tilsyneladende ikke frem som headers i mailen. Som om nogen
leder efter huller i systemet.

Jeg døjer selv med samme problem de her dage ......

Hvad kan man gøre ved det?

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - snart i ny indpakning: http://ny.gartneriet.dk

Martin (12-09-2005)
Kommentar
Fra : Martin


Dato : 12-09-05 23:33

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Mads Gildberg wrote:
[snip mail problem]

Du kunne jo lige lave en ekstra submit knap efter det hele er lagt i
variabler, som du så gemmer som sessions.

Så laver man bare en ekstra submit knap hvor du skriver

"er du sikker på du vil sende mailen?"
NEJ eller JA

Det har jeg gjort et par gange, og det ser tilsyneladende ud til at virke.

Det vigtigste er simpelthen bare at smide NEJ FØR JA submit knappen.

Fx sådan her

if(isset($_POST["ja"])) {
<send mail>
}

if(isset($_POST["nej"])) {
<gå tilbage>
}

print "Er du sikker på du vil sende denne mail?";
print "<input type='submit' name='nej' value='nej'>";
print "<input type='submit' name='ja' value='ja'>";

De fleste script fidusser der findes bruger nemlig den første submit den
kan finde og sætter den :)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (MingW32)

iD8DBQFDJgIzAxDV/8Li8MYRArpdAJ9aP7P/xqN3u2uaslzk4fACorB0CwCgh5gO
PxH9OgxeidGdjQVlavd6GqY=
=ZlOG
-----END PGP SIGNATURE-----

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

Månedens bedste
Årets bedste
Sidste års bedste