Avatar billede tjay8 Nybegynder
05. august 2007 - 23:02 Der er 10 kommentarer og
1 løsning

Problemer med reklame bots i gæstebog

Hej jeg har lavet en simpel gæstebog med asp og vbscript som kører over en mySQL db. Jeg har prøvet at fjerne bots'ne ved at lave noget kode som tjekker at felterne er udfyldt og email er i det rigtige format, samt jeg har lavet et hidden field som sender en tekst videre til den egentlige side som tilføjer beskeden til db'en sådan at bots'ne ikke blot kan komme direkte ind på den side, de skal altså igennem den kode som tjekker felterne.
Det har hjulpet mig af med en del af bots'ne men ikke dem alle hvad kan jeg gøre?

her er koden hvor man skriver:
<html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
    <title>Livsstilsterapeut</title>
    <link href="Css/standard.css" rel="stylesheet" type="text/css" />

<script language="javascript" type="text/javascript">
function checkForm(f){
    var txt = "",fjl;
    var regexp = /^\w[\w\.\-]*@\w[\w\-]*\.\w{2}\w*$/i;
    for(i=0;f.elements.length>i;i++){
        fld = f.elements[i]
        if ((fld.tagName=='TEXTAREA'||fld.type=="text")&&fld.value==fld.defaultValue){
            txt+="\n\t"+fld.name;
            if(!fjl)fjl = fld;
        }else if (fld.name.toLowerCase().indexOf("mail")>-1){
            if (!regexp.test(fld.value))txt+="\n\tE-mailen er ikke gyldig";
            if(!fjl)fjl = fld;
        }
    }
    if(txt!=""){
        txt = "Du mangler at udfylde disse felter:\n"+txt+"\n\nAlle felter skal udfyldes";
        alert(txt);
        fjl.select();
        fjl.focus()
        return false;
    }
    return true;
}
</script>

   
    </head>
    <body>
        <!-- MENU --->
   
        <div align="center">
        <div class="menu">
        <br><br><br><br><br><br>
        <a href="forside.asp"><img border="0px" src="grafik/forside.gif" onmouseover="src='grafik/forsideover.gif'" onmouseout="src='grafik/forside.gif'"></a>&nbsp;<a href="fodterapi.html"><img border="0px" src="grafik/FT.gif" onmouseover="src='grafik/FTover.gif'" onmouseout="src='grafik/FT.gif'"></a>&nbsp;<a href="tft.html"><img border="0px" src="grafik/TFT.gif" onmouseover="src='grafik/TFTover.gif'" onmouseout="src='grafik/TFT.gif'"></a>&nbsp;<a href="lc.html"><img border="0px" src="grafik/LC.gif" onmouseover="src='grafik/LCover.gif'" onmouseout="src='grafik/LC.gif'"></a>&nbsp;<a href="healing.html"><img border="0px" src="grafik/Healing.gif" onmouseover="src='grafik/Healingover.gif'" onmouseout="src='grafik/Healing.gif'"></a>&nbsp;<a href="kontakt.html"><img border="0px" src="grafik/Kontakt.gif" onmouseover="src='grafik/Kontaktover.gif'" onmouseout="src='grafik/Kontakt.gif'"></a>
        </div>
        </div>
   
        <div align="center">
   
    <!-- INDHOLD --->
   
        <div class="indhold">
   
    <!-- UNDERMENU --->   
        <div class="undermenu">
        <a href="kontakt.html"><img border="0px" src="grafik/underkontakt.gif" onmouseover="src='grafik/underkontaktover.gif'" onmouseout="src='grafik/underkontakt.gif'"></a><br>
        <a href="klient.asp"><img border="0px" src="grafik/tftcase.gif" onmouseover="src='grafik/tftcaseover.gif'" onmouseout="src='grafik/tftcase.gif'"></a><br>
        <a href="gb.asp"><img border="0px" src="grafik/gaest.gif" onmouseover="src='grafik/gaestover.gif'" onmouseout="src='grafik/gaest.gif'"></a><br>
        <a href="hvem.html"><img border="0px" src="grafik/hvem.gif" onmouseover="src='grafik/hvemover.gif'" onmouseout="src='grafik/hvem.gif'"></a>
        </div>
    <!-- UNDERMENU SLUT --->   
        <div class="tekst">
        <span class="overoverskrift">Gæstebog</span><br><br>
        <form action="add.asp" method="post" id="Form" onsubmit="return checkForm(this);">
            <table>
            <tr><td>
                Navn: </td><td><input type="text" tabindex="1" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20" id="formnavn" name="Dit navn" style="border:2px #E0EBFF solid;"><br>
                </td></tr><tr><td>
                Mail: </td><td><input type="text" size="20" tabindex="2" id="formvel" name="Din email" style="border:2px #E0EBFF solid;" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"><br>
                </td></tr><tr><td valign="top">
                Besked: </td><td><textarea rows="5" cols="30" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" id="formbesked" tabindex="3" wrap="virtual" name="Din besked" style="border:2px #E0EBFF solid;"></textarea><br>
                </td></tr><tr><td colspan="2" align="center">
                <input type="hidden" value="fisk" name="fisk" id="formfisk">
                <input type="submit" id="submitbtn" value="Send beskeden" tabindex="4" style="border:2px #E0EBFF solid;background-color:#E0EBFF;"></td></tr>
            </table>
            </form>
            <br><br><br><br><br><br><br><br><br><br><br><br>
