Avatar billede felixcat Nybegynder
02. marts 2006 - 10:01 Der er 13 kommentarer og
1 løsning

Spamming / autopost i gæstebog

Jeg har en gæstebog på et website som hver dag bliver spammet af en eller åndsbolle fra udlandet. Det ser ud til at være en slags robot som autoposter 5 indlæg. Det kan ikke nytte noget at banne IPNr. da det er forskellige IPNr hvergang. Ordlyden på indlæggene er eks. great work, nice site, love you osv og med angivelse af en URL til et eller andet russisk site. Det bliver man træt af at slette og jeg har så søgt lidt på nettet omkring emnet CAPTCHA og fundet mange link heriblandt et dansk http://www.softspot.dk/forside/erfaringsdeling/webformularer.aspx

Jeg har prøvet at implementere koden men det ser ikke ud til at virke. Er der nogen der kan se hvad jeg gør forkert? Her er et udpluk af koden ( det væsentlige ):

' lav nyt password

<%
dim pchr,newPass,passLength,charPos, mMaxLength, mMinLength

mMinLength = 10
mMaxLength = 15
pchr = "0123456789" & _
      "abcdefghijklmnopqrstuvwxyz" & _
      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
newPass = ""
randomize
passLength = CInt((mMaxLength - mMinLength) * Rnd()) + mMinLength
       
do while len(newPass) < passLength
  charPos = CInt((len(pchr) - 1) * Rnd()) + 1
  newPass = newPass & _
              mid(pchr,charPos,1)
loop%>

' verificere om kode er korrekt

<script type="text/javascript">
function prepareSend() {
  document.forms[0].Control.value =
        document.forms[0].Code.value;
  document.forms[0].submit(); 
}
</script>
'start på form

<div class="commentFormArea">
    <fieldset>
<form method="POST" action="save.asp" NAME="guestform">
<input type="hidden" name="Code" value="<%=newPass%>">
  <input type="hidden" name="Control">



<label for="title"><%=ReplaceBreak(GetText(aryElementText, "GuestbookEntry"))%></label>
 
<div class="noedvendig">
<label for="NAME">*&nbsp;<%=ReplaceBreak(GetText(aryElementText, "NAME"))%></label><input type="text" name="NAME" id="NAME" value="<% =Request("NAME") %>">
</div>

og så videre med inputfelter...

<input type="submit" class="sender" name="Send"  value="Send">
    <div id="submit"><label for="post"><input class="button" id="post" type="submit" name="post"  value=" Tilføj til gæstebog " onclick="prepareSend()"></label>

variablen newpass skifter godt nok værdi hvergang man opdaterer siden. og indlæg bliver også submit men desværre fanger den ikke autopost.
Er der noget jeg har misforstået eller er der andre der har en anden løsning
Avatar billede softspot Forsker
02. marts 2006 - 10:12 #1
Har du husket at checke (på serveren) om request.form("code") = request.form("control") inden du indsætter indlægget i databasen?
Avatar billede felixcat Nybegynder
02. marts 2006 - 10:25 #2
Hmm. Hvordan gør man det? er det noget med if request.form("code") = request.form("control") then

og så gemmer man i databasen?
Avatar billede softspot Forsker
02. marts 2006 - 10:29 #3
Ja, når formularen bliver postet, har du en side på serveren som gemmer data i databasen (antager jeg). I den kode skal du inden du gemmer udføre foromtalte check inden du gemmer, da hele fidusen skulle være at kodefeltet kun bliver kopieret over i kontrolkodefeltet, hvis brugeren har trykket på den rigtige knap på formularen.

Jeg ved mit site ikke beskriver denne del og det vil jeg skrive på min liste over ting jeg skal have rettet op på :)
Avatar billede felixcat Nybegynder
02. marts 2006 - 10:45 #4
Jeg har nu indsat et check for request.form("code") = request.form("control") i min save.asp som er action i min form men nu bliver der ingenting gemt ??

koden er:

if request.form("code") = request.form("control") then
'** Get initial recordset
Set CmdAddMessage = Server.CreateObject("ADODB.Recordset")
MySQL = "SELECT BOOK1.* FROM BOOK1"
CmdAddMessage.Open MySQL,ConnGuestBook_ConnectionString, 1, 3
%>


<%
CmdAddMessage.AddNew
CmdAddMessage.Fields("DATE_ENTERED") = NOW
%>

<!----------------------------------------------------->

<%
if EMAIL="" THEN
CmdAddMessage.Fields("EMAIL") = NULL
Else
CmdAddMessage.Fields("EMAIL") = SpaceStr(EMAIL,70)
END IF
%>
<!----------------------------------------------------->

<%
if HOMEPAGEURL="" THEN
CmdAddMessage.Fields("URL") = NULL
Else
CmdAddMessage.Fields("URL") = SpaceStr(HOMEPAGEURL,75)
END IF
%>
<!----------------------------------------------------->

<%
if CITY_COUNTRY="" THEN
CmdAddMessage.Fields("CITY_COUNTRY") = NULL
Else
CmdAddMessage.Fields("CITY_COUNTRY") = SpaceStr(CITY_COUNTRY,75)
END IF
%>
<!----------------------------------------------------->

