reenadak icon

manage filters

reenadak | PRO | 02/20/18 07:14:56 PM UTC | 0 ⭐ | 383 👁️ | Never ⏰ | []
PHP |

10.99 KB

|

None

|

0 👍

/

0 👎

    
    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;
    }

Comments