Avatar billede thomaskramer Juniormester
05. august 2008 - 12:45 Der er 19 kommentarer og
1 løsning

Formular uden spam

Hej

Er der en nem måde at lave en formular på en side, som ikke umiddelbart bliver misbrugt til spam?

Jeg har en simpel formular på min side, men jeg modtager 10-15 spammails via formularen hver det - og det er lidt irriterende.

Kan man lave et felt i formen som skal udfyldes med noget bestemt, for at formularen kan sendes, eller hvordan gør mig?

Kom gerne med kode-forslag, da jeg ikke har evnen til at programmere selv.

200 point til hurtig hjælp.
Avatar billede pidgeot Nybegynder
05. august 2008 - 13:00 #1
Vi kan ikke komme med noget som helst uden at vide hvordan mailen bliver sendt - om det er med PHP, ASP, eller noget helt trejde. Du bliver nødt til at komme med lidt flere oplysninger (gerne selve den kode der står for at sende mailen).
Avatar billede roenving Novice
05. august 2008 - 13:38 #2
Avatar billede Slettet bruger
05. august 2008 - 14:05 #3
captcha er jo mere eller mindre generelt knækket. Ok, de går måske ikke efter de små fisk.

Nogen der har erfaring med

<input type="text" style="display:hidden" />

hvor backenden så skal holde øje med dette specielle felt.

Teorien skulle vist være at robotter ville udfylde dette felt, hvorimod almindelige mennesker ikke kan se den.
Avatar billede roenving Novice
05. august 2008 - 14:20 #4
'Generelt knækket' ?-)

-- der skal vist en hel del mere end en lille spam-maskine til at knække den slags !-)
Avatar billede Slettet bruger
05. august 2008 - 14:34 #5
De store sites har i hvertfald problemer med det og nogle går væk fra det igen.

En af de sjove alternativer jeg har set er at man skal løse regnestykker.
Avatar billede erikjacobsen Ekspert
05. august 2008 - 14:47 #6
Princippet med hidden felter er nogenlunde. Giv den et godt navn "phone", og gem den med en class="red", hvor du så har en "display:hidden". Fordelen i forhold til en captcha-variant er at du ikke generer brugeren.

Du kan også efterhånden oparbejde en negativliste af ord, der ikke må forekomme i teksten. Det virker fint i et tilfælde jeg har, hvor specielt ord i retning "free500mbwesite.com" fint sorterer på spam og ikke spam ;)
Avatar billede thomaskramer Juniormester
05. august 2008 - 15:38 #7
Hej igen - tak for tippene (jeg er total rundtosset, er jo kodeblind)

Findes der ikke en enkel(ere) måde at gøre det på?
Avatar billede Slettet bruger
05. august 2008 - 15:41 #8
hvis der var, ville de fleste nok ikke være så plaget af spam ;-)

