จำเป็นต้องหยุดบอทจากการฆ่าเว็บเซิร์ฟเวอร์ของฉัน


9

ฉันมีปัญหาบอทมากในบางเว็บไซต์ของฉันภายในบัญชีโฮสติ้งของฉัน บอทใช้ทรัพยากร CPU ของฉันมากกว่า 98% และแบนด์วิดธ์ 99% สำหรับบัญชีโฮสติ้งทั้งหมดของฉัน บอทเหล่านี้สร้างอัตราการเข้าชมมากกว่า1 GB ต่อชั่วโมงสำหรับเว็บไซต์ของฉัน การจราจรของมนุษย์ที่แท้จริงสำหรับทุกเว็บไซต์เหล่านี้จะน้อยกว่า 100 MB / เดือน

ฉันได้ทำการค้นคว้าอย่างละเอียดเกี่ยวกับไฟล์ robots.txt และ. htaccess เพื่อป้องกันบอทเหล่านี้ แต่วิธีการทั้งหมดล้มเหลว

ฉันได้ใส่รหัสลงในไฟล์ robots.txt เพื่อป้องกันการเข้าถึงไดเรกทอรีสคริปต์ แต่บอท (Google, MS Bing และ Yahoo) เหล่านี้ไม่สนใจกฎและเรียกใช้สคริปต์ต่อไป

ฉันไม่ต้องการบล็อกบ็อต Google, MS Bing และ Yahoo อย่างสมบูรณ์ แต่ฉันต้องการ จำกัด อัตราการรวบรวมข้อมูลที่นั่น การเพิ่มคำสั่งการรวบรวมข้อมูลล่าช้าในไฟล์ robots.txt จะไม่ทำให้บ็อตช้าลง robots.txt และรหัส. htacces ปัจจุบันของฉันสำหรับเว็บไซต์ทั้งหมดระบุไว้ด้านล่าง

ฉันได้ติดตั้งทั้งเครื่องมือของ Microsoft และ Google เว็บมาสเตอร์เพื่อลดอัตราการรวบรวมข้อมูลให้เหลือน้อยที่สุด แต่พวกเขายังคงกดปุ่มเว็บไซต์เหล่านี้ในอัตรา 10 ครั้ง / วินาที

นอกจากนี้ทุกครั้งที่ฉันอัปโหลดไฟล์ที่ทำให้เกิดข้อผิดพลาดเว็บเซิร์ฟเวอร์ VPS ทั้งหมดจะลดลงภายในไม่กี่วินาทีซึ่งฉันไม่สามารถแม้แต่จะเข้าถึงเว็บไซต์ที่แก้ไขปัญหาได้เนื่องจากการโจมตีของบอทเหล่านี้

ฉันจะทำอย่างไรเพื่อหยุดการจราจรบนเว็บไซต์ของฉัน

ฉันพยายามถาม บริษัท เว็บโฮสติ้ง (site5.com) หลายครั้งเกี่ยวกับปัญหานี้ในช่วงหลายเดือนที่ผ่านมาและพวกเขาไม่สามารถช่วยฉันแก้ปัญหานี้ได้

สิ่งที่ฉันต้องการจริงๆคือป้องกันไม่ให้บ็อตรันสคริปต์ rss2html.php ฉันลองทั้งเซสชันและคุกกี้และทั้งสองอย่างล้มเหลว

robots.txt

User-agent: Mediapartners-Google
Disallow: 
User-agent: Googlebot
Disallow: 
User-agent: Adsbot-Google
Disallow: 
User-agent: Googlebot-Image
Disallow: 
User-agent: Googlebot-Mobile
Disallow: 
User-agent: MSNBot
Disallow: 
User-agent: bingbot
Disallow: 
User-agent: Slurp
Disallow: 
User-Agent: Yahoo! Slurp
Disallow: 
# Directories
User-agent: *
Disallow: /
Disallow: /cgi-bin/
Disallow: /ads/
Disallow: /assets/
Disallow: /cgi-bin/
Disallow: /phone/
Disallow: /scripts/
# Files
Disallow: /ads/random_ads.php
Disallow: /scripts/rss2html.php
Disallow: /scripts/search_terms.php
Disallow: /scripts/template.html
Disallow: /scripts/template_mobile.html

