トップページにアクセスカウント機能追加とあと一つ機能 #wordpress

20240721

文字数[2805文字] この記事は4分30秒で読めます.

Logging

おはようございます.トップページにアクセスカウント機能追加とあと一つ機能を追加しました.あと一つは他の閲覧者が何の記事を見ているか表示する機能になります.ちなみに最初、プッシャーというモノを使用して構築していたんですが、レンタルサーバーの規約違反になりそうなので取りやめてJSで一分間隔でtxtファイルを見に行くように変更しました.

これだったら、レンタルサーバーに負荷はかからないだろうと言う事で実際に一日、試した結果、負荷は以前と変わらずでしたので良かったです.

作っていて分かったことはロボット巡回が多い...ボットはブロックするように処理を行ったのですが、ヘッドレスブラウザなどで巡回してくるボットには対応出来ていないのが現状です.正直なところ見分けがつかない.

<?php

/**
 * クローラーや不正ボットを検出する関数
 * 
 * @return bool クローラー/不正ボットの場合はfalse、それ以外はtrue
 */
function isLegitimateUser() {
    // User-Agentを取得
    $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
    
    // User-Agentが空の場合は疑わしい
    if (empty($userAgent)) {
        return false;
    }
    
    // 既知のクローラー/ボットのパターン
    $botPatterns = [
        'bot', 'crawl', 'spider', 'slurp', 'scraper',
        'headless', 'phantom', 'selenium', 'puppeteer',
        'curl', 'wget', 'python', 'java', 'perl',
        'scrapy', 'http_request', 'httpclient', 'axios',
        'postman', 'insomnia', 'ahrefs', 'semrush',
        'mj12bot', 'dotbot', 'rogerbot', 'yandex',
        'baiduspider', 'exabot', 'facebot', 'ia_archiver'
    ];
    
    // User-Agentに疑わしいパターンが含まれているかチェック
    $userAgentLower = strtolower($userAgent);
    foreach ($botPatterns as $pattern) {
        if (strpos($userAgentLower, $pattern) !== false) {
            return false;
        }
    }
    
    // 許可する正規のクローラー(必要に応じて)
    $allowedBots = [
        'googlebot', 'bingbot', 'slackbot', 'twitterbot',
        'facebookexternalhit', 'linkedinbot', 'discordbot'
    ];
    
    foreach ($allowedBots as $allowedBot) {
        if (strpos($userAgentLower, $allowedBot) !== false) {
            // 正規のクローラーも拒否したい場合はこの部分を削除
            // return true;
            return false; // クローラーとして扱う場合
        }
    }
    
    // リファラーのチェック(オプション)
    $referer = $_SERVER['HTTP_REFERER'] ?? '';
    
    // 疑わしいリクエストメソッドのチェック
    $method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
    if (!in_array($method, ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])) {
        return false;
    }
    
    // Acceptヘッダーのチェック(通常のブラウザはこれを送信する)
    $accept = $_SERVER['HTTP_ACCEPT'] ?? '';
    if (empty($accept)) {
        return false;
    }
    
    // 正常なユーザーと判断
    return true;
}

// 使用例
if (isLegitimateUser()) {
    echo "正常なユーザーです";
    // 通常の処理を続行
} else {
    echo "クローラーまたは不正ボットです";
    // アクセスを拒否するか、別の処理を実行
    http_response_code(403);
    exit;
}

?>

これは今後の課題になりそうですが、当分は放置です.

明日へ続く.




3084番目の投稿です/567 回表示されています.

中の人🏠️

AIによるおすすめ記事

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


タグ

JS, txt, アクセス, あと, カウント, こと, これ, サーバー, そう, ところ, トップページ, ファイル, プッシャー, ブロック, ヘッドレスブラウザ, ボット, もの, よう, レンタル, ロボット, 一つ, 今後, 以前, 使用, 処理, 変更, 対応, 巡回, 当分, 放置, 明日, 最初, 構築, 機能, 正直, 現状, 結果, 表示, 見分け, 規約, 記事, 課題, 負荷, 追加, 違反, 間隔, 閲覧,