<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=livsterapeut_dk; UID=livsterapeut_dk; PWD=mvsytaL4;"
%>
<%
SQL = "SELECT *, DATE_FORMAT(Dato, '%d/%m-%Y') AS FDato FROM `GB` ORDER BY GID DESC LIMIT 15"
Set RS = objConn.Execute(SQL)

If RS.EOF then
  Response.write "Der er endnu ingen indlæg i gæstebogen, så du kan blive den første!"
Else
  Do While NOT RS.EOF
%>
<div class="caseoverskrift"><%=RS("Navn")%> | <%=RS("Mail")%></div><span style="float:right;position:relative;top:-16px;font-size:12px;font-weight:bold;"><%=RS("FDato")%></span>
            <%=RS("Besked")%>
            <br><br>
            <%
  RS.MoveNext
  Loop
  objConn.Close
  end if
%>
           
        </div>
        </div>
    </body>
</html>

Og her den der egentlig tilføjer beskeden.

<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=livsterapeut_dk; UID=livsterapeut_dk; PWD=mvsytaL4;"
%>
<%
tjekker = request.form("fisk")
if tjekker = "fisk" then
    beskedtekst = replace(request.form("Din besked"),VbCrLf,"<br>")
    retbeskedtekst = replace(beskedtekst,"'","&#39;")
    retnavn = replace(request.form("Dit navn"),"'","&#39;")
    retmail = replace(request.form("Din email"),"'","&#39;")
    strSQL2 = "Insert into GB (GID, Navn, Mail, Dato, Besked) values(NULL, '" & retnavn & "', '" & retmail & "',CURDATE(), '" & retbeskedtekst & "')"


    objConn.Execute(strSQL2)
    objConn.Close
    Set objConn = Nothing
    Response.Redirect "gb.asp"
else
Response.Redirect "index.html"
end if
%>

Jeg er stadig lidt ny til det her så jeg mangler lige nogle tips.
Avatar billede The Real Yoda Juniormester
05. august 2007 - 23:29 #1
nogle kigger på din gæstebog.. lurer felterne .. og så sender dem med fra deres egen kode..

men du kan sætte en session variabel på siden man skriver... og så kigge om sessionen er sat på den side der gemmer i databasen..

session("ikkebot")="1"