spam robotterne bliver mere og mere udspekulerede. På et tidspunkt vil den med display:hidden jo også være ubrugelig da robotten bare parser hele skidtet og tolker css'erne.
Avatar billede thomaskramer Juniormester
05. august 2008 - 15:48 #9
Nå øv, så må jeg leve med spam, for jeg forstår minus af de tidlige nævnte links :-(

Troede man kunne lave et felt hvori der f.eks. skulle så "jeg spammer ikke" og hvis der så ikke stod det, så blev formen aldrig sendt...

Men så blev jeg da lidt klogere.

Til dem der ønsker point - smid et svar.
Avatar billede w13 Novice
05. august 2008 - 15:49 #10
Det du skriver, er også lidt i samme stil som de ting, vi nævner. Og det kan da også nemt laves. Men så skal vi lige se din kode, hvis vi skal kunne hjælpe.
Avatar billede w13 Novice
05. august 2008 - 15:54 #11
Men så er ErikJacobsens "display:hidden"-løsning ligeså nem som din og meget mere brugervenlig.
Avatar billede thomaskramer Juniormester
05. august 2008 - 15:54 #12
formen ser sådan ud:

----------------------------------------------------------------

<form id="form1" name="form1" method="post" action="mail.asp">
                    <table width="100%" border="0" cellspacing="0" cellpadding="0">
                      <tr>
                        <td width="150" height="25" class="brodtekst">Firma</td>
                        <td height="25"><label>
                          <input name="Firma:" type="text" class="brodtekst" id="Firma:" size="40" />
                        </label></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Kontaktperson</td>
                        <td height="25"><input name="Kontaktperson:" type="text" class="brodtekst" id="Kontaktperson:" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Adresse</td>
                        <td height="25"><input name="Adresse:" type="text" class="brodtekst" id="Adresse:" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Postnummer</td>
                        <td height="25"><input name="Postnummer" type="text" class="brodtekst" id="Postnummer" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">By</td>
                        <td height="25"><input name="By:" type="text" class="brodtekst" id="By:" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Telefonnummer</td>
                        <td height="25"><input name="Telefonnr.:" type="text" class="brodtekst" id="Telefonnr.:" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Email</td>
                        <td height="25"><input name="Email:" type="text" class="brodtekst" id="Email:" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Hjemmeside</td>
                        <td height="25"><input name="Hjemmeside:" type="text" class="brodtekst" id="Hjemmeside:" size="40" /></td>
                      </tr>
                      <tr>
                        <td height="25" class="brodtekst">Besked</td>
                        <td height="25"><label>
                          <textarea name="textarea" id="textarea" cols="40" rows="6"></textarea>
                        </label></td>
                      </tr>
                      <tr>
                        <td width="150" class="brodtekst">&nbsp;</td>
                        <td><label>
                          <input type="submit" name="button" id="button" value="Send" />
                        </label></td>
                      </tr>
                    </table>
                                    </form>

----------------------------------------------------------------

Mail.asp ser sådan ud:

----------------------------------------------------------------

<%Response.Buffer=true%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/>
<title></title>
</head>
<body bgcolor="#FFFFFF">
<%
If Request.Form.Count > 0 Then
    For I = 1 to Request.Form.Count
        if Request.Form.Item(I) <>"" then
        Body = Body & Request.Form.Key(I) & " " _
              & Request.Form.Item(I) & vbCRLF
        end if
    Next
   
Set Mail = Server.CreateObject("Persits.MailSender")

Mail.Host = "mail.mailadresse.dk" ' Specify a valid SMTP server
Mail.From = "info@mailadresse.dk" ' Specify sender's address
Mail.FromName = "Besøgende" ' Specify sender's name
Mail.AddAddress "info@mailadresse.dk", "Modtager Navn" ' recipient address
Mail.Subject = "Kontakt.dk"
Mail.Body = Body
On Error Resume Next
Mail.Send
If Err <> 0 Then
    Response.Write "Fejl: " & Err.Description
Else
    Server.execute("tak.asp")
End If
End If
%>
</body>
</html>

---------------------------------------------------------------------

Kan det hjælpe jer?
Avatar billede w13 Novice
05. august 2008 - 15:57 #13
<form id="form1" name="form1" method="post" action="mail.asp">
                    <table width="100%" border="0" cellspacing="0" cellpadding="0">
                      <tr>
                        <td width="150" height="25" class="brodtekst">Firma</td>
                        <td height="25"><label>
                          <input name="Firma:" type="text" class="brodtekst" id="Firma:" size="40" />
                        </label></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Kontaktperson</td>
                        <td height="25"><input name="Kontaktperson:" type="text" class="brodtekst" id="Kontaktperson:" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Adresse</td>
                        <td height="25"><input name="Adresse:" type="text" class="brodtekst" id="Adresse:" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Postnummer</td>
                        <td height="25"><input name="Postnummer" type="text" class="brodtekst" id="Postnummer" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">By</td>
                        <td height="25"><input name="By:" type="text" class="brodtekst" id="By:" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Telefonnummer</td>
                        <td height="25"><input name="Telefonnr.:" type="text" class="brodtekst" id="Telefonnr.:" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Email</td>
                        <td height="25"><input name="Email:" type="text" class="brodtekst" id="Email:" size="40" /></td>
                      </tr>
                      <tr>
                        <td width="150" height="25" class="brodtekst">Hjemmeside</td>
                        <td height="25"><input name="Hjemmeside:" type="text" class="brodtekst" id="Hjemmeside:" size="40" /></td>
                      </tr>
                      <tr>
                        <td height="25" class="brodtekst">Besked</td>
                        <td height="25"><label>
                          <textarea name="textarea" id="textarea" cols="40" rows="6"></textarea>
                        </label></td>
                      </tr>
                      <tr>
                        <td width="150" class="brodtekst">&nbsp;</td>
                        <td><label>
                          <input type="submit" name="button" id="button" value="Send" />
                        </label></td>
                      </tr>
                    </table>
                    <style type="text/css">
                    .fjernphone{display:none}
                    </style>
                    <input type="text" name="phone" class="fjernphone">
                  </form>

----------------------------------------------------------------

Mail.asp:

----------------------------------------------------------------

<%Response.Buffer=true%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/>
<title></title>
</head>
<body bgcolor="#FFFFFF">
<%
If Request.Form.Count > 0 And Request.Form("phone") = "" Then
    For I = 1 to Request.Form.Count
        if Request.Form.Item(I) <>"" then
        Body = Body & Request.Form.Key(I) & " " _
              & Request.Form.Item(I) & vbCRLF
        end if
    Next

    Set Mail = Server.CreateObject("Persits.MailSender")

    Mail.Host = "mail.mailadresse.dk" ' Specify a valid SMTP server
    Mail.From = "info@mailadresse.dk" ' Specify sender's address
    Mail.FromName = "Besøgende" ' Specify sender's name
    Mail.AddAddress "info@mailadresse.dk", "Modtager Navn" ' recipient address
    Mail.Subject = "Kontakt.dk"
    Mail.Body = Body
    On Error Resume Next
    Mail.Send
    If Err <> 0 Then
        Response.Write "Fejl: " & Err.Description
    Else
        Server.execute("tak.asp")
    End If
End If
%>
</body>
</html>
Avatar billede w13 Novice
05. august 2008 - 15:57 #14
Det burde gøre tricket. =)
Avatar billede thomaskramer Juniormester
05. august 2008 - 16:00 #15
ok herligt - må jeg spørge hvad du har ændret - og hvad de betyder?
Avatar billede olebole Juniormester
05. august 2008 - 20:52 #16
"De store sites har i hvertfald problemer med det og nogle går væk fra det igen." >> Kan du pege os i retning af noget dokumentation?  =)