.htaccess

ErrorDocument 400 http://english-1329329990.spampoison.com
ErrorDocument 401 http://english-1329329990.spampoison.com
ErrorDocument 403 http://english-1329329990.spampoison.com
ErrorDocument 404 /index.php
SetEnvIfNoCase User-Agent "^Yandex*" bad_bot
SetEnvIfNoCase User-Agent "^baidu*" bad_bot
Order Deny,Allow
Deny from env=bad_bot
RewriteEngine on
RewriteCond %{HTTP_user_agent} bot\* [OR]
RewriteCond %{HTTP_user_agent} \*bot
RewriteRule ^.*$ http://english-1329329990.spampoison.com [R,L]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
# Don't show directory listings for directories that do not contain an index file (index.php, default.asp etc.)
Options -Indexes
<Files http://english-1329329990.spampoison.com>
order allow,deny
allow from all
</Files>
deny from 108.
deny from 123.
deny from 180.
deny from 100.43.83.132

อัปเดตเมื่อต้องการแสดงรหัสตรวจสอบผู้ใช้ของ BOT

<?php
function botcheck(){
 $spiders = array(
   array('AdsBot-Google','google.com'),
   array('Googlebot','google.com'),
   array('Googlebot-Image','google.com'),
   array('Googlebot-Mobile','google.com'),
   array('Mediapartners','google.com'),
   array('Mediapartners-Google','google.com'),
   array('msnbot','search.msn.com'),
   array('bingbot','bing.com'),
   array('Slurp','help.yahoo.com'),
   array('Yahoo! Slurp','help.yahoo.com')
 );
 $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
 foreach($spiders as $bot) {
   if(preg_match("/$bot[0]/i",$useragent)){
     $ipaddress = $_SERVER['REMOTE_ADDR']; 
     $hostname = gethostbyaddr($ipaddress);
     $iphostname = gethostbyname($hostname);
     if (preg_match("/$bot[1]/i",$hostname) && $ipaddress == $iphostname){return true;}
   }
 }
}
if(botcheck() == false) {
  // User Login - Read Cookie values
     $username = $_COOKIE['username'];
     $password = $_COOKIE['password'];
     $radio_1 = $_COOKIE['radio_1'];
     $radio_2 = $_COOKIE['radio_2'];
     if (($username == 'm3s36G6S9v' && $password == 'S4er5h8QN2') || ($radio_1 == '2' && $radio_2 == '5')) {
     } else {
       $selected_username = $_POST['username'];
       $selected_password = $_POST['password'];
       $selected_radio_1 = $_POST['group1'];
       $selected_radio_2 = $_POST['group2'];
       if (($selected_username == 'm3s36G6S9v' && $selected_password == 'S4er5h8QN2') || ($selected_radio_1 == '2' && $selected_radio_2 == '5')) {
         setcookie("username", $selected_username, time()+3600, "/");
         setcookie("password", $selected_password, time()+3600, "/");
         setcookie("radio_1", $selected_radio_1, time()+3600, "/");
         setcookie("radio_2", $selected_radio_2, time()+3600, "/");
       } else {
        header("Location: login.html");
       }
     }
}
?>

ฉันยังเพิ่มต่อไปนี้ไปยังสคริปต์ tss rss2html.php

// Checks to see if this script was called by the main site pages, (i.e. index.php or mobile.php) and if not, then sends to main page
   session_start();  
   if(isset($_SESSION['views'])){$_SESSION['views'] = $_SESSION['views']+ 1;} else {$_SESSION['views'] = 1;}
   if($_SESSION['views'] > 1) {header("Location: http://website.com/index.php");}

คุณอัปเดตเมื่อrobots.txtใด อาจต้องใช้เวลาก่อนที่หุ่นยนต์จะอ่านรุ่นที่อัพเดท
ilanco

ไม่กี่วันที่ผ่านมา สิ่งที่ฉันต้องการจริงๆคือป้องกันไม่ให้บ็อตรันสคริปต์ rss2html.php ฉันลองทั้งเซสชันและคุกกี้และทั้งสองอย่างล้มเหลว

