Назад | Перейти на главную страницу

Как заблокировать поддельный паук Google и поддельный доступ к веб-браузеру?

Недавно я обнаружил, что некоторые парни пытаются отразить мой сайт. Они делают это двумя способами:

  1. Притворись пауками Google. Журналы доступа следующие:

    89.85.93.235 - - [05/May/2015:20:23:16 +0800] "GET /robots.txt HTTP/1.0" 444 0 "http://www.example.com" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "66.249.79.138"
    79.85.93.235 - - [05/May/2015:20:23:34 +0800] "GET /robots.txt HTTP/1.0" 444 0 "http://www.example.com" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "66.249.79.154"
    

    Адрес http_x_forwarded_for - это адреса Google.

  2. Представьте себя обычным веб-браузером.


Я пытаюсь использовать приведенную ниже конфигурацию, чтобы заблокировать их доступ:

Для проблемы 1 я проверю адрес X_forward_for. Если агент пользователя - паук, а X_forward_for не равно нулю. Затем заблокируйте. я использую

map $http_x_forwarded_for $xf {
    default 1;
    "" 0;
}

map $http_user_agent $fakebots {
    default 0;
    "~*bot" $xf;
    "~*bing" $xf;
    "~*search" $xf;
}

if ($fakebots) {
    return 444;
}

С этой конфигурацией кажется, что поддельный паук Google не может получить доступ к корню моего веб-сайта. Но они все еще могут получить доступ к моим файлам php, и они не могут получить доступ к файлам js или css. Очень странно. Я не знаю, что случилось.

Для проблемы 2 пользовательский агент, который заявляет, что они не пауки. Я буду использовать ngx_lua для генерации случайного значения и добавления значения в cookie, а затем проверю, могут ли они отправить это значение обратно или нет. Если они не могут отправить его обратно, это означает, что они робот и блокируют доступ.

map $http_user_agent $ifbot {
    default 0;
    "~*Yahoo" 1;
    "~*archive" 1;
    "~*search" 1;
    "~*Googlebot" 1;
    "~Mediapartners-Google" 1;
    "~*bingbot" 1;
    "~*msn" 1;
    "~*rogerbot" 3;
    "~*ChinasoSpider" 3;
}

if ($ifbot = "0") {
    set $humanfilter 1;
}
    #below section is to exclude flash upload
if ( $request_uri !~ "~mod\=swfupload\&action\=swfupload" ) {
    set $humanfilter "${humanfilter}1";
}


if ($humanfilter = "11") {
    rewrite_by_lua '
    local random = ngx.var.cookie_random
    if(random == nil) then
        random = math.random(999999)
    end
    local token = ngx.md5("hello" .. ngx.var.remote_addr .. random)
    if (ngx.var.cookie_token ~= token) then
      ngx.header["Set-Cookie"] = {"token=" .. token, "random=" .. random}
      return ngx.redirect(ngx.var.scheme .. "://" .. ngx.var.host .. ngx.var.request_uri)
    end
    ';
} 

Но похоже, что с приведенной выше конфигурацией бот Google также заблокирован, хотя этого не должно быть.

И последний вопрос: я пытался использовать "deny", чтобы запретить доступ с IP. Но похоже, что он все еще может получить доступ к моему серверу.

В моей http-части:

deny  69.85.92.0/23;
deny  69.85.93.235;

Но когда я проверяю журнал, я все еще могу найти

69.85.93.235 - - [05/May/2015:19:44:22 +0800] "GET /thread-1251687-1-1.html HTTP/1.0" 302 154 "http://www.example.com" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "123.125.71.107"
69.85.93.235 - - [05/May/2015:19:50:06 +0800] "GET /thread-1072432-1-1.html HTTP/1.0" 302 154 "http://www.example.com" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "220.181.108.151"
69.85.93.235 - - [05/May/2015:20:15:44 +0800] "GET /archiver/tid-1158637.html?page=1 HTTP/1.0" 302 154 "http://www.example.com" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "180.76.5.196"
69.85.93.235 - - [05/May/2015:20:45:09 +0800] "GET /forum.php?mod=viewthread&tid=1131476 HTTP/1.0" 302 154 "http://www.example.com" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "123.125.71.53"

Кто-нибудь может помочь?