add_hook("pre_output_page", "imeiAntiUrlCache"); function imeiAntiUrlCache_info() { return array( "name" => "*<imei> Anti URL Cache System!", "description" => "This plugin add your pages' links, a random garbage parameter, that this save your users privacy against proxy cache systems that save all urls!", "website" => "http://www.myimei.com", "author" => "imei", "authorsite" => "http://www.myimei.com", "version" => "1.0.1", ); } function imeiAntiUrlCache_activate() { global $db; $db->query("INSERT INTO ".TABLE_PREFIX."settinggroups (name,description,isdefault) VALUES ('*<imei> Anti URL cache plugin', 'Settings for imei anti url cache plugin', 'no')"); $group = $db->insert_id(); $db->query("INSERT INTO ".TABLE_PREFIX."settings (name,title,description,optionscode,value,gid) VALUES ('imeiauc_parameter_name', 'Parameter name', 'You are changing this section of url
http://yourboard/yourscript?paramname=123456789abcdef', 'text', 's', $group)"); $db->query("INSERT INTO ".TABLE_PREFIX."settings (name,title,description,optionscode,value,gid) VALUES ('imeiauc_parameter_len', 'Length of parameter', 'You are changing this section of url
http://yourboard/yourscript?paramname=123456789abcdef', 'text', '8', $group)"); $db->query("INSERT INTO ".TABLE_PREFIX."settings (name,title,description,optionscode,value,gid) VALUES ('imeiauc_report', 'Report', 'Generate a small report as comment at end of each page.', 'yesno', 'yes', $group)"); rebuildsettings(); } function imeiAntiUrlCache_deactivate() { global $db; $result = $db->query("SELECT gid FROM ".TABLE_PREFIX."settinggroups WHERE name = '*<imei> Anti URL cache plugin' LIMIT 1",1); $group = $db->fetch_array($result); $db->query("DELETE FROM ".TABLE_PREFIX."settinggroups WHERE gid = $group[gid] LIMIT 1",1); $db->query("DELETE FROM ".TABLE_PREFIX."settings WHERE gid = $group[gid]",1); rebuildsettings(); } function imeiAntiUrlCache($page) { global $settings; // all $_ variables are for reporting and not needed for general use! $_reporttimer=new timer(); //this line uses internal timer class of mybb and may not work properly if you dont use it! $_reportsizebefore=strlen($page); // what was size of page befor plugin runs? /*****************MAIN ENGINE**********************/ $s= substr(md5(time()),0,$settings['imeiauc_parameter_len']); $imeiRandomParameter=$settings['imeiauc_parameter_name']."=$s&"; $pattern=array( '/\<([^>]*)(href|url)="([^"]*)"([^>]*)target="_blank"([^>]*)\>/i' //for match external urls that must not change ,'/\<([^>]*)(href|url)="(http:\/\/)?([\w\.\-\/~]+)(?(?=\\?)\??(([^"]*)")|("))([^>_]*)\>/i' //match internall links that must add random parameter ); $replacement=array( '<\\1 \\2="\\3"\\4target="_blank"\\5>' ,' <\\1 \\2="\\3\\4?'.$imeiRandomParameter.'\\6"\\8>' ); $page=preg_replace($pattern,$replacement,$page); /*****************MAIN ENGINE**********************/ $_reporttimer->stop(); $_reportsizeafter=strlen($page); $_reporttext=""; if($settings['imeiauc_report']=="yes"){ $_reporttext=" "; } return $page.$_reporttext; } if(!function_exists("rebuildsettings")){ function rebuildsettings() { global $db; $query = $db->query("SELECT * FROM ".TABLE_PREFIX."settings ORDER BY title ASC"); while($setting = $db->fetch_array($query)) { $setting['value'] = addslashes($setting['value']); $settings .= "\$settings['".$setting['name']."'] = \"".$setting['value']."\";\n"; } $settings = ""; $file = fopen("./inc/settings.php", "w"); fwrite($file, $settings); fclose($file); } }