rss2html.phpไซต์ของคุณมีการใช้งานอย่างไร ผ่านทาง PHP รวมถึงการเปลี่ยนเส้นทาง Ajax .... ?
cHao

ไฟล์ rss2html.php ถูกเรียกผ่านคำสั่ง file_get_contents ()

file_get_contents... ? ดูเหมือนจะค่อนข้างแปลก ไฟล์อยู่ในเซิร์ฟเวอร์อื่นหรืออะไร?
cHao

คำตอบ:


3

หากลูกค้าrss2html.phpไม่ได้ใช้งานโดยตรง (นั่นคือถ้ามันเป็น PHP ใช้มันเสมอแทนที่จะเป็นลิงค์หรืออะไรบางอย่าง) แล้วลืมพยายามบล็อกบอท สิ่งที่คุณต้องทำคือกำหนดค่าคงที่หรือบางอย่างในหน้าหลักจากนั้นจึงincludeใช้สคริปต์อื่น ในสคริปต์อื่นให้ตรวจสอบว่ามีการกำหนดค่าคงที่และคายข้อผิดพลาด 403 หรือหน้าว่างหรืออะไรก็ตามที่ไม่ได้กำหนดไว้

ทีนี้เพื่อให้มันใช้งานได้คุณจะต้องใช้includeมากกว่าfile_get_contentsเพราะสิ่งหลังจะอ่านในไฟล์ (หากคุณใช้เส้นทางในเครื่อง) หรือทำงานในกระบวนการอื่นทั้งหมด (ถ้าคุณ ' กำลังใช้ URL) แต่มันเป็นวิธีการที่ Joomla! ใช้เพื่อป้องกันสคริปต์จากการถูกรวมโดยตรง และใช้เส้นทางของไฟล์แทนที่จะเป็น URL เพื่อไม่ให้มีการแยกวิเคราะห์รหัส PHP ก่อนที่คุณจะพยายามเรียกใช้

ยิ่งไปกว่านั้นก็คือการย้ายrss2html.phpออกจากใต้รากของเอกสาร แต่บางโฮสต์ทำให้ยากที่จะทำ ไม่ว่าจะเป็นตัวเลือกนั้นขึ้นอยู่กับการตั้งค่าเซิร์ฟเวอร์ / โฮสต์ของคุณ


1
เจ้าขอบคุณ ขณะนี้ฉันกำลังเขียนรหัสใหม่เพื่อแปลง file_get_contents ที่จะรวมแทน
Sammy

4

คุณสามารถตั้งค่าสคริปต์ของคุณให้โยนข้อผิดพลาด 404 ตามสตริงตัวแทนผู้ใช้ที่บอทเตรียมไว้ - พวกเขาจะได้รับคำแนะนำอย่างรวดเร็วและปล่อยให้คุณอยู่คนเดียว

if(isset($_SERVER['HTTP_USER_AGENT'])){
   $agent = $_SERVER['HTTP_USER_AGENT'];
}

if(preg_match('/^Googlebot/i',$agent)){
   http_response_code(301);
   header("HTTP/1.1 301 Moved Permanently");
   header("Location: http://www.google.com/");
   exit;
}

เลือกผ่านบันทึกของคุณและปฏิเสธ Bingbot ฯลฯ ในลักษณะเดียวกัน - จะไม่หยุดการร้องขอ แต่อาจบันทึกแบนด์วิดท์ - ให้ Googlebot ได้ลิ้มลองยาของตัวเอง - Mwhahahahaha!

Updated

ดูรหัสของคุณฉันคิดว่าปัญหาของคุณอยู่ที่นี่:

if (preg_match("/$bot[1]/i",$hostname) && $ipaddress == $iphostname)

หากพวกเขาเป็นบอทที่เป็นอันตรายพวกเขาอาจจะมาจากที่ใดก็ได้ให้นำ$ipaddressประโยคนั้นออกมาแล้วตอบโต้ด้วย 301 หรือ 404

คิดขึ้นด้านข้างของกล่อง

  1. Googlebot ไม่ยอมรับคุกกี้ดังนั้นจึงไม่สามารถจัดเก็บได้ ในความเป็นจริงหากคุณต้องการคุกกี้สำหรับผู้ใช้ทุกคนนั่นอาจจะทำให้บอทไม่สามารถเข้าถึงหน้าเว็บของคุณได้
  2. Googlebot ไม่เข้าใจรูปแบบ - หรือ - จาวาสคริปต์ดังนั้นคุณสามารถสร้างลิงก์ของคุณแบบไดนามิกหรือให้ผู้ใช้คลิกที่ปุ่มเพื่อเข้าถึงรหัสของคุณ (พร้อมแนบโทเค็นที่เหมาะสม)

    <a href="#" onclick="document.location='rss2html.php?validated=29e0-27fa12-fca4-cae3';">Rss2html.php</a>

    • rss2html.php? validated = 29e0-27fa12-fca4-cae3 - คน
    • rss2html.php - bot

1
ไม่เร็วอย่างที่คุณคิด ฉันเคยเห็นบ็อตไปที่หน้าเว็บที่ไม่มีอยู่เดิมหลายเดือนแม้บางครั้งหลายปีหลังจากหน้านั้นถูกลบ ขึ้นอยู่กับว่าบอททำงานได้ดีแค่ไหนและมันทำงานอย่างไร
cHao

วิธีนี้ใช้ได้ผลกับผู้ใช้ทั่วไปคือไฟล์ index.php เรียกสคริปต์ rss2html.php บอทหลีกเลี่ยงสคริปต์ index.php และรันสคริปต์ rss2html.php โดยตรง ฉันจะป้องกันไฟล์ rss2html.php นั้นได้อย่างไรหากไม่ได้เข้าถึงผ่านสคริปต์ index.php

ลองเปลี่ยนชื่อ rss2html.php เป็นอย่างอื่นและอัปเดต index.php ของคุณเพื่ออ้างอิงชื่อใหม่
BluesRockAddict

ฉันลองเปลี่ยนชื่อไฟล์ แต่มันล้มเหลวหลังจากสองสามวัน ฉันจะเพิ่มรหัสที่ใช้กับเธรดนี้ได้อย่างไร ฉันต้องการแสดงให้คุณเห็นสิ่งที่ฉันได้ลอง

1
ตกลง - ฉันรู้เคล็ดลับที่คุณสามารถดึงได้ :) - ใส่โค้ดสคริปต์ rss2html.php นอกเว็บไซต์ของคุณ (จะอัปเดตคำตอบ)

