Just nu i M3-nätverket
Gå till innehåll
makke

Spamskydd

Rekommendera Poster

Jag har en ASP-funktion som ser ut som följer:

 

 

Function IsSpam(meddelande)

Dim objRegExp, words

words = "poker|casino|texas|http|seite|none|Phentermine|abc123|phentermine"

 

Set objRegExp = New RegExp

objRegExp.Pattern=words

IsSpam = objRegExp.Test(meddelande)

Set objRegExp = Nothing

End Function

 

 

Nu undrar jag hur jag kan modifiera den så att den fungerar motsatt till vad den gör nu.. Nu släpper den inte igenom inlägg som innehåller orden som anges.. Jag skulle vilja att jag kunde ange ord som måste ingå i meddelanet för att det ska accepteras..

 

 

Tacksam om någon vill hjälpa mig!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Funktionen återger ett boolskt värde ifall den träffar rätt i mönstret.

Nu vet jag inte hur du anropar funktionen men t ex kan det se ut så här:

 

' Släpper inte igenom texter med orden du valt ut
If IsSpam(textstring) Then Response.Write("Spam") End If

' Släpper igenom texterna
If Not IsSpam(textstring) Then Response.Write(textstring) End If

Men du får visa mer var/hur du anropar funktionen.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Inlägget redigerat av moderator på skribentens begäran.

 

[inlägget ändrat 2007-06-11 14:13:06 av Cluster]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Nu ske vi se så vi får med allt och att allt blir rätt...

 

Kan börja med att säga att jag inte är något ASP-programmerare.. Håller normalt på med html och php men tog över jobbet som webmaster på en redan färdig sida nu förra veckan och den är programmerad i asp..

 

Skriptet som redan finns förbjuder vissa inlägg med vissa ord från att hamna i gästboken och jag vill nu lägga till ytterligare ett skript för att kunna checka av att ett6 visst ord skrivits i verifieringsfältet i gästboksformuläret.

 

Och här kommer hela skriptet som används...

[log]<%

Function IsSpam(meddelande)

Dim objRegExp, words

words = "poker|casino|texas|http|seite|none|Phentermine|abc123|phent

ermine"

 

Set objRegExp = New RegExp

objRegExp.Pattern=words

IsSpam = objRegExp.Test(meddelande)

Set objRegExp = Nothing

End Function

 

 

if isSpam(request.form("meddelande")) = false then

namn = Request.form("namn")

epost= Request.form("epost")

hemsida= Request.form("hemsida")

icq = Request.form("icq")

meddelande= Request.form("meddelande")

 

else

response.redirect "gastbok.asp"

end if

 

%>[/log]

 

Insåg nu även fortsättningen

 

[log]<%

If Len(Trim(namn)) > 0 Then

Dim conn, rs

Set conn = Server.CreateObject("ADODB.Connection")

conn.open ""

datum=date()

If Len(Trim(epost)) = 0 Then epost =""

If Len(Trim(hemsida)) = 0 Then hemsida =""

sql = "Insert into gast (Namn,Epost,Hemsida,Meddelande,datum,Icq)"

sql = sql & "Values('"& namn & "','"& epost &"','"& hemsida &"','"& meddelande &"','"

sql = sql & Datum & "','"& icq &"');"

conn.execute(sql)

conn.close

%>[/log]

Tack så mycket för ditt meddelande.

 

Kanske skulle jag här kunna sätta in en ifsats överst typ

If Len(Trim(verifieringsfalt)) == "koden" Then

 

Men isåfall behöver jag hjälp med att formulera det rätt... För Trim har väl med längden på ordet att göra och jämför inte innehållet i orden...? Eller?

 

LOG-taggar tillagda av moderator

 

[inlägget ändrat 2007-06-14 19:09:58 av Cluster]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Visst kan du kolla med en if-sats först av allt.

Då kan du ju bestämma om servern ska belastas mer eller om dem ska skickas tillbaka.

Sen bör du kolla så att epost-adressen följer en standard, så att inte det se ut så t ex f@.se

 

Har inte tid att skriva ett förslag men det kan göra på ett bättre sätt än vad det är nu.

