Changeset 3385045
- Timestamp:
- 10/27/2025 08:41:24 AM (5 months ago)
- Location:
- underminer/trunk
- Files:
-
- 6 edited
-
README.md (modified) (3 diffs)
-
config/crawler-ip-ranges.php (modified) (3 diffs)
-
config/whitelist.php (modified) (4 diffs)
-
includes/class-robotstxtmanager.php (modified) (3 diffs)
-
underminer.php (modified) (2 diffs)
-
vendor/composer/installed.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
underminer/trunk/README.md
r3384912 r3385045 1 1 === Underminer === 2 2 Author: tellyworth 3 Stable Tag: 1.0. 03 Stable Tag: 1.0.1 4 4 Tested Up To: 6.8 5 5 License: GPLv2 or later … … 71 71 Theoretically no; the plugin explicitly allows well-known and well-behaved search engine crawlers if you have your site visibility set to allow them. 72 72 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**. 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**. 74 74 75 75 = How are bots detected? = … … 96 96 97 97 It'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 3 3 * Consolidated IP ranges for well-known search engine crawlers 4 4 * Auto-generated by fetch-crawler-ips.php 5 * Generated: 2025-10-27 0 2:00:515 * Generated: 2025-10-27 08:35:53 6 6 * 7 7 * Sources: … … 11 11 * - applebot: http://search.developer.apple.com/applebot.json 12 12 * - oai-searchbot: https://openai.com/searchbot.json 13 * - duckassistbot: https://duckduckgo.com/duckassistbot.json 13 14 * - chatgpt-user: https://openai.com/chatgpt-user.json 14 15 * - perplexity-user: https://www.perplexity.com/perplexity-user.json … … 647 648 28 => '20.169.77.0/25', 648 649 ), 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 ), 649 893 'chatgpt-user' => 650 894 array ( -
underminer/trunk/config/whitelist.php
r3384912 r3385045 2 2 /** 3 3 * Bot configuration for Underminer 4 * 4 * 5 5 * This file organizes bots into three categories: 6 6 * 1. Known good search bots - These match keys from crawler-ip-ranges.php and undergo IP verification 7 7 * 2. Other known acceptable bots - These are trusted bots that don't require IP verification 8 8 * 3. Special excluded bots - These are blocked in robots.txt for AI training prevention 9 * 9 * 10 10 * This file is cached by the web server for better performance 11 11 */ … … 16 16 'known_good_search_bots' => [ 17 17 'googlebot', 18 'bingbot', 18 'bingbot', // Note that Bingbot is used both for search and model training. 19 19 'duckduckbot', 20 20 'applebot', 21 21 'oai-searchbot', 22 22 ], 23 23 24 24 // Other known acceptable bots 25 25 // Add bot user agents here to exclude them from content alteration … … 28 28 'Perplexity-User', 29 29 ], 30 30 31 31 // Special excluded bots - these are blocked in robots.txt for AI training prevention 32 32 // These bots are specifically excluded from accessing content via robots.txt … … 37 37 'Applebot-Extended' 38 38 ] 39 ]; 39 ]; -
underminer/trunk/includes/class-robotstxtmanager.php
r3384912 r3385045 31 31 $whitelist_file = UNDERMINER_PLUGIN_DIR . '/config/whitelist.php'; 32 32 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 ); 34 38 } 35 39 } … … 78 82 $ai_rules .= "# while still allowing regular search engine crawlers to access RSS feeds for discovery\n\n"; 79 83 80 // Block AI training crawlers from all content including RSS feeds84 // Explicitly block AI training crawlers from all content including RSS feeds 81 85 if ( isset( $this->whitelist['special_excluded_bots'] ) ) { 82 86 foreach ( $this->whitelist['special_excluded_bots'] as $crawler ) { … … 86 90 } 87 91 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. 89 113 $ai_rules .= "# Regular search engine crawlers - allow RSS feed access\n"; 90 114 $ai_rules .= "# This ensures RSS feeds remain discoverable by search engines\n"; -
underminer/trunk/underminer.php
r3384912 r3385045 4 4 * Plugin URI: https://github.com/tellyworth/underminer 5 5 * Description: Detects unwanted bots and subtly alters page content to render it incorrect and unusable. 6 * Version: 1.0. 06 * Version: 1.0.1 7 7 * Requires at least: 6.4 8 8 * Author: tellyworth … … 25 25 // If not defined (running from source), use current timestamp 26 26 if ( ! defined( 'UNDERMINER_BUILD_TIME' ) ) { 27 define( 'UNDERMINER_BUILD_TIME', 17615 30447);27 define( 'UNDERMINER_BUILD_TIME', 1761554348 ); 28 28 } 29 29 -
underminer/trunk/vendor/composer/installed.php
r3384912 r3385045 4 4 'pretty_version' => 'dev-main', 5 5 'version' => 'dev-main', 6 'reference' => ' 0318f051b86106592d143c06be846545836e9a9b',6 'reference' => 'a152c1ffbe00f5106f590721e5078d53ce50005e', 7 7 'type' => 'project', 8 8 'install_path' => __DIR__ . '/../../', … … 23 23 'pretty_version' => 'dev-main', 24 24 'version' => 'dev-main', 25 'reference' => ' 0318f051b86106592d143c06be846545836e9a9b',25 'reference' => 'a152c1ffbe00f5106f590721e5078d53ce50005e', 26 26 'type' => 'project', 27 27 'install_path' => __DIR__ . '/../../',
Note: See TracChangeset
for help on using the changeset viewer.