2

PHP Limit / Block การร้องขอเว็บไซต์สำหรับสไปเดอร์ / บอท / ลูกค้าเป็นต้น

ที่นี่ฉันได้เขียนฟังก์ชัน PHP ซึ่งสามารถบล็อกคำขอที่ไม่ต้องการเพื่อลดปริมาณการใช้เว็บไซต์ของคุณ เหมาะสำหรับสไปเดอร์บ็อตและลูกค้าที่น่ารำคาญ

ไคลเอนต์ / บอทตัวบล็อก

DEMO: http://szczepan.info/9-webdesign/php/1-php-limit-block-website-requests-for-spiders-bots-clients-etc.html

รหัส:

/* Function which can Block unwanted Requests
 * @return array of error messages
 */
function requestBlocker()
{
        /*
        Version 1.0 11 Jan 2013
        Author: Szczepan K
        http://www.szczepan.info
        me[@] szczepan [dot] info
        ###Description###
        A PHP function which can Block unwanted Requests to reduce your Website-Traffic.
        God for Spiders, Bots and annoying Clients.

        */

        # Before using this function you must 
        # create & set this directory as writeable!!!!
        $dir = 'requestBlocker/';

        $rules   = array(
                #You can add multiple Rules in a array like this one here
                #Notice that large "sec definitions" (like 60*60*60) will blow up your client File
                array(
                        //if >5 requests in 5 Seconds then Block client 15 Seconds
                        'requests' => 5, //5 requests
                        'sek' => 5, //5 requests in 5 Seconds
                        'blockTime' => 15 // Block client 15 Seconds
                ),
                array(
                        //if >10 requests in 30 Seconds then Block client 20 Seconds
                        'requests' => 10, //10 requests
                        'sek' => 30, //10 requests in 30 Seconds
                        'blockTime' => 20 // Block client 20 Seconds
                ),
                array(
                        //if >200 requests in 1 Hour then Block client 10 Minutes
                        'requests' => 200, //200 requests
                        'sek' => 60 * 60, //200 requests in 1 Hour
                        'blockTime' => 60 * 10 // Block client 10 Minutes
                )
        );
        $time    = time();
        $blockIt = array();
        $user    = array();

        #Set Unique Name for each Client-File 
        $user[] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'IP_unknown';
        $user[] = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
        $user[] = strtolower(gethostbyaddr($user[0]));

        # Notice that I use files because bots do not accept Sessions
        $botFile = $dir . substr($user[0], 0, 8) . '_' . substr(md5(join('', $user)), 0, 5) . '.txt';


        if (file_exists($botFile)) {
                $file   = file_get_contents($botFile);
                $client = unserialize($file);

        } else {
                $client                = array();
                $client['time'][$time] = 0;
        }

        # Set/Unset Blocktime for blocked Clients
        if (isset($client['block'])) {
                foreach ($client['block'] as $ruleNr => $timestampPast) {
                        $elapsed = $time - $timestampPast;
                        if (($elapsed ) > $rules[$ruleNr]['blockTime']) {
                                unset($client['block'][$ruleNr]);
                                continue;
                        }
                        $blockIt[] = 'Block active for Rule: ' . $ruleNr . ' - unlock in ' . ($elapsed - $rules[$ruleNr]['blockTime']) . ' Sec.';
                }
                if (!empty($blockIt)) {
                        return $blockIt;
                }
        }

        # log/count each access
        if (!isset($client['time'][$time])) {
                $client['time'][$time] = 1;
        } else {
                $client['time'][$time]++;

        }

        #check the Rules for Client
        $min = array(
                0
        );
        foreach ($rules as $ruleNr => $v) {
                $i            = 0;
                $tr           = false;
                $sum[$ruleNr] = 0;
                $requests     = $v['requests'];
                $sek          = $v['sek'];
                foreach ($client['time'] as $timestampPast => $count) {
                        if (($time - $timestampPast) < $sek) {
                                $sum[$ruleNr] += $count;
                                if ($tr == false) {
                                        #register non-use Timestamps for File 
                                        $min[] = $i;
                                        unset($min[0]);
                                        $tr = true;
                                }
                        }
                        $i++;
                }

                if ($sum[$ruleNr] > $requests) {
                        $blockIt[]                = 'Limit : ' . $ruleNr . '=' . $requests . ' requests in ' . $sek . ' seconds!';
                        $client['block'][$ruleNr] = $time;
                }
        }
        $min = min($min) - 1;
        #drop non-use Timestamps in File 
        foreach ($client['time'] as $k => $v) {
                if (!($min <= $i)) {
                        unset($client['time'][$k]);
                }
        }
        $file = file_put_contents($botFile, serialize($client));


        return $blockIt;

}


