湘里妹子学术网

 找回密码
 注册
查看: 3171|回复: 0

阻止機器人亂貼廣告

[复制链接]
发表于 2006-8-12 22:18:46 | 显示全部楼层 |阅读模式
你的新聞發佈區、提供下載區經常被不知名人士貼了亂七八糟的色情、賭場........之類的廣告嗎?

一般情況下,這些就是所謂的「機器人廣告」。這樣的機器人可以在好幾個國家的ip之間轉換、在一分鐘之內環繞地球一圈;「封鎖ip」這個方法根本拿他沒輒。

當然,並非拿他毫無辦法!!

你可以安裝 NukeSentinel 的防衛套件
或者,在適當的地方插入一些限制程序,讓非會員的「機器人」不能進入

另一個比較簡單快速的方法,就是比照註冊程序,自己動手安裝一道「安全辨識碼」的守門員;這個作法只會限制到「機器人」,施工也不難,是比較好的對策

送出一張帶有數字的小圖片,讓提供 news的用戶填寫.........
這樣一來,廣告機器人都過不了門檻了

施工原則:

1.在輸入表單前面,插入一個亂數產生器、識別圖片產生器.......
像這樣:

  1. mt_srand ((double)microtime()*1000000);
  2. $maxran = 1000000;
  3. $checkpass = mt_rand(0, $maxran);

  4. if (extension_loaded("gd")) {
  5.     $codepass = "<img src='gfx.php?random_num=$checkpass' border='1' alt='Security Code : $checkpass' width='77' height='20'>";
  6. } else {
  7.     $codepass = "<font color="#FFFF00"><b>$checkpass</b></font>";
  8. }
复制代码


2.接著,在「輸入表單」裡面插入一些零件....... 類似這樣:

  1. <form ...........>
  2. <input type="hidden" name="checkpass" value="$checkpass">
  3. 安全確認碼:
  4. <img src='gfx.php?random_num=$checkpass' width='77' height='20'>
  5. 在此輸入安全確認碼: <input type="text" size="20" name="passcode">
  6. </form>
复制代码



上面那個 $checkpass , 就是亂數產生器製造的「亂數」.

3.當表單被送出來之後,我們就在form action 指定的接收端攔截資料,辨識碼正確時放行,辨識碼錯誤就踢回去....

程序如下:

  1.     if ($_POST["checkpass"]!=""){
  2.        global $sitekey;
  3.        $datekey = date("F j");
  4.          $rcode = hexdec(md5($_SERVER['HTTP_USER_AGENT'] . $sitekey . $_POST['checkpass'] . $datekey));
  5.          $code = substr($rcode, 2, 6);
  6.        if ($code != $_POST["passcode"]){
  7.            header("Location: $url");
  8.            exit;
  9.           }
  10.         
  11.     }
复制代码


header("Location: $url"); 也可以換為其他的處置方式,以你的需要為準
識別圖片產生器:gfx.php 可以在本站下載區找到

現在,我們介紹PHP-Nuke-7.9.0.3.2e\modules\Submit_News 「安全辨識碼守門員」的實際製作過程,大家參考一下

施工的範圍就在這裡: PHP-Nuke-7.9.0.3.2e/modules/Submit_News/index.php

首先,在本站下載區找到 gfx.7z,解開之後,把裡面的 gfx.php送入你的網站主目錄底下

第二步:

開啟 PHP-Nuke-7.9.0.3.2e/modules/Submit_News/index.php

在 function PreviewStory 裡面找到這一堆程序:
  1. echo "<input type="submit" name="op" value=""._PREVIEW."">&nbsp;&nbsp;"
  2.    ."<input type="submit" name="op" value=""._OK.""></form>";
复制代码


把他改成這樣:

  1. mt_srand ((double)microtime()*1000000);
  2. $maxran = 1000000;
  3. $checkpass = mt_rand(0, $maxran);

  4. if (extension_loaded("gd")) {
  5.     $codepass = "<img src='gfx.php?random_num=$checkpass' border='1' alt='Security Code : $checkpass' width='77' height='20'>";
  6. } else {
  7.     $codepass = "<font color="#FFFF00"><b>$checkpass</b></font>";
  8. }
  9.     echo "<br><br>";
  10.     echo "<input type="hidden" name="checkpass" value="$checkpass">";
  11.     echo "<table><tr><td><b>"._SECURITYCODE.":</b></td><td>$codepass</td></tr>"
  12.     ."<tr><td><b>"._TYPESECCODE.":</b></td>"
  13.     ."<td><input type="text" size="20" name="passcode"></td></tr></table><br>";
  14.         
  15.    echo "<input type="submit" name="op" value=""._PREVIEW."">&nbsp;&nbsp;"
  16.    ."<input type="submit" name="op" value=""._OK.""></form>";
复制代码


接著,找到這些:

  1. function submitStory($name, $address, $subject, $story, $storyext, $topic, $alanguage) {
  2.    global $user, $EditedMessage, $cookie, $anonymous, $notify, $notify_email, $notify_subject, $notify_message, $notify_from, $prefix, $db;
  3.    if (is_user($user)) {
  4.       cookiedecode($user);
  5.       $uid = $cookie[0];
  6.       $name = $cookie[1];
  7.    } else {
  8.       $uid = 1;
  9.       $name = "$anonymous";
  10.    }
复制代码


在下方插入這些:
  
  1.        global $sitekey;
  2.        $datekey = date("F j");
  3.    $rcode = hexdec(md5($_SERVER['HTTP_USER_AGENT'] . $sitekey . $_POST['checkpass'] . $datekey));
  4.    $code = substr($rcode, 2, 6);
  5.    if ($code != $_POST["passcode"]){
  6.        header("Location: index.php"); // 辨識碼不合格者通通踢回首頁
  7.        exit;
  8.     }
复制代码
      
   
修改之後,畫面看起來是這樣的:


ok~ 施工完畢,測試看看吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|湘里妹子学术网 ( 粤ICP备2022147245号 )

GMT++8, 2024-4-29 07:45 , Processed in 0.066762 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表