Plugin Directory

Changeset 3385045


Ignore:
Timestamp:
10/27/2025 08:41:24 AM (5 months ago)
Author:
tellyworth
Message:

Version 1.0.1

Location:
underminer/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • underminer/trunk/README.md

    r3384912 r3385045  
    11=== Underminer ===
    22Author: tellyworth
    3 Stable Tag: 1.0.0
     3Stable Tag: 1.0.1
    44Tested Up To: 6.8
    55License: GPLv2 or later
     
    7171Theoretically no; the plugin explicitly allows well-known and well-behaved search engine crawlers if you have your site visibility set to allow them.
    7272
    73 Practically speaking though, there are no guarantees. If your livelihood or self-esteem is dependent on your search engine rankings, **you should not use this plugin**. 
     73Practically speaking though, there are no guarantees. If your livelihood or self-esteem is dependent on your search engine rankings, **you should not use this plugin**.
    7474
    7575= How are bots detected? =
     
    9696
    9797It's not intended as a critical feature, just a little fun.
     98
     99== Changelog ==
     100
     101= 1.0.0 =
     102* Initial public release.
     103
     104= 1.0.1 =
     105* Improved robots.txt rules.
  • underminer/trunk/config/crawler-ip-ranges.php

    r3384912 r3385045  
    33 * Consolidated IP ranges for well-known search engine crawlers
    44 * Auto-generated by fetch-crawler-ips.php
    5  * Generated: 2025-10-27 02:00:51
     5 * Generated: 2025-10-27 08:35:53
    66 *
    77 * Sources:
     
    1111 * - applebot: http://search.developer.apple.com/applebot.json
    1212 * - oai-searchbot: https://openai.com/searchbot.json
     13 * - duckassistbot: https://duckduckgo.com/duckassistbot.json
    1314 * - chatgpt-user: https://openai.com/chatgpt-user.json
    1415 * - perplexity-user: https://www.perplexity.com/perplexity-user.json
     
    647648    28 => '20.169.77.0/25',
    648649  ),
     650  'duckassistbot' =>
     651  array (
     652    0 => '104.43.54.127/32',
     653    1 => '104.43.55.116/32',
     654    2 => '104.43.55.117/32',
     655    3 => '104.43.55.166/32',
     656    4 => '104.43.55.167/32',
     657    5 => '108.141.83.74/32',
     658    6 => '13.89.106.77/32',
     659    7 => '172.169.17.165/32',
     660    8 => '191.233.3.197/32',
     661    9 => '191.233.3.202/32',
     662    10 => '191.234.216.178/32',
     663    11 => '191.234.216.4/32',
     664    12 => '191.235.201.214/32',
     665    13 => '191.235.202.38/32',
     666    14 => '191.235.202.48/32',
     667    15 => '20.113.14.159/32',
     668    16 => '20.113.3.121/32',
     669    17 => '20.12.141.99/32',
     670    18 => '20.185.79.15/32',
     671    19 => '20.185.79.47/32',
     672    20 => '20.191.44.119/32',
     673    21 => '20.191.44.16/32',
     674    22 => '20.191.44.22/32',
     675    23 => '20.191.44.234/32',
     676    24 => '20.191.45.212/32',
     677    25 => '20.193.12.126/32',
     678    26 => '20.193.24.10/32',
     679    27 => '20.193.24.251/32',
     680    28 => '20.193.25.197/32',
     681    29 => '20.193.27.215/32',
     682    30 => '20.193.45.113/32',
     683    31 => '20.195.108.47/32',
     684    32 => '20.197.209.11/32',
     685    33 => '20.197.209.27/32',
     686    34 => '20.201.15.208/32',
     687    35 => '20.204.240.172/32',
     688    36 => '20.204.241.148/32',
     689    37 => '20.204.242.101/32',
     690    38 => '20.204.242.19/32',
     691    39 => '20.204.243.55/32',
     692    40 => '20.204.246.254/32',
     693    41 => '20.204.246.81/32',
     694    42 => '20.207.107.181/32',
     695    43 => '20.207.72.11/32',
     696    44 => '20.207.72.110/32',
     697    45 => '20.207.72.113/32',
     698    46 => '20.207.72.21/32',
     699    47 => '20.207.97.190/32',
     700    48 => '20.207.99.197/32',
     701    49 => '20.219.43.246/32',
     702    50 => '20.219.45.190/32',
     703    51 => '20.219.45.67/32',
     704    52 => '20.226.133.105/32',
     705    53 => '20.232.184.230/32',
     706    54 => '20.3.1.178/32',
     707    55 => '20.40.133.240/32',
     708    56 => '20.43.150.85/32',
     709    57 => '20.43.150.93/32',
     710    58 => '20.43.172.120/32',
     711    59 => '20.44.222.1/32',
     712    60 => '20.49.136.28/32',
     713    61 => '20.50.168.91/32',
     714    62 => '20.50.48.159/32',
     715    63 => '20.50.48.192/32',
     716    64 => '20.50.49.0/32',
     717    65 => '20.50.49.237/32',
     718    66 => '20.50.49.25/32',
     719    67 => '20.50.49.40/32',
     720    68 => '20.50.49.55/32',
     721    69 => '20.50.50.118/32',
     722    70 => '20.50.50.121/32',
     723    71 => '20.50.50.123/32',
     724    72 => '20.50.50.130/32',
     725    73 => '20.50.50.134/32',
     726    74 => '20.50.50.145/32',
     727    75 => '20.50.50.146/32',
     728    76 => '20.50.50.163/32',
     729    77 => '20.50.50.46/32',
     730    78 => '20.53.134.160/32',
     731    79 => '20.53.78.106/32',
     732    80 => '20.53.78.123/32',
     733    81 => '20.53.78.138/32',
     734    82 => '20.53.78.144/32',
     735    83 => '20.53.78.236/32',
     736    84 => '20.53.91.2/32',
     737    85 => '20.53.92.211/32',
     738    86 => '20.56.197.58/32',
     739    87 => '20.56.197.63/32',
     740    88 => '20.61.34.40/32',
     741    89 => '20.62.224.44/32',
     742    90 => '20.71.12.143/32',
     743    91 => '20.72.242.93/32',
     744    92 => '20.73.132.240/32',
     745    93 => '20.73.202.147/32',
     746    94 => '20.75.144.152/32',
     747    95 => '20.79.226.26/32',
     748    96 => '20.79.238.198/32',
     749    97 => '20.79.239.66/32',
     750    98 => '20.80.129.80/32',
     751    99 => '20.93.28.24/32',
     752    100 => '20.99.255.235/32',
     753    101 => '4.156.136.79/32',
     754    102 => '4.182.131.108/32',
     755    103 => '4.195.133.120/32',
     756    104 => '4.209.224.56/32',
     757    105 => '4.213.46.14/32',
     758    106 => '4.228.76.163/32',
     759    107 => '40.114.182.153/32',
     760    108 => '40.114.182.172/32',
     761    109 => '40.114.182.45/32',
     762    110 => '40.114.183.196/32',
     763    111 => '40.114.183.251/32',
     764    112 => '40.114.183.88/32',
     765    113 => '40.119.232.146/32',
     766    114 => '40.119.232.215/32',
     767    115 => '40.119.232.218/32',
     768    116 => '40.119.232.251/32',
     769    117 => '40.119.232.50/32',
     770    118 => '40.64.105.247/32',
     771    119 => '40.64.106.11/32',
     772    120 => '40.76.162.191/32',
     773    121 => '40.76.162.208/32',
     774    122 => '40.76.162.247/32',
     775    123 => '40.76.163.23/32',
     776    124 => '40.76.163.7/32',
     777    125 => '40.76.173.151/32',
     778    126 => '40.80.242.63/32',
     779    127 => '40.81.250.205/32',
     780    128 => '40.88.21.235/32',
     781    129 => '40.89.243.175/32',
     782    130 => '51.104.146.225/32',
     783    131 => '51.104.146.235/32',
     784    132 => '51.104.160.167/32',
     785    133 => '51.104.160.177/32',
     786    134 => '51.104.161.32/32',
     787    135 => '51.104.162.149/32',
     788    136 => '51.104.163.250/32',
     789    137 => '51.104.164.109/32',
     790    138 => '51.104.164.147/32',
     791    139 => '51.104.164.189/32',
     792    140 => '51.104.164.215/32',
     793    141 => '51.104.166.111/32',
     794    142 => '51.104.167.104/32',
     795    143 => '51.104.167.110/32',
     796    144 => '51.104.167.19/32',
     797    145 => '51.104.167.52/32',
     798    146 => '51.104.167.54/32',
     799    147 => '51.104.167.61/32',
     800    148 => '51.104.167.71/32',
     801    149 => '51.104.167.87/32',
     802    150 => '51.104.167.88/32',
     803    151 => '51.104.167.95/32',
     804    152 => '51.104.167.96/32',
     805    153 => '51.104.180.26/32',
     806    154 => '51.104.180.47/32',
     807    155 => '51.104.180.53/32',
     808    156 => '51.107.40.209/32',
     809    157 => '51.116.131.221/32',
     810    158 => '51.120.48.122/32',
     811    159 => '51.138.90.161/32',
     812    160 => '51.138.90.206/32',
     813    161 => '51.138.90.233/32',
     814    162 => '51.8.253.152/32',
     815    163 => '51.8.71.117/32',
     816    164 => '52.142.24.149/32',
     817    165 => '52.142.26.175/32',
     818    166 => '52.143.241.111/32',
     819    167 => '52.143.242.6/32',
     820    168 => '52.143.243.117/32',
     821    169 => '52.143.244.81/32',
     822    170 => '52.143.247.235/32',
     823    171 => '52.143.95.162/32',
     824    172 => '52.143.95.204/32',
     825    173 => '52.146.58.236/32',
     826    174 => '52.146.59.12/32',
     827    175 => '52.146.59.154/32',
     828    176 => '52.146.59.156/32',
     829    177 => '52.146.63.80/32',
     830    178 => '52.148.161.87/32',
     831    179 => '52.148.165.38/32',
     832    180 => '52.149.25.43/32',
     833    181 => '52.149.28.18/32',
     834    182 => '52.149.28.83/32',
     835    183 => '52.149.30.45/32',
     836    184 => '52.149.56.151/32',
     837    185 => '52.149.58.139/32',
     838    186 => '52.149.58.173/32',
     839    187 => '52.149.58.27/32',
     840    188 => '52.149.58.69/32',
     841    189 => '52.149.60.38/32',
     842    190 => '52.149.61.51/32',
     843    191 => '52.154.169.200/32',
     844    192 => '52.154.169.50/32',
     845    193 => '52.154.170.113/32',
     846    194 => '52.154.170.117/32',
     847    195 => '52.154.170.122/32',
     848    196 => '52.154.170.209/32',
     849    197 => '52.154.170.229/32',
     850    198 => '52.154.170.243/32',
     851    199 => '52.154.170.26/32',
     852    200 => '52.154.170.28/32',
     853    201 => '52.154.170.88/32',
     854    202 => '52.154.170.96/32',
     855    203 => '52.154.171.0/32',
     856    204 => '52.154.171.150/32',
     857    205 => '52.154.171.196/32',
     858    206 => '52.154.171.205/32',
     859    207 => '52.154.171.235/32',
     860    208 => '52.154.171.250/32',
     861    209 => '52.154.171.44/32',
     862    210 => '52.154.171.70/32',
     863    211 => '52.154.171.87/32',
     864    212 => '52.154.172.2/32',
     865    213 => '52.154.60.82/32',
     866    214 => '52.190.37.160/32',
     867    215 => '52.224.16.221/32',
     868    216 => '52.224.16.229/32',
     869    217 => '52.224.19.152/32',
     870    218 => '52.224.20.174/32',
     871    219 => '52.224.20.181/32',
     872    220 => '52.224.20.186/32',
     873    221 => '52.224.20.190/32',
     874    222 => '52.224.20.193/32',
     875    223 => '52.224.20.203/32',
     876    224 => '52.224.20.204/32',
     877    225 => '52.224.20.223/32',
     878    226 => '52.224.20.227/32',
     879    227 => '52.224.20.249/32',
     880    228 => '52.224.21.19/32',
     881    229 => '52.224.21.20/32',
     882    230 => '52.224.21.23/32',
     883    231 => '52.224.21.27/32',
     884    232 => '52.224.21.4/32',
     885    233 => '52.224.21.49/32',
     886    234 => '52.224.21.51/32',
     887    235 => '52.224.21.53/32',
     888    236 => '52.224.21.55/32',
     889    237 => '52.224.21.61/32',
     890    238 => '52.242.224.168/32',
     891    239 => '57.152.72.128/32',
     892  ),
    649893  'chatgpt-user' =>
    650894  array (
  • underminer/trunk/config/whitelist.php

    r3384912 r3385045  
    22/**
    33 * Bot configuration for Underminer
    4  * 
     4 *
    55 * This file organizes bots into three categories:
    66 * 1. Known good search bots - These match keys from crawler-ip-ranges.php and undergo IP verification
    77 * 2. Other known acceptable bots - These are trusted bots that don't require IP verification
    88 * 3. Special excluded bots - These are blocked in robots.txt for AI training prevention
    9  * 
     9 *
    1010 * This file is cached by the web server for better performance
    1111 */
     
    1616    'known_good_search_bots' => [
    1717        'googlebot',
    18         'bingbot',
     18        'bingbot', // Note that Bingbot is used both for search and model training.
    1919        'duckduckbot',
    2020        'applebot',
    2121        'oai-searchbot',
    2222    ],
    23    
     23
    2424    // Other known acceptable bots
    2525    // Add bot user agents here to exclude them from content alteration
     
    2828        'Perplexity-User',
    2929    ],
    30    
     30
    3131    // Special excluded bots - these are blocked in robots.txt for AI training prevention
    3232    // These bots are specifically excluded from accessing content via robots.txt
     
    3737        'Applebot-Extended'
    3838    ]
    39 ]; 
     39];
  • underminer/trunk/includes/class-robotstxtmanager.php

    r3384912 r3385045  
    3131        $whitelist_file = UNDERMINER_PLUGIN_DIR . '/config/whitelist.php';
    3232        if ( file_exists( $whitelist_file ) ) {
    33             $this->whitelist = include $whitelist_file;
     33            $whitelist = include $whitelist_file;
     34            /**
     35             * Filters the whitelist.
     36             */
     37            $this->whitelist = \apply_filters( 'underminer_whitelist', $whitelist );
    3438        }
    3539    }
     
    7882        $ai_rules .= "# while still allowing regular search engine crawlers to access RSS feeds for discovery\n\n";
    7983
    80         // Block AI training crawlers from all content including RSS feeds
     84        // Explicitly block AI training crawlers from all content including RSS feeds
    8185        if ( isset( $this->whitelist['special_excluded_bots'] ) ) {
    8286            foreach ( $this->whitelist['special_excluded_bots'] as $crawler ) {
     
    8690        }
    8791
    88         // Add rules to explicitly allow regular crawlers to access RSS feeds
     92        // Start by blocking all bots. Those with more specific rules will override this.
     93        $ai_rules .= "User-agent: *\n";
     94        $ai_rules .= "Disallow: /\n\n";
     95
     96        // Then allow known good search bots
     97        if ( isset( $this->whitelist['known_good_search_bots'] ) ) {
     98            foreach ( $this->whitelist['known_good_search_bots'] as $crawler ) {
     99                $ai_rules .= "User-agent: {$crawler}\n";
     100                $ai_rules .= "Allow: /\n\n";
     101            }
     102        }
     103        // And other acceptable bots
     104        if ( isset( $this->whitelist['other_acceptable_bots'] ) ) {
     105            foreach ( $this->whitelist['other_acceptable_bots'] as $crawler ) {
     106                $ai_rules .= "User-agent: {$crawler}\n";
     107                $ai_rules .= "Allow: /\n\n";
     108            }
     109        }
     110
     111        // Add rules to explicitly allow regular crawlers to access RSS feeds.
     112        // These will apply to all bots.
    89113        $ai_rules .= "# Regular search engine crawlers - allow RSS feed access\n";
    90114        $ai_rules .= "# This ensures RSS feeds remain discoverable by search engines\n";
  • underminer/trunk/underminer.php

    r3384912 r3385045  
    44 * Plugin URI: https://github.com/tellyworth/underminer
    55 * Description: Detects unwanted bots and subtly alters page content to render it incorrect and unusable.
    6  * Version: 1.0.0
     6 * Version: 1.0.1
    77 * Requires at least: 6.4
    88 * Author: tellyworth
     
    2525// If not defined (running from source), use current timestamp
    2626if ( ! defined( 'UNDERMINER_BUILD_TIME' ) ) {
    27     define( 'UNDERMINER_BUILD_TIME', 1761530447 );
     27    define( 'UNDERMINER_BUILD_TIME', 1761554348 );
    2828}
    2929
  • underminer/trunk/vendor/composer/installed.php

    r3384912 r3385045  
    44        'pretty_version' => 'dev-main',
    55        'version' => 'dev-main',
    6         'reference' => '0318f051b86106592d143c06be846545836e9a9b',
     6        'reference' => 'a152c1ffbe00f5106f590721e5078d53ce50005e',
    77        'type' => 'project',
    88        'install_path' => __DIR__ . '/../../',
     
    2323            'pretty_version' => 'dev-main',
    2424            'version' => 'dev-main',
    25             'reference' => '0318f051b86106592d143c06be846545836e9a9b',
     25            'reference' => 'a152c1ffbe00f5106f590721e5078d53ce50005e',
    2626            'type' => 'project',
    2727            'install_path' => __DIR__ . '/../../',
Note: See TracChangeset for help on using the changeset viewer.