if ($t = requestBlocker()) {
        echo 'dont pass here!';
        print_R($t);
} else {
        echo "go on!";
}

1

อาจเป็นไปได้ว่าเว็บไซต์ของคุณถูกทำดัชนีโดย google bot ปลอม คุณสามารถลองเพิ่มการตรวจสอบและแสดง 404 สำหรับคำขอบอต google ปลอมทั้งหมด

นี่คือบทความที่อธิบายถึงวิธีการยืนยัน Googlebot: http://googlewebmastercentral.blogspot.com/2006/09/how-to-verify-googlebot.html

นอกจากนี้คุณสามารถตรวจสอบบันทึกของคุณกับบอทปลอมที่รู้จัก: http://stopmalvertising.com/security/fake-google-bots.html


ขอบคุณ แต่จริง ๆ แล้วฉันก็ลองทำเช่นนั้นกำหนดตัวแทนผู้ใช้และส่งบอทไปที่หน้าเข้าสู่ระบบ สิ่งนี้ก็ล้มเหลวเช่นกัน

ดูเหมือนว่าคุณกำลังพลาดจุด - การพึ่งพาตัวแทนผู้ใช้ในการพิจารณาความถูกต้องของบอทนั้นไม่เพียงพอ
BluesRockAddict

1

คุณควรตรวจสอบให้แน่ใจตั้งแต่แรกว่าหน้าใด ๆ ที่ร้องขอจากผู้ใช้ของโปรแกรมรวบรวมข้อมูลที่ไม่เหมาะสมใด ๆ ที่คุณได้รับจะได้รับบริการหน้าคงที่