if session("ikkebot")="1" then ... gem data
Avatar billede groop Nybegynder
05. august 2007 - 23:42 #2
Du kan også bruge et captcha script. Scriptet genererer et billede hvori der gerne er et ord. Brugeren skal herefter skrive ordet i et tekstfelt.
Der findes forskellige variationer af captcha's. En anden variation end den der allerede er nævnt benytter billeder af forskellige dyr. Brugeren bliver fx. præsenteret for 4 billeder der alle forestiller en dyreart. Herefter bliver brugeren bedt om, at skrive navnet på dyrearten der ses i billede nr 3. Rækkefølgen er gerne tilfældig og der anvendes tit forskellige billeder af samme dyreart.
Læs mere: http://en.wikipedia.org/wiki/Captcha
Søg på google: captcha asp
Avatar billede groop Nybegynder
05. august 2007 - 23:53 #3
Ps. Skjul domæne, brugernavn og password næste gang du opretter en post.
Avatar billede tjay8 Nybegynder
06. august 2007 - 00:29 #4
er du sikker på at session objektet vil virke jeg havde selv tænkt på det men regnede med at det hidden field ville gøre det samme, men det er så fordi det er en del af formen og ikke et egentligt script på den måde eller hva?
Avatar billede thesurfer Nybegynder
06. august 2007 - 02:12 #5
Det vil sikkert bare sende dataene til ditdomæne.dk/add.asp, i stedet for at gå ind på ditdomæne.dk, og derefter formen.

Man kan altså komme uden om scriptet.

Det med sessionen vil forhindre, at man kan sende data direkte til filen add.asp, da man *skal* forbi formen først, hvor sessionen bliver sat.
Problemet er, at man kan scripte sig ud af det, ved at få et program, eller en browser, til at indlæse form-siden, og derefter automatisk udfylder felterne og sende formen afsted..


Jeg vil faktisk anbefale begge løsninger, samtidigt:

1) Session til at forhindre at man kan sende data direkte til add.asp.

2) Bruge CAPTCHA for at forhindre, at man kan sende data automatisk, via scripts


Visse CAPTCHA billeder kan knækkes, dvs., aflæses af computere, og derefter sende afvikle forms automatisk.

Så billedet skal være så sløret som muligt, at det lige kan læses af mennesker.
Avatar billede thesurfer Nybegynder
06. august 2007 - 02:14 #6
Jeg vil lige give dit et råd mere:

Fjern alle email adresser fra gæstebogen.

Ellers risikerer folk (der skriver indlæg i din gæstebo) at få en masse spam på deres email.

Og så gider folk ikke længere at skrive i din gæstebog.. :-)
Avatar billede thesurfer Nybegynder
06. august 2007 - 02:19 #7
Og så vil jeg gerne give dig endnu et råd.. :-)

Stol aldrig på brugeren!

Lige nu er den eneste validering du har, lavet i JavaScript.

Det betyder, at man kan skrive hvad som helst, hvis:

1) Man deaktiverer JavaScript - Ja, det kan man godt

2) Overskriver din onsubmit-rutine, så den ikke længere bruger checkForm-funktion


Så kan man skrive lige det man ønsker..

Hvis spammerne bruger et program til at samme gæstebogen med, vil de sikkert ikke gøre brug af JavaScript, hvilket betyder at de kan skrive hvad som helst det passer dem..
Avatar billede thesurfer Nybegynder
06. august 2007 - 02:22 #8
Forlængelse af JavaScript-rådet:

Man må aldrig basere funktionalitet på en teknologi, som kan slåes fra.
JavaScript må kun bruges, for at forbedre oplevelsen for brugeren, og ikke andet.

Hvis du har noget der skal valideres/kontrolleres, må det IKKE ske på kliensiden (i browseren)!
Det skal ske på serversiden (i dit eksempel: med ASP kode)!

Sådan.. så burde du være lidt bedre rustet til at kunne beskytte gæstebogen.. :-)
Avatar billede tjay8 Nybegynder
08. august 2007 - 14:20 #9
Jeg prøver til at starte med blot session objekt løsningen fra therealyoda så drop et svar, det kan dog være jeg bruger captcha løsningen men så smider jeg selvfølgelig nogle point efter groop. Og til sidst tak for hjælpen.
Avatar billede groop Nybegynder
08. august 2007 - 14:44 #10
That 1 was on me - free of charge :P
Held og lykke.
Avatar billede The Real Yoda Juniormester
21. august 2007 - 08:00 #11
jamen så er der da et svar her..
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