Kanske senare ikväll...eller imorgon...

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ja, jag har ett javascript som tittar att alla fält är ifyllda korrekt, som kollar mailadress osv.. Men spamen tar sig igenom det... det är därför jag drar det så långt som hit..

 

Gästboken består av två sidor.. gastbok.asp och gastbok_visa.asp.. Där gastbok innehåller formuläret och javascriptet och gastbok_visa innehåller databaskopplingen och visandet av gästboken.. Scriptet bör nog blockera inlägget så tidigt som möjligt så servern slipper så mycket belastning som möjligt.. Om sen man hamnar på gastbok_visa eller gastbok spelar ingen större roll eftersom javascriptet sköter alla felmeddelande till vanliga användare..

 

 

Tack så mycket för hjälpen hittills!

Och tack på förhand för kommande hjälp!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Gjorde ett sent(trött) förslag på en förbättring av ditt "spamskydd".

 

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

 

Jag vet inte hur du tänker angående vilka fält som ska vara ifyllda utan chansade på att jag gissade rätt :)

Sen hur du hanterar felmeddealndena på gastbok.asp kan du nog själv knåpa ihop.

Du ser nog att du får komplettera databaskopplingen så den passar dig.

Reserverar mig för teckenfel :)

Vet inte heler vilken databas du använder men datum skrivs in lite olika beroende vilken databas det handlar om.

 

[inlägget ändrat 2007-06-12 23:11:08 av Micke_skane]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tack så jättemycket Micke! Allt ser mycket bra ut, och du har gissat nästan precis rätt.. Ett litet problem kvarstår och det är att inga sidor som jag lägger in koden i fungerar. Programmeringsfel är svaret jag får..

Jag har suttit och läst och läst och försökt förstå men som sagt, asp och jag är av två helt olika släkten (än så länge)

Antalgigen är det som du skriver ett teckenfel och om du, eller någon annan med mer koll skulle vilja läsa igenom koden i vaket tillstånd vore jag jättetacksam!

 

Du får redan poäng av mig för allt ditt engagemang hittills.. =)

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ja, men jag får dessvärre inte mer felmeddelande än att sidan inte kan visas och att det är ett HTTP-fel.. Nummer 500 som , om jag inte minns fel, handlar om ett programmeringsfel. "..Ett serverproblem som hindrar att webbsidan visas, typ ett fel i programmeringen av en interaktiv sida som använder skript."

 

I FF står det visst lite till.. :)

 

 

Microsoft VBScript compilation error '800a0400'

 

Expected statement

 

/new_gastbok.asp, line 62

 

Option Explicit

^

 

Och skulle man helt enkelt ta bort det så får man nästa rad som felmeddelande...:

 

Microsoft VBScript compilation error '800a03f3'

 

Expected '='

 

/new_gastbok.asp, line 62

 

Const strImportent : strImportant = "amts"

-------------------^

 

 

Så så ser det ut...

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Det var ett teckenfel(variabelnamnet) på den raden, rätt är:

Const strImportent : strImportent = "amts"

 

Option Explicit ska vara överst i all Asp-kod!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Micke var nog bara lite trött, skall vara
Ja, snacka inte :) Men som tur är så finns det folk som "backar upp" en i såna lägen :thumbsup:

 

Kan ju tillägga att om man kan använda Command-objectet tillsammans med parametrar så blir det ännu säkrare.

Orkar dock inte modefierar om koden, för många deadlines för tillfälligt...

 

# Såg idag att länken inte längre fungerar till exemplet jag gav dig så jag hoppas du har det kvar i din dator!

 

[inlägget ändrat 2007-06-14 07:46:40 av Micke_skane]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag får det fortfarande inte att funka.. Jag är inte alls med på vad som händer..

 

Men nåt fel gör jag...

 

 

[log]<%Option Explicit%>

 

 

<html>

<head>

<title>main</title>

<style>

a:hover {text-decoration:none; color:000000}

a {text-decoration:none; color:000000}

 

</style>

<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css">

<script language="JavaScript" src="backtoframe.js"></script>

 

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<style>

.form

