webForumDet fria alternativet

HTML Block (Spam i gb)

ASP

17 svar · 866 visningar · startad av SoulGod

Medlem sedan aug. 20051 200 inlägg
Frågan#1

Vet att detta varit uppe på tapeten ett antal gånger,
och jag har läst diverse lösningar som jag också prövat på.

Men jag har fortfarande problem på sidan
(http://www.reklamracing.se)
Ca 800 inlägg som är spam.
Har jobbat fram ett ip-blockeringsscript, dock funkar det endast när man går in och "markerar" det som spam.
Laddade även ner en färdig gästbok som skulle innehålla någon simplare version av spamskydd (Gruvsjo om jag inte minns fel) men det fungerar inte heller.

Jag funderar på att blockera all text som innehåller [fet]http://[/fet] & [fet]www[/fet] ...
Hur gör jag det?
Är en MS Access databas. Ska jag blockera det på något sätt i databasen,
eller är det lättare att lägga in det i scriptet innan det förs in i databasen?

Mvh

Medlem sedan juni 20019 519 inlägg
#2

Du får göra en validering (regExp) för att kolla om innehållet i meddelandet innehåller http:// om det är det du vill stoppa. Vilken databas är inte direkt intressant det är hur du validera indatan innan du sparar ner det till en databas.

Medlem sedan aug. 20051 200 inlägg
#3

I det nuvarande gb-scriptet som ligger,
så finns följande kod:

Function Link(strText)
   strText = Server.HTMLEncode(strText)

   Set regExp = New regexp

   regExp.Global = true
   regExp.IgnoreCase = true

   regExp.Pattern = "(http://|www)([\S]*)"
   strText = regExp.Replace(strText,"<a href=""http://$1$2"" target=""_blank"">$1$2</a>")

   regExp.Pattern = "([url]ftp://)([/url][\S]*)"
   strText = regExp.Replace(strText,"<a href=""$1$2"" target=""_blank"">$1$2</a>")

   regExp.Pattern = "([\S]*@[\S]*[.se|.com|.nu|.net|.org])"
   strText = regExp.Replace(strText,"<a href=""mailto:$1"" target=""_blank"">$1</a>")

   regExp.Pattern = "([.|,|!|?|:|;|)|\|&]]*)</a> "
   strText = regExp.Replace(strText,"</a>$1 ")

   regExp.Pattern = "([.|,|!|?|:|;|)|\|&]]*)"" target=""_blank"">([^<]*)</a>"
   strText = regExp.Replace(strText,""">$2</a>")

   strText = Replace(Trim(strText),vbCrLf, "<br>")
   strText = Replace(Trim(strText),"http://http://", "http://")

Borde inte den lösa problemet?
Eller är jag helt fel ute?

Mvh Martin

Medlem sedan aug. 20051 200 inlägg
#4

http://www.reklamracing.se/gb/gastbok.asp

Där har du länken till gästboken där spam kommer.

Medlem sedan juni 20019 519 inlägg
#5

Är det en specifik länk som är problemet? Om det är ett visst mönster så kan man ju alltid använda InStr. Eller som sagt RegExp om den matchar ett visst mönster så skall du stoppa postningen till db.

Function SpamPattern(str)
	Dim re, FoundMatch
	Set re = New RegExp
	re.IgnoreCase = True
	re.MultiLine = True
	re.Pattern = "http://mipagina\.aol\.com\.mx/wqkwnwoex/april-\d+\.html"
	FoundMatch = re.Test(str)
	Set re = Nothing
End Function

If SpamPattern(textFromForm) Then
	'Contains spam url!
Else
	'Do the posting of message
End If
Medlem sedan aug. 20051 200 inlägg
#6

Vart ska denna läggas in?
Bifogar länk till hela gb-koden

http://rafb.net/p/gicoVv54.html

Medlem sedan juni 20019 519 inlägg
#7

1. Placera funktionen utan för loopar/if frågor osv. Placera denna efter din andra funktion "link" eller vad den heter
ersätt:

Conn.Execute("Insert Into gastbok(namn, mail, url, msg,ip, rubrik) Values('"& namn &"','"& mail &"','"& url &"','"& msg &"','"& Ip &"','"& rubrik &"')")

med:

If Not SpamPattern(msg) Then
	Conn.Execute("Insert Into gastbok(namn, mail, url, msg,ip, rubrik) Values('"& namn &"','"& mail &"','"& url &"','"& msg &"','"& Ip &"','"& rubrik &"')")
End If

Exempelvis.
+ tips från coachen: Bifoga aldrig var du har din databas. ändra path så folk inte hittar din databas.

Medlem sedan aug. 20051 200 inlägg
#8

Tack för hjälpen, skall pröva det omgående.
Antar dock att man kan ändra din kod där,
så den t.ex tar en länk

re.Pattern = "http://mipagina*"

Alltså en * , som förkortar ner adressen?

Och ang. ditt tips från coachen, adressen är ändrad,
ligger en "fejkdatabas" där som dubblett för vissa inlägg.
---------------
Lade upp följande:

Function SpamPattern(str)
	Dim re, FoundMatch
	Set re = New RegExp
	re.IgnoreCase = True
	re.MultiLine = True
	re.Pattern = "http://mywebpage.netscape.com/qsfegzfuy/april-773.html"
	FoundMatch = re.Test(str)
	Set re = Nothing
End Function

If SpamPattern(textFromForm) Then
	Response.Write("Your Message Contains A Spam Classed Link")
Else
	   Conn.Execute("Insert Into gastbok(namn, mail, url, msg,ip, rubrik) Values('"& namn &"','"& mail &"','"& url &"','"& msg &"','"& Ip &"','"& rubrik &"')")
End If

OCh det fungerade tyvärr inte...
Går fortfarande att lägga in inlägg med den länken i
(prövade även att ändra länken som du ser)

Är jag helt korkad ? :(

Medlem sedan juni 20019 519 inlägg
#9

förkorta? Nej men du kan däremot öka vad regExp skall leta efter om du vill det. Om det är alla url:er från mipagina så har du bara:

"http://mipagina\.aol\.com\.mx"

vilket borde träffa alla ändå.

Medlem sedan aug. 20051 200 inlägg
#10

http://rafb.net/p/1pkn2H49.html

Detta är min kompletta gastbok-kod,
dock fungerar inte koden.
Har jag gjort något fel? Förmodligen heh

Medlem sedan juni 20019 519 inlägg
#11

ja du gör fel var kommer variablen textFromForm ifrån? När du försöker köra den? Min gissning är att du vill använda dig av variablen Msg istället.

Medlem sedan aug. 20051 200 inlägg
#12

Problemet kvarstår tyvärr.
Spelar det någon roll vart jag lägger in definitionen av funktionen?
prövat både högst upp på sidan, och precis ovanför funktionen.

Har ändrat till Msg / msg , men funkar ändå inte..
Jag måste va korkad

Medlem sedan juni 20019 519 inlägg
#13
Function SpamPattern(str)
	Dim re
	Set re = New RegExp
	re.IgnoreCase = True
	re.MultiLine = True
	re.Pattern = "http://mipagina\.aol\.com\.mx"
	[b]SpamPattern[/b] = re.Test(str)
	Set re = Nothing
End Function
Medlem sedan aug. 20051 200 inlägg
#14

Nu funkade det - tack så hemskt mycket.
Dock - hur gör jag om jag ska spärra fler adresser?
Måste jag skriva flera sådana "sektioner";
eller räcker det med ett nytt pattern bara?

Tack för din hjälp - uppskattas mycket!

Medlem sedan juni 20019 519 inlägg
#15
Function SpamPattern(str)
	Dim re
	Set re = New RegExp
	re.IgnoreCase = True
	re.MultiLine = True
	re.Pattern = "([url]http://mipagina\.aol\.com\.mx[/url][b]|[url]http://bob\.com)[/url][/b]"
	SpamPattern = re.Test(str)
	Set re = Nothing
End Function
Medlem sedan aug. 20051 200 inlägg
#16

Tack - du är underbar! :)

Medlem sedan aug. 20051 200 inlägg
#17

Då fortsätter jag med mina idiotiska frågor...
Det spamskyddet funkade, dock efter att ha lagt till 6 nya adresser i pattern,
så fortsätter dom att byta adresser, blir ett helvetes jobb.

Finns det något att göra, så att man kanske inte kan posta samma msg flera ggr i rad? Eller har ni något tips på bästat sättet att få stopp på det?

Kommer 60-80 inlägg per dag som minst.

Medlem sedan juni 20019 519 inlägg
#18

Jag hade inte gjort så att man meddelar varför inlägget inte postas.

If Not SpamPattern(Msg) Then
	   Conn.Execute("Insert Into gastbok(namn, mail, url, msg,ip, rubrik) Values('"& namn &"','"& mail &"','"& url &"','"& msg &"','"& Ip &"','"& rubrik &"')")
End If

Men visst.. kollar kanske de top 10 senaste inläggen och om meddelandet är densamma som personen skickar så stoppar du inte in inlägget heller.

Annars så kan man nog göra så OveRRidE har gett tips om tidigare: http://www.webforum.nu/showthread.php?p=1169257#post1169257

292 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
146 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
152 ms — ändringar (db)