|
Author: pgregg@pgregg.com Last updated: 8 November 2003
Source Code
<?php /* * PHP Access Control script * Version 1.0 - February 2002 * Version 2.0 - November 2003 * (c) 2002,2003 Paul Gregg <pgregg@pgregg.com> * http://www.pgregg.com * * Function: This file should be included by other php scripts * you maintain an array of the remote IPs/Networks you want to block * and this script prevents them from accessing your main pages. * * Open Source Code: If you use this code on your site for public * access (i.e. on the Internet) then you must attribute the author and * source web site: http://www.pgregg.com/projects/ * You must also make this original source code available for download * unmodified or provide a link to the source. Additionally you must provide * the source to any modified or translated versions or derivatives. * * Continued use of this script is conditional on you changing the default * email addresses defined below. * Updated: Changed the default email addresses as some people failed to * remove my email address. */
$DO_EMAIL_REPORT = TRUE; // Should we email a report to the site owner $DO_EMAIL_ADDRESS = 'SILLYADMIN@DIDNT.READ.THE.INSTRUCTIONS'; // CHANGE THIS $DO_EMAIL_FROM = 'SILLYADMIN@DIDNT.READ.THE.INSTRUCTIONS'; // CHANGE THIS
$DO_SHOWBLOCK = FALSE; // Turn on blocking for all
// Specify a list of messages (web page content) that can be specified // for use against other rules. You can just put the message against the // rule itself, but using this structure saves you repeating. $BLOCK_MESSAGES = array( 'BADCOMPANY' => "<h1>Stop.</h1>\n<p>Permission has not been granted to this site.<br>You are not welcome here.</p>", 'default' => "<h1>Stop.</h1>\n<p>Permission has not been granted to this site.</p>", ); // This is the meaty section. Here you specify the IPs or IP networks // you want to block. // Simply use the IP (or portion of an IP) as the array key and the value // is the message (page) to display to the user matching this pattern. // As you can see there are different sections to check: // $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_VIA'] and // $_SERVER['HTTP_X_FORWARDED_FOR'] (for people hiding behind caches) // You can comment out entries with a #
$BLOCK_PATTERNS = array( 'REMOTE_ADDR' => array( #'195.92.168.' => "<h1>Stop.</h1>\n<p><b>FreeServe Test block</b></p><p>This is a test entry to block the freeserve caches.", '10.2.3.4' => $BLOCK_MESSAGES['BADCOMPANY'], // Block this IP '10.2.150.' => $BLOCK_MESSAGES['default'], // Block this network ), 'HTTP_VIA' => array( 'gateway.badcompany.com' => $BLOCK_MESSAGES['BADCOMPANY'], 'cache.badcompany.com' => $BLOCK_MESSAGES['BADCOMPANY'], ), 'HTTP_X_FORWARDED_FOR' => array( '10.150.150.250' => $BLOCK_MESSAGES['BADCOMPANY'], '10.150.150.251' => $BLOCK_MESSAGES['BADCOMPANY'], '10.3.4.6' => $BLOCK_MESSAGES['default'], ), );
// ------------------------------------------------------------- // Don't change anything below here $IS_BLOCKED = FALSE; // Not blocked by default $msg = ''; // Message to be displayed to the user when blocked $extra_info = ''; // Additional info to be emailed.
if ($DO_SHOWBLOCK) $IS_BLOCKED = TRUE;
foreach($BLOCK_PATTERNS as $server_key => $checklist) { foreach($checklist as $pattern => $textmessage) { $preg_pattern = preg_quote($pattern, '/'); if (preg_match('/'.$preg_pattern.'/', $_SERVER[$server_key])) { $IS_BLOCKED = TRUE; $blockedid = $pattern; $msg = $textmessage; break; } } if($IS_BLOCKED) break; }
if ($IS_BLOCKED) {
print <<<EOBLOCKPAGE <html> <head> <title>Website access denied.</title> <LINK REL="stylesheet" HREF="/style.css" TYPE="text/css"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> </head>
<body background="/images/background-dash-1x2.gif" bgcolor="#ffffff" text="#000000" topmargin="0" leftmargin="0" marginheight="0" marginwidth="0"> <center><table boder=0 width='80%' cellpadding='10' cellspacing='10'> <tr><td> $msg </td></tr> </table></center> </body></html> EOBLOCKPAGE; if (DO_EMAIL_REPORT) mail( $DO_EMAIL_ADDRESS, "WEB BLOCK - access blocked from $blockedid", sprintf( <<<EOM HTTP Host: %s %s Remote Host: %s Remote Addr: %s Http via: %s Http X forw: %s Referrer: %s User Agent: %s EOM , $_SERVER['HTTP_HOST'], $extra_info, $_SERVER['REMOTE_HOST'], $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_VIA'], $_SERVER['HTTP_X_FORWARDED_FOR'], $_SERVER['HTTP_REFERER'], $_SERVER['HTTP_USER_AGENT'] ), "From: $DO_EMAIL_FROM");
exit; } ?>
| |
|