Regnestykker er endnu ældre end captcha - og kanon let at knække. Derimod er det ikke svært at lave et billede, som ikke kan aflæses maskinelt uden voldsomt komplicerede algoritmer.

Til gengæld er der masser af løsninger 'derude', hvor det er helt tydeligt, koderen ikke har forstået princippet i captcha, og så kan alt jo brydes. Den slags har jeg såmænd også set på ret store sites  :o|
Avatar billede w13 Novice
05. august 2008 - 22:31 #17
thomaskramer>> Jeg har indsat:

<style type="text/css">
.fjernphone{display:none}
</style>
<input type="text" name="phone" class="fjernphone">

i din formular.

Og så har jeg ændret if-sætningen i mail.asp til:

If Request.Form.Count > 0 And Request.Form("phone") = "" Then

Dvs. at din kode kun bliver kørt, hvis feltet "phone" er tomt.

Og feltet bør jo være tomt, fordi det er skjult, så brugere ikke kan indtaste i det - men idéen er så, at spam-programmer stadigvæk skulle udfylde feltet.
Avatar billede w13 Novice
05. august 2008 - 22:31 #18
Men du kan jo prøve det og se, om det hjælper. =)
Avatar billede mclemens Nybegynder
05. august 2008 - 22:43 #19
Hvis det ikke hjælper 100% kan du prøve at rette

<input type="text" name="phone" value="tekst" class="fjernphone">

til:

<input type="text" name="phone" value="tekst" class="fjernphone">
<script type="text/javascript">
document.getElementsByName("phone")[0].value="";
document.getElementById("jsreq").style.display="none";
</script>

og indsætte et sted på siden (teksten er underordnet, id'et skal bruges):
<div id="jsreq">Javascript er krævet til denne formular, aktiver javascript og opdater siden</div>

... phone elementet vil nu have en value, men value forsvinder men javascript
aktiveret. Ulempen er dog at brugeren skal have javascript aktiveret ...
Avatar billede mclemens Nybegynder
05. august 2008 - 22:46 #20
Foresten så skal div elementet stå før script blokken, ellers skal indholdet i script blokken ind en javascript window onload funktion (eller rettere den eksisterende window onload funktion hvis du har en på siden i forvejen).
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