apache mod_rewrite ที่มีเงื่อนไขหรือ equiv กับเซิร์ฟเวอร์ http ของคุณ สำหรับ apache สิ่งนี้:

RewriteCond  %{HTTP_USER_AGENT}  ^GoogleBot [OR]
RewriteCond  %{HTTP_USER_AGENT}  ^OtherAbusiveBot
RewriteRule  ^/$                 /static_page_for_bots.html  [L]

ขอบคุณ แต่ฉันไม่ต้องการบล็อกบ็อต Google, MS Bing และ Yahoo อย่างสมบูรณ์ แต่ฉันต้องการ จำกัด การเข้าถึงโดยตรงในไฟล์สคริปต์ rss2html.php ฉันต้องเพิ่มบางอย่างในตอนต้นของสคริปต์ rss2html.php ที่จะป้องกันไม่ให้ทำงานหากไม่ได้เข้าถึงผ่านสคริปต์ index.php บอตกำลังรันสคริปต์ rss2html.php โดยการข้ามไฟล์ index.php
Sammy

นี่ไม่ได้บล็อคพวกเขา .. คุณเพียงแค่ให้บริการ php เวอร์ชันแคชของคุณ .. มันง่ายมากสำหรับเซิร์ฟเวอร์ที่ต้องทำมันเป็นอินสแตนซ์ php ที่น้อยกว่า / กระบวนการลูก apache ที่น้อยกว่า => ราคา (ไฟล์คงที่) <ราคา (อินสแตนซ์ php)
smassey

ฉันจะแคชหน้าได้อย่างไร เนื่องจากหน้าเว็บเป็น RSS หน้าแคชจะถูกรีเฟรชบ่อยครั้งเพียงพอที่จะให้ข้อมูลใหม่หรือไม่
Sammy

แน่นอน ... เขียน cronjob ที่เหมาะกับคุณ ถ้าคุณบอกว่าพวกเขาไปที่เซิร์ฟเวอร์ 10req / s หากคุณแคชหน้าเว็บสำหรับ 1 นาทีคุณได้บันทึกเซิร์ฟเวอร์ของคุณอินสแตนซ์ php เพิ่มเติม 599 รายการ (ซึ่งรวมถึงการเชื่อมต่อฐานข้อมูล / แบบสอบถามด้วย) แน่นอน .. และอีกหนึ่งนาที สำหรับ: 10/15 นาที
smassey

1

หากต้องการโพสต์ของ smassey ต่อคุณสามารถกำหนดเงื่อนไขได้หลายประการ:

RewriteCond  %{HTTP_USER_AGENT}  ^GoogleBot [OR]
RewriteCond  %{HTTP_USER_AGENT}  ^OtherAbusiveBot
RewriteRule  ^rss2html\.php$     /static.html  [L]

ด้วยวิธีนี้บอทยังคงเข้าถึงหน้าเว็บของคุณ แต่ไม่ใช่หน้าจอนั้น เป็นเรื่องแปลกที่บอต (ถูกกฎหมาย) ไม่รักษากฎคุณมีผู้อ้างอิงที่ผลักบอทไปยังหน้าเว็บของคุณจากแหล่งอื่น (ส่งต่อชื่อโดเมน, ... )


1

ฉันได้รับการแก้ไขปัญหาเดียวกันกับสคริปต์ที่มีอยู่ในhttp://perishablepress.com/blackhole-bad-bots/ ด้วยวิธี blackhole นี้ฉันรวบรวมรายชื่อของ ip ที่ประสงค์ร้ายแล้วใช้. htaccess ปฏิเสธพวกเขา (ซึ่งไม่ได้รับคำสั่งเนื่องจากสคริปต์เองนั้นทำการแบน แต่ฉันต้องลดการโหลดเซิร์ฟเวอร์โดยหลีกเลี่ยง php ในการแยกวิเคราะห์สำหรับ ips ที่ไม่ต้องการ) ในสามวันปริมาณการใช้งานของฉันลดลงจาก 5GB ต่อวันเหลือ 300MB ซึ่งคาดว่าเงียบ

