private $filters = array(); /* - Add Filter - 'Unpacks' a text file containing words that should be removed or blocked in strings it is used against. New line = new word. $filterName - the name of the filter, used when there are multiple filters used at different points in the website. $filterPath - where the text file containing the words is located path relative to where this file is. */ public function addFilter($filterName, $filterPath) { $filter = array( $filterName ); // open file $success = true; $file = fopen($filterPath, "r") or $success = false; if ($success) { // sort filtered words while (($line = fgets($file)) !== false) { // remove whitespaces $line = trim($line); // add to filter array_push($filter, $line); } // append filter fclose($file); array_push($this->filters, $filter); return true; } return false; } /* - Add to Filter - Adds word(s) to the filter. $fileName - The name (and path) of the filter text file to add words to. $words - An array containing at least one word to add to the filter. */ public function addToFilter($fileName, $words) { $file = ''; $newWords = array(); if (file_exists($fileName)) { $f = fopen($fileName, "r"); while (($line = fgets($f)) !== false) { $line = trim($line); array_push($newWords, $line); } fclose($f); } foreach ($words as $word) { $included = false; foreach ($newWords as $newWord) { if ($word == $newWord) $included = true; } if (!$included) array_push($newWords, $word); } foreach ($newWords as $newWord) { $file .= trim($newWord) . PHP_EOL; } $f = fopen($fileName, "w+"); fwrite($f, $file); fclose($f); return true; } /* - Remove from Filter - Removes word(s) from the filter. $fileName - The name (and path) of the filter text file to remove words from. $words - An array containing at least one word to remove from the filter. */ public function removeFromFilter($fileName, $words) { $file = ''; $newWords = array(); if (file_exists($fileName)) { $f = fopen($fileName, "r"); while (($line = fgets($f)) !== false) { $line = trim($line); $continue = true; foreach ($words as $word) { if ($word == $line) $continue = false; } if ($continue) array_push($newWords, $line); } } else return false; foreach ($newWords as $newWord) { $file .= trim($newWord) . PHP_EOL; } $f = fopen($fileName, "w+"); fwrite($f, $file); fclose($f); return true; } /* - Filter String - Checks the string against words that are included in a certain filter. - NOTE: If you enter an invalid filter name then this function will return false anyway and may cause some confusion. - If it returns false then the string was filtered and there was no replace string. $filterName - the name of the filter to check the string against. $string - the string to be checked for banned/filtered words. $strict - true means the word just needs to contain a filtered word to be blocked, false means the word must match the filtered word to be blocked. $replace[=''] - if set, replaces the word with this word, otherwise simply returns "" AKA false. */ public function filterString($filterName, $string, $strict = true, $replace = '') { // get the correct filter $filter = null; foreach ($this->filters as $thisFilter) { if ($thisFilter[0] == $filterName) $filter = $thisFilter; } if ($filter == null) return ""; else { $newString = ""; // iterate through each word in the string foreach (explode(" ", $string) as $char) { $match = false; $index = 0; // iterate through each word in the filter bank foreach ($filter as $word) { if ($index > 0) { if ($strict) { // if the word contains this filtered word if (stripos($char, $word) !== false) $match = true; } else { // if the word IS this filtered word if (strtolower($char) == strtolower($word)) $match = true; } } $index++; } if ($match) { if ($replace == "") return false; else $newString .= $replace . " "; } else $newString .= $char . " "; } return $newString; } } /* - IP Banner - Allows you to blacklist certain IP addresses - You can get someone's IP with the PHP function $_SERVER['REMOTE_ADDR']; - Get IPs to ban via text file - Returns true if the IP is banned $fileName - Path to the text file relative to location of this script containing the IP addresses to be blacklisted separated by a new line. $redirectPath - Path to another page to redirect to if the user's IP is blacklisted. Optional, if left blank nothing will happen except return true if this user's IP matches a banned IP address. */ public function blacklist($fileName, $redirectPath = '') { $success = true; if (file_exists($fileName)) { $file = fopen($fileName, "r") or $success = false; $blacklisted = false; if ($success) { // get my IP $ip = $_SERVER['REMOTE_ADDR']; // sort ip addresses while (($line = fgets($file)) !== false) { // remove whitespaces $line = trim($line); // check if this IP = blacklisted IP if ($ip == $line) $blacklisted = true; } fclose($file); if ($blacklisted) { if ($redirectPath == '') return true; else { header('location: ' . $redirectPath); die(); } } } } return false; } /* - Add to IP Blacklist - Adds multiple (or just one) ip address(es) to the blacklist. $fileName - The path and name of the blacklist text file (include the extension .txt) $ipAddresses - An array containing the IP addresses (or just address) to be blacklisted. */ public function addToBlacklist($fileName, $ipAddresses) { $file = ''; $ips = array(); if (file_exists($fileName)) { $f = fopen($fileName, "r"); while (($line = fgets($f)) !== false) { $line = trim($line); array_push($ips, $line); } fclose($f); } foreach ($ipAddresses as $ipAddress) { $included = false; foreach ($ips as $ip) { if ($ipAddress == $ip) $included = true; } if (!$included) array_push($ips, $ipAddress); } foreach ($ips as $ip) { $file .= trim($ip) . PHP_EOL; } $f = fopen($fileName, "w+"); fwrite($f, $file); fclose($f); return true; } /* - Remove from IP Blacklist - Removes multiple (or just one) ip address(es) from the blacklist. $fileName - The path and name of the blacklist text file (include the extension .txt) $ipAddresses - An array containing the IP addresses (or just address) to be removed from the blacklist. */ public function removeFromBlacklist($fileName, $ipAddresses) { $file = ''; $ips = array(); if (file_exists($fileName)) { $f = fopen($fileName, "r"); while (($line = fgets($f)) !== false) { $line = trim($line); $continue = true; foreach ($ipAddresses as $ipAddress) { if ($ipAddress == $line) $continue = false; } if ($continue) array_push($ips, $line); } } else return false; foreach ($ips as $ip) { $file .= trim($ip) . PHP_EOL; } $f = fopen($fileName, "w+"); fwrite($f, $file); fclose($f); return true; } /* - IP White Lister - Allows you to whitelist certain IP addresses so only those IP addresses can access the site. - Returns true if user is on the whitelist. $fileName - Path to the text file relative to the location of this script containing the IP addresses to be whitelisted separated by a new line. $redirectPath - Path to another page to redirect to if the user's IP is not whitelisted. Optional, if left blank nothing will happen except return true if this user's IP matches a whitelisted IP address. */ public function whitelist($fileName, $redirectPath = '') { $success = true; $file = fopen($fileName, "r") or $success = false; $whitelisted = false; if ($success) { // get my IP $ip = $_SERVER['REMOTE_ADDR']; // sort ip addresses while (($line = fgets($file)) !== false) { // remove whitespaces $line = trim($line); // check if this IP = whitelisted IP if ($ip == $line) $whitelisted = true; } fclose($file); if (!$whitelisted) { if ($redirectPath == '') return false; else { header('location: ' . $redirectPath); die(); } } } return true; } /* - Add to IP Whitelist - Adds multiple (or just one) ip address(es) to the whitelist. $fileName - The path and name of the whitelist text file (include the extension .txt) $ipAddresses - An array containing the IP addresses (or just address) to be whitelisted. */ public function addToWhitelist($fileName, $ipAddresses) { $file = ''; $ips = array(); if (file_exists($fileName)) { $f = fopen($fileName, "r"); while (($line = fgets($f)) !== false) { $line = trim($line); array_push($ips, $line); } fclose($f); } foreach ($ipAddresses as $ipAddress) { $included = false; foreach ($ips as $ip) { if ($ipAddress == $ip) $included = true; } if (!$included) array_push($ips, $ipAddress); } foreach ($ips as $ip) { $file .= trim($ip) . PHP_EOL; } $f = fopen($fileName, "w+"); fwrite($f, $file); fclose($f); return true; } /* - Remove from IP Whitelist - Removes multiple (or just one) ip address(es) from the whitelist. $fileName - The path and name of the whitelist text file (include the extension .txt) $ipAddresses - An array containing the IP addresses (or just address) to be removed from the whitelist. */ public function removeFromWhitelist($fileName, $ipAddresses) { $file = ''; $ips = array(); if (file_exists($fileName)) { $f = fopen($fileName, "r"); while (($line = fgets($f)) !== false) { $line = trim($line); $continue = true; foreach ($ipAddresses as $ipAddress) { if ($ipAddress == $line) $continue = false; } if ($continue) array_push($ips, $line); } } else return false; foreach ($ips as $ip) { $file .= trim($ip) . PHP_EOL; } $f = fopen($fileName, "w+"); fwrite($f, $file); fclose($f); return true; }