{

BACKGROUND-COLOR: #FFFFCC;

BORDER-BOTTOM: #CCCC99 1px solid;

BORDER-LEFT: #CCCC99 1px solid;

BORDER-RIGHT: #CCCC99 1px solid;

BORDER-TOP: #CCCC99 1px solid;

FONT-FAMILY: verdana, arial;

FONT-SIZE: 9px; color: #000000}

 

.button

{ BACKGROUND-COLOR: #FFFFFF; BORDER-BOTTOM: #CCCC99 1px solid;

BORDER-LEFT: #CCCC99 1px solid; BORDER-RIGHT: #CCCC99 1px solid; BORDER-TOP:

#CCCC99 1px solid; FONT-FAMILY: verdana, arial; FONT-SIZE: 9px; color:

#000000; FONT-WEIGHT: Bold; clip: rect( )}

</style>

</head>

 

 

<body bgcolor="#FFFFCC" link="#000000" vlink="#000000" alink="#333333">

<div align="center">

<table border="0" cellpadding="0" cellspacing="0" class="text" width="100%">

<tr>

<td width="15"><img src="images/top_left.gif" width="15" height="15"></td>

<td bgcolor="#FFFFFF" background="images/side_top.gif"></td>

<td width="15"><img src="images/top_right2.gif" width="15" height="15"></td>

</tr>

<tr>

<td width="15" height="18" bgcolor="#FFFFFF" background="images/side_left.gif">&nbsp;</td>

<td bgcolor="#FFFFFF">

<div align="center">

<table width="100%" border="0" cellspacing="1" cellpadding="1" align="center" class="text" >

<tr>

<td colspan="3">

<%

Const strImportent = "amts"

 

Dim verifieringsfalt, namn, epost, hemsida, icq, meddelande, words, conn, datum

verifieringsfalt = Trim(Request.Form("verifieringsfalt"))

namn = Trim(Request.Form("namn"))

epost= Trim(Request.Form("epost"))

hemsida= Trim(Request.Form("hemsida"))

icq = Trim(Request.Form("icq"))

meddelande= Trim(Request.Form("meddelande"))

 

Function IsSpam(strText)

words = "poker|casino|texas|http|seite|none|Phentermine|abc123|phentermine"

With New RegExp

.IgnoreCase = True

.Pattern=words

IsSpam = .Test(strText)

End With

End Function

 

Function IsEpost(strEpost)

With New RegExp

.IgnoreCase = True

.Pattern = "^[a-z][\w\.\-%~]*@[\w\.\-]+\.[a-z]{2,4}$"

IsEpost = .Test(strEpost)

End With

End Function

 

If verifieringsfalt <> strImportent Then

sida = "new_gastbok.asp"

Else

If Len(namn)=0 Or Len(meddelande)=0 Then

sida = "new_gastbok.asp"

ElseIf IsSpam(meddelande) Then

sida = "new_gastbok.asp"

ElseIf Len(epost)>0 And Not IsEpost(epost) Then

sida = "new_gastbok.asp"

Else

Set Conn = Server.CreateObject("ADODB.Connection")

Conn.Open "sida.se-gastbok"

datum = Date()

If Len(epost) = 0 Then epost = "" End If

If Len(hemsida) = 0 Then hemsida = "" End If

strInsertSql = "INSERT INTO gast (Namn,Epost,Hemsida,Meddelande,datum,Icq) VALUES ('"& namn & "','"& epost &"','"& hemsida &"','"& meddelande &"','"& Datum & "','"& icq &"')"

Conn.Execute(strInsertSql), ,128

Conn.Close : Set Conn = Nothing

sida = "new_gastbok_visa.asp"

End If

End If

Response.Redirect sida

 

%>

 

<table width="80%" border="0" cellspacing="1" cellpadding="1" align="center" class="text" >

<tr valign="top">

<td height="50"><font size="1">

<%

function nyrad(textstrang)

textstrang = Replace(textstrang, vbCrLf, "<br>")

nyrad = textstrang

end function

%>

<%

 

Set conn = Server.CreateObject("ADODB.Connection")

conn.open "sida.se-gastbok"

sql = "SELECT * FROM gast order by ID desc"

Set rs = Server.CreateObject("ADODB.Recordset")

rs.Open sql, conn,3,1

 

persida = 30

For n = 1 to rs.recordcount step persida

IF n <> 1 then response.write " "

%> <a href="gastbok_visa.asp?visa=<%=n%>"><%=n%> - <%

If n + persida <=rs.recordcount then

Response.Write(n + (persida -1))

Else

Response.Write rs.recordcount

End If

%></a>|<%

Next

%> </font></td>

</tr>

</table>

<hr noshade>

</td>

</tr>

<tr>

<td width="20%" valign="top"><font size="1"><a href="gastbok.asp" class="myLink"><b>Skriv

i gästboken</b> <b>&gt;&gt;</b></a> </font></td>

<td> <font size="1"><br>

</font>

<table width="100%" cellpadding="3" cellspacing="3" border="0">

<%

If rs.eof then

rs.close

set rs = nothing

Else

If request("visa") = "" then

visa = 1

Else

visa = Cint(request("visa"))

End If

rs.move visa -1

For row = visa to visa + (persida -1)

If rs.eof Then Exit For

%>

<tr>

<td width="391" valign="bottom"><font size="1"><i><%=rs("datum")%></i></font></td>

<td align="left" valign="bottom" width="105"> <font size="1"><%

if not isnull(rs("icq")) then

if rs("icq") <> "" then response.write "<img src=""http://wwp.icq.com/scripts/online.dll?icq=" & rs("icq") & "&img=5"">"

else response.write ""

end if

%> <%=rs("icq")%> </font></td>

<td align="center" valign="bottom" width="10">

<div align="center"><font size="1"><a href="mailto:<%=rs("epost")%>">@</a></font></div>

</td>

<td align="center" valign="bottom" width="19">

<div align="center"><font size="1"><a href="<%=rs("hemsida")%>">sajt</a></font></div>

</td>

</tr>

<tr>

<td colspan="4"><font size="1">Namn: <%=rs("namn")%></font></td>

</tr>

<tr bordercolor="#000000">

<td colspan="4"><font size="1">Meddelande: <%=nyrad(rs("meddelande"))%> <br>

<%=rs("id")%></font> <br>

<img src="images/linje_vert_gastbok.gif" width="100%" height="1">

<font size="1"><br>

</font></td>

</tr>

<%

rs.MoveNext

Next

End if

%> <%conn.Close%>

</table>

</td>

<td width="20%"><font size="1"></font></td>

</tr>

<tr>

<td colspan="3" height="37">

<hr noshade>

<font size="1"><a href="gastbok.asp" class="myLink"><b>Skriv i

gästboken</b> <b>&gt;&gt;</b></a></font></td>

</tr>

</table>

</div>

</td>

<td width="15" height="18" bgcolor="#FFFFFF" background="images/side_right.gif">&nbsp;</td>

</tr>

<tr>

<td width="15"><img src="images/bottom_left.gif" width="15" height="15"></td>

<td bgcolor="#FFFFFF" background="images/side_bottom.gif"></td>

<td width="15"><img src="images/bottom_right.gif" width="15" height="15"></td>

</tr>

</table>

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">&copy; Bepe Design

2003</font></div>

</body>

</html>[/log]

 

 

Har även testat att sätta all kod längst upp på sidan samt att skriva

<%'Option Explicit%>

 

LOG-taggar tillagda av moderator

 

[inlägget ändrat 2007-06-14 15:25:38 av Cluster]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Samma sak som tidigare i tråden.. Trots att jag ändrat det hela enligt instruktionerna..

 

 

 

 

Dock så hittar jag ju mer info i FF igen..

 

Microsoft VBScript runtime error '800a01f4'

 

Variable is undefined: 'sida'

 

/new_gastbok_visa.asp, line 80

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Testar du sidorna på din egen dator så kan du slå på detaljerade felmeddelanden istället för att få det där intetsägande Error 500 meddelandet. Säg till om så är fallet så talar jag om hur du gör.

 

Ang. det sista meddelandet så får du det för att du har använt Option Explicit längst upp på sidan. När du har det så måste du deklarera alla dina variabler innan du använder dem. Följande är en deklaration:

Dim sida

 

Jag har inte tid att gå igenom hela koden åt dig så vi får ta det steg för steg. Börja med att ändra följande rad:

Dim verifieringsfalt, namn, epost, hemsida, icq, meddelande, words, conn, datum

till

Dim verifieringsfalt, namn, epost, hemsida, icq, meddelande, words, conn, datum,sida

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag kör sidan på min dator men inte lokalt..

Har kryssad i att den ska visa skriptfel men den visar ändå bara HTTPmeddelanden..

 

Jag har bytt raden men så mycket bättre blir det inte.. Eller jo, den kommer förbi Option Explicit -problemet men det strular fortfarande..

 

Öppnar jag FF så visar den

 

Microsoft VBScript compilation error '800a03f3'

 

Expected '='

 

/new_gastbok.asp, line 62

 

Const strImportent : strImportant = "amts"

-------------------^

 

Trots att jag ändrat det och rensat cookies och temporära filer..

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Const strImportent : strImportant = "amts"

Trots att jag ändrat det och rensat cookies och temporära filer..

Hm, det måste vara cachat på något sätt iallafall. Kör du verkligen filen som du ändrat och inte någon annan fil?

 

Angående felmeddelande i IE så är det i IE du måste göra en ändring. Gå in i Tools->Internet Options->Advanced och kryssa bort "Show friendly HTTP error messages"

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Så, nu har jag pluggat asp och lärt mig en del och löst problemen fram och tillbaka till jag kommit till detta problem...

 

 

Nu fungerar visningen av sidorna men jag kan inte lägga till nya inlägg utan får följande som fel...

 

Microsoft VBScript runtime error '800a01f4'

 

Variable is undefined: 'strInsertSql'

 

/new_gastbok_visa.asp, line 94

 

 

 

Använder samma kod som tidigare...

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Samma sak där som för det tidigare felmeddelandet. Alla variabler som du använder måste deklareras innan du använder dem. Deklarera lämpligen alla variabler du använder i början av filen, så lägg nu till variabeln strInsertSql däruppe:

Dim verifieringsfalt, namn, epost, hemsida, icq, meddelande, words, conn, datum,strInsertSql

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

OKej, borde tänkt på det! Tack!

 

För att slippa svara på den frågan igen, kan du förklara vad som händer när man definierar en variabel? Eller Deklarera kanske det hette..

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
kan du förklara vad som händer när man definierar en variabel? Eller Deklarera kanske det hette..

Rent generellt används en variabeldeklaration till att bl.a tala om för kompilatorn (eller parsern i fallet vbscript) vilket namn och typ en variabel skall ha.

En variabeldefinition sker när du tilldelar en variabel ett värde.

 

När det gäller VBScript så är det lite luddigt eftersom det är ett väldigt löst typat språk. När du använder Option Explicit så krävs att du deklarerar variabler innan du använder dem (vilket även är fallet i de flesta riktiga programmeringsspråk). Att göra detta underlättar enormt mycket i felsökningsprocesser, eftersom ett vanligt programmeringsfel är att man stavar sina variabler fel. Utan Option Explicit får du ingen varning om detta och mycket svårupptäckta buggar uppstår.

 

Jag ger ett extremt enkelt exempel på ett fall utan Option Explicit där stavfel kan ge svårupptäckta problem (inte svårupptäckt här, men i ett komplext system utan tvivel):

 

Dim RättStavadVariabel=10
Summa=FelStavadVariabel + 5
Response.Write Summa

 

Här sitter du nu och glatt förväntar dig en utskrift av siffran 15, men får istället värdet 5. Du får inga felmeddelanden eftersom Option Explicit är avslaget och ingen kontroll över dina variabelnamn finns. Mycket farligt.

Hade du istället haft det påslaget hade du fått en varning om att FelStavadVariabel inte var definierad och på vilken rad. Nu har du hittat felet direkt och slipper en enormt massa felsökande i onödan.

 

----

Slutligen kan sägas att VBScript även definierar standardvärden på variabler precis innan du använder dem om du inte gett dem något värde själv. Vilket standardvärde den får beror på i vilket sammanhang du försöker använda den. Dessutom används en generell Variant-typ för alla variabler (därav uttrycket löst typat). Även detta är två farliga egenskaper hos vbscript som man ska vara väldigt medveten om.

 

Kortfattad förklaring =)

Deklaration: Dim variabelnamn

Definition: variabelnamn=1

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...