ตรวจสอบหน้านี้เพื่อดูรายการทั้งหมดของกฎ htaccess เพื่อบล็อกบ็อตขยะที่เป็นที่รู้จักมากมาย http://www.askapache.com/htaccess/blocking-bad-bots-and-scrapers-with-htaccess.html


0
// Checks to see if this script was called by the main site pages,
// (i.e. index.php or mobile.php) and if not, then sends to main page
session_start();  
if (isset($_SESSION['views'])) {$_SESSION['views'] = $_SESSION['views']+ 1;} else {$_SESSION['views'] = 1;}
if ($_SESSION['views'] > 1) {header("Location: http://website.com/index.php");}

สคริปต์นี้ไม่ได้ทำสิ่งที่ความคิดเห็นพูดในความเป็นจริงมันตรงกันข้ามทั้งหมด นี้จะมักจะให้บอทผ่านเนื่องจากตัวแปรเซสชั่นจะไม่ถูกตั้งค่าเมื่อบอทขอสคริปต์ของคุณ สิ่งที่มันอาจทำคือป้องกันคำขอที่ถูกกฎหมาย (จาก index.php หรือ mobile.php) ไม่ให้เรียกสคริปต์มากกว่าหนึ่งครั้ง

เพื่อป้องกันบอทจากการเข้าถึงสคริปต์ของคุณคุณควรอนุญาตให้เข้าถึงเฉพาะเมื่อมีการตั้งค่าตัวแปรเซสชัน (หรือคุกกี้) จริง สมมติว่าบอท (ที่เป็นอันตราย) ไม่ยอมรับคุกกี้ (เรารู้ว่า Googlebot ตัวจริงทำไม่ได้)

ดังที่ได้กล่าวไปแล้วการวาง rss2html.php ไว้เหนือเว็บรูท (นอกพื้นที่เว็บสาธารณะ) จะป้องกันบอทไม่ให้เข้าถึงสคริปต์โดยตรง - แต่คุณบอกว่านี่เป็นสาเหตุของปัญหาอื่นหรือไม่? หรือวางไว้ในไดเรกทอรีและป้องกันไดเรกทอรีนั้นด้วย. htaccess หรือคุณอาจจะสามารถป้องกันเพียงแค่ไฟล์เองใน. htaccess จากการร้องขอโดยตรง


0

ไปตั้งค่าโดเมนของคุณบน Cloudflare (บริการฟรีสำหรับสิ่งนี้) พวกเขาบล็อกบอทที่เป็นอันตรายในระดับโดเมนก่อนที่พวกเขาจะตีเซิร์ฟเวอร์ของคุณ ใช้เวลาประมาณ 20 นาทีไม่ต้องลิงด้วยรหัส

ฉันใช้บริการนี้ในเว็บไซต์ทั้งหมดของฉันและเว็บไซต์ลูกค้าทั้งหมด พวกเขาระบุบอทที่เป็นอันตรายโดยใช้เทคนิคหลายประการรวมถึงการใช้ประโยชน์จากโครงการฮันนี่หม้อ


0

สิ่งที่คุณต้องทำคือติดตั้งใบรับรอง SSL บนเซิร์ฟเวอร์ของคุณสำหรับ apache / nginx / email / ftp เปิดใช้งาน HSTS และคุณต้องแก้ไขไฟล์ ssl.conf เพื่อให้ SSLv2 SSLv3 TLSv1 ปิดใช้งานและไม่อนุญาตการเชื่อมต่อขาเข้า เสริมความแข็งแกร่งให้กับเซิร์ฟเวอร์ของคุณอย่างถูกวิธีและคุณจะไม่มีปัญหาใด ๆ จากบอท


ฉันยังไม่ชัดเจนว่าปัญหาอะไรที่ SSL / TLS กำลังแก้ไขในกรณีนี้ ดูเหมือนว่าคุณกำลังขอทานคำถามและมาถึงผลลัพธ์ โปรดอธิบายวิธีการแก้ปัญหานี้ควบคุมปัญหา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.