<%
if MESSAGE="" THEN
CmdAddMessage.Fields("MESSAGE") = NULL
Else
CmdAddMessage.Fields("MESSAGE") = SpaceStr(MESSAGE,70)
END IF
%>
<!----------------------------------------------------->

<%
if NAME="" THEN
CmdAddMessage.Fields("NAME") = NULL
Else
CmdAddMessage.Fields("NAME") = SpaceStr(NAME,70)
END IF
%>
<!----------------------------------------------------->

<%
IP_ADDRESS = Request.ServerVariables("REMOTE_ADDR")
CmdAddMessage.Fields("IP_ADDRESS") = IP_ADDRESS
Session("IP_ADDRESS") = IP_ADDRESS
%>
<!----------------------------------------------------->


<%
CmdAddMessage.Update
CmdAddMessage.Close
end if

mystisk
Avatar billede softspot Forsker
02. marts 2006 - 10:53 #5
Nå, men så bliver du da i det mindste ikke spammet mere ;-)

Anyway! Har du flere forms på din side? Alternativt prøv at ændre denne kode:

<script type="text/javascript">
function prepareSend() {
  var frm = document.forms['guestform'];
  frm.Control.value = frm.Code.value;
  frm.submit(); 
}
</script>

Det kan i realiteten også være at du skal ændre navnet på input-feltet "Control" (jeg kunne have en mistanke om at det er i konflikt med noget browser-objekthierarki-knald). Benyt f.eks. danske betegnelser for Code og Control, men husk også at ændre i serverkoden :)
Avatar billede felixcat Nybegynder
02. marts 2006 - 11:09 #6
Ja det virker nu . jeg tror det du havde ret i at control er et reserveret ord. Men tak for hjælpen . smider du lige et svar

Forresten mangler du lige i din password generator at tilføje

mMinLength = 10
mMaxLength = 15

Jeg anvender den på flere sites. Også tak fordi du laver noget godt og overskueligt kode og sætter det til fri afbenyttelse
Avatar billede softspot Forsker
02. marts 2006 - 11:16 #7
Velbekomme :)

Mht. min- og maxlength, ja, jeg kan godt se det ikke er tydeligt nok beskrevet på sitet, men klassen implementerer de to egenskaber, så hvis du benytter klasse, er de med som de skal være.

Jeg vil forsøge at gøre kodestumpen umiddelbar brugbar på sitet, så dem der ikke ser klassen ikke render i samme "udfordringer" som du har - tak for tilbagemeldingen på sitet i øvrigt :)
Avatar billede softspot Forsker
02. marts 2006 - 11:25 #8
Tak for point :)
Avatar billede felixcat Nybegynder
02. marts 2006 - 11:30 #9
Selv tak
Kender du forresten et godt CMS System som er skrevet i asp. Det må meget gerne være freeware.
Avatar billede softspot Forsker
02. marts 2006 - 11:34 #10
Jeg har desværre ikke fået mit eget lavet færdigt (endnu) ;-) og jeg har ikke gjort det så meget i CMS'er. Dem jeg kender er hundedyre og til ASP.NET.
Avatar billede felixcat Nybegynder
02. marts 2006 - 11:47 #11
Ha ha - jeg er også ved at lave et og er også gået død i det. Og ja asp.net er nok fremtiden. Forresten er der et godt dansk cms system i open source det hedder umbraco og er skrevet i C# - se nærmere på www.umbraco.org
Jeg er ved at sætte mig ind i det men dokumentationen til det er meget mangelfuld
Avatar billede softspot Forsker
02. marts 2006 - 11:48 #12
Ja, jeg kender det godt, jeg er bare ikke kommet til det endnu :)
Avatar billede felixcat Nybegynder
03. marts 2006 - 09:09 #13
Jeg må med skam meddele dig at jeg igen har modtaget 15 spam indlæg i min gæstebog. Så der er noget der ikke virker - har du ikke en anden løsning?
Avatar billede softspot Forsker
03. marts 2006 - 15:14 #14
Det skulle så være at præsentere brugerne for en kode som skulle indtastes sammen med indlægget, så du får blandet brugeren ind i loopet. Hvis du gør det rigtig fancy, så genererer du et stump grafik med bogstaver som er svære at læse for en maskine og viser det hver gang en bruger skal sende et indlæg. Du skal naturligvis generere denne stump grafik on the fly for at det bliver en tilfældig kode hver gang. Mange store sites benytter sig af denne metode ved bla. tilmelding, men den er lidt mere langhåret end bare en tekstuel kode du sætter ind på siden som klartekst.

Den metode jeg har forsøgt at udtænke skulle blot være lettere for brugeren at have med at gøre (da denne jo slet ikke skulle tænke over den), men det er altså ikke godt nok gennemtænkt kan jeg forstå :)

Jeg har desværre ikke noget konkret kode liggende til den metode med grafikken. Løsningen vil under alle omstændigheder afhænge af hvilke komponenter du har til rådighed på din webserver. Jeg ville nok forsøge mig med den løsning hvor brugeren skal indtaste koden manuelt sammen med indlægget. Så kan du også stadig bruge den serverkode du allerede har lavet...
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