如何有效防止網站(留言板)出現垃圾留言,垃圾留言?本文提供詳細解決思路與實現步驟,需要了解的朋友可以參考下一.在表單填寫頁面: <input name=intime1 type=hidden value=<%=Now()%>>
在提交處理頁面,設定提交時間
複製代碼代碼如下:
If DateDiff(s,request.form(intime1), Now()) < 5 then
response.write <SCRIPT language=JavaScript>alert('您的留言速度太快,禁止留言!');
response.write this.location.href='vbscript:history.back()';</SCRIPT>
response.end
end if
二.驗證碼
複製代碼代碼如下:
yz=cstr(request.Form(yz))
yz1=cstr(session(yz1))
if yz1<>yz then
Response.Write(<script language=javascript>alert('請正確輸入驗證碼!');</script>)
response.redirect(sign.asp)
end if
三.判斷來路
複製代碼代碼如下:
server_v1=Cstr(Request.ServerVariables(HTTP_REFERER))
'Response.Write(server_v1)
server_v2=Cstr(Request.ServerVariables(SERVER_NAME))
'Response.Write(server_v2)
if mid(server_v1,8,len(server_v2))<>server_v2 then
Response.Write(<script language=javascript>alert('禁止外部提交資料!');</script>)
response.end
end if
四.設定每日提交次數
複製代碼代碼如下:
'當使用者每提交一次
if request.cookies(postnum)= then
response.cookies(postnum)=1
response.cookies(postnum).expires=DateAdd(h, 24, Now())
else
response.cookies(postnum)=request.cookies(postnum)+1
end if
if request.cookies(postnum) > 3 then
response.write <SCRIPT language=JavaScript>alert('今天留言次數超過限制,禁止留言!');
response.write this.location.href='vbscript:history.back()';</SCRIPT>
response.end
end if
五.禁止IP
複製代碼代碼如下:
server_ip=Cstr(Request.ServerVariables(REMOTE_ADDR))
if right(server_ip,8) = 194.165. then
response.write 禁止重疊提交194.165.
response.End()
end if
1.判斷該發布資訊是否有可靠的來路。只要是自然人發布的,那麼他一定是透過我們提供給用戶的提交頁過來的,一定有一個來路;如果是機器發布的,就不會有來路資訊。
'判斷來路,禁止外部提交
複製代碼代碼如下:
dim server_v1,server_v2
server_v1=Cstr(Request.ServerVariables(HTTP_REFERER))
server_v2=Cstr(Request.ServerVariables(SERVER_NAME))
if server_v1= or instr(server_v1,/add.asp)<=0 or mid(server_v1,8,len(server_v2))<>server_v2 then
response.write <SCRIPT language=JavaScript>alert('來源非法,禁止外部提交!');
response.write this.location.href='vbscript:history.back()';</SCRIPT>
response.end
end if
注意,上面的/add.asp就是提交頁面來源頁。當然,機器也可以偽造來路,這就要結合以下方式一起對付了。
2、驗證碼。驗證碼一直是對付機器垃圾留言的一個可行的方法。不同的驗證碼有不同的對付機器留言的能力,越複雜的驗證碼,機器就越難破解。這需要在考慮使用者的感受和對付機器之間選擇一個平衡點。關於驗證碼的使用方法,我就不多說了,Google、百度裡搜尋下就會出現很多介紹。
3.判斷來源提交的時間。如果在提交頁停留的時間太短,例如20秒,一般只要是個人,他打字的時間都不必這個少。舉例說明,在使用者開啟頁面(如add.asp)的時候,我們記下這個時間,在form提交表單裡增加一個隱藏對象,如:
<input name=intime1 type=hidden value=<%=Now()%>>
然後,當用戶寫好留言評論後提交到具體處理頁面(如addok.asp)的時候,我們獲取當前時間,和add.asp裡的這個intime1時間比較,如果這個時間差小於設定的時間,如20秒,則禁止留言,判斷為機器。程式碼可這樣寫:
複製代碼代碼如下:
If DateDiff(s,request.form(intime1), Now()) < 20 then
response.write <SCRIPT language=JavaScript>alert('您的留言速度太快了吧,禁止留言!');
response.write this.location.href='vbscript:history.back()';</SCRIPT>
response.end
end if
透過以上三種方法可以屏蔽掉絕大部分的機器垃圾留言評論,如果還有大量的留言的話,那多半是人肉留言了。但是,我們又要如何對付人肉留言呢? flymorn也提供方法對付。
方法很簡單,就是透過記錄使用者的cookies以及IP來限制同一用戶發表留言的數量。例如一天24小時內,只允許同一用戶發表資訊5條。我們可以透過以下方法實現。
複製代碼代碼如下:
<%'當使用者每提交一次
if request.cookies(postnum)= then
response.cookies(postnum)=1
response.cookies(postnum).expires=DateAdd(h, 24, Now())
else
response.cookies(postnum)=request.cookies(postnum)+1
end if
if request.cookies(postnum) > 5 then
response.write <SCRIPT language=JavaScript>alert('今天留言次數超過限制,禁止留言!');
response.write this.location.href='vbscript:history.back()';</SCRIPT>
response.end
end if
%>
透過以上的限制,人工發文也得到了一定的限制。上面的方法是基於cookies判斷,當然用戶可以透過瀏覽器清空COOKIES,但這樣增加了他們發送垃圾貼文的難度,提高了門檻。我們也可以繼續判斷發布者的IP,透過同一個IP下發文限制數量來達到我們的目的。在此,就不再擴展,大家可以自己設計如何判斷IP來限制發文的方法。如果您對本文討論的主題有看法或建議,歡迎留下評論,以便我們一起探討。