Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2068051
  • 博文数量: 178
  • 博客积分: 2076
  • 博客等级: 大尉
  • 技术积分: 2800
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-10 10:50
文章分类

全部博文(178)

文章存档

2010年(4)

2009年(13)

2008年(161)

我的朋友

分类: LINUX

2008-11-02 17:40:43

【簡單而有效防止垃圾廣告Spambot的方法】利用SESSION

  雖說加些Captcha『圖片驗證』功能可防止部份的Spambot(低能型的Spambot)的入侵,但新一代的Spambot已能破解這些Captcha,如入無人之境,而使用Textual Confirmation技術(簡稱TC 文本驗證系統),雖較有效但也造成使用者的不便,且相信有一天一樣會被破解。因這些程式很多也都是以open source 自由軟體的方式提供給大家使用,使用這些程式,就好比是你雖加了一道門鎖,但鑰匙放在那,卻也很容易讓大家知道。

  根本杜絕Spambot的方式是了解Spambot的運作行為模式,這些廣告貼文軟體,通常是不會由你家大門(首頁)進入,選定好討論區、留言板或主題再按發表及回覆,而是直接用貼文章的那一頁來做些傳遞資料(倒垃圾)的動作。所以我們可以加些程式碼來判斷它是否由首頁進入,即可防止絕大多數的Spambot。

  這時我們就可善加利用HTTP Request Header的資訊,當用戶訪問Web伺服器請求一個頁面時,用戶流覽器發送的HTTP請求中會有一個被稱為HTTP請求頭(HTTP Request Header)的資訊,這個頭資訊中包含客戶請求的一些資訊,例如發出請求客戶主機的流覽器版本、用戶語言、用戶作業系統平臺、用戶請求的文檔名等,這些資訊以變數名/變數值的方式被傳輸。這裡頭有個稱之為HTTP REFERER欄位的即可派上用場。

  Referer欄位指定用戶端最後一個頁面的URL位址。例如,如果用戶訪問頁面A,然後點擊在頁面A上到頁面B的鏈結,訪問頁面B的HTTP請求會包括一個Referer欄位,該欄位會包括這樣的資訊“這個請求是來自於頁面A”。如果一個請求不是來自於某個頁面,而是用戶通過直接在流覽器位址欄輸入頁面A的URL位址的方式來訪問頁面A,那麼在HTTP請求中則不會包括Referer欄位。

 所以簡單而有效防止垃圾廣告Spambot的作法:

1.  先在首頁的php程式,註冊一個session變數,並給予一個值,以作為判斷是否造訪過首頁。

例:在首頁的開頭增加如下的程式碼:
<?php
session_start();
session_register(‘check’);
$_SESSION[‘check’]=true;
?>

2.  可在貼文網頁,檢查session變數,判斷是否造訪首頁。並且檢查他的來源網頁參考(HTTP_REFERER)是否來自本地網站的網頁。
方法如下:
<?php
session_start();
$refs = parse_url($_SERVER['HTTP_REFERER']); //分解參考網頁資訊
//檢查首頁session及來源主機是否相同
if(!($_SESSION['check']) || $refs['host'] != $_SERVER['HTTP_HOST'])
exit;
.
.

?>

  這樣只要是Spambot不是由你站上的首頁進入,而想直接藉由貼文頁面來傳遞資料(倒垃圾),即會立即被一腳踢出。嘻~
阅读(625) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~