GithubHelp home page GithubHelp logo

cloudxtreme / chkproxy Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kujoe/chkproxy

0.0 1.0 0.0 113 KB

A simple WHMCS hook that checks if the client is using a proxy/VPN prior to ordering (saves tickets and time).

License: MIT License

PHP 100.00%

chkproxy's Introduction

Proxy/VPN Detection Hook for WHMCS by KuJoe (JMD.cc)

1.1 -	Fixed bug that caused duplicate lookups to MaxMind.
1.2 -	Fixed bug that caused client account to be registered even if order was blocked.
		Replaced redirect with error message on the shopping cart.
		Removed template files.
1.3 -	Fixed version number typo.
		Better formatting and comments for non-code savvy users.
		Updated instructions.
1.4 -	Added database table to conserve MaxMind queries and for reviewing scores.
		Created a WHMCS report for the last 50 proxy check scores.
1.5 -	Fixed script to only write to the database once per IP address.
		Script generates e-mail alerts when the MaxMind lookup returns something other than a numeric score.
		Added database field that allows ignoring IPs that fail VPN checks.
1.6 -	Fixed the ignore IP option.
		Fixed e-mail alerts.
		IPs can be ignored/unignored in the Last 50 Proxy Checks report.
1.7 -	Limited Last 50 Proxy Checks report to 50. (Doh!)
1.8 -	Added 2nd hook and report for GetIPIntel.net (free Maxmind alternative)
1.9 -	Updated hook for GetIPIntel.net to meet future requirement (contact info required to help the developer troubleshoot issues)
	
//Requirements:
You need to purchase Proxy Detection queries from MaxMind for the Maxmind hook (the free minFraud queries will NOT work). http://www.maxmind.com/en/proxy

//Installation:
1) Set $license_key in chkProxy_maxmind.php file if you wish to use Maxmind's database to check IPs.
2) Set $email in both chkProxy files.
3) Upload the chkProxy files into your WHMCS's hooks directory (/includes/hooks/).
4) Upload the last_50_proxy_checks files into your WHMCS's reports directory (/modules/reports/).
5) Run these query to create the database tables (run this command in phpMyAdmin, Adminer, SQLBuddy, command line, or your MySQL editor of choice):
-- START QUERY
CREATE TABLE IF NOT EXISTS `mod_chkproxy_mm` (
	  `chkid` int(11) NOT NULL AUTO_INCREMENT,
	  `ipaddr` varchar(40) NOT NULL,
	  `proxyscore` varchar(4) NOT NULL,
	  `ignore` int(1) NOT NULL DEFAULT '0',
	  `dt` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	  PRIMARY KEY (`chkid`)
);
CREATE TABLE IF NOT EXISTS `mod_chkproxy_gii` (
	  `chkid` int(11) NOT NULL AUTO_INCREMENT,
	  `ipaddr` varchar(40) NOT NULL,
	  `proxyscore` varchar(4) NOT NULL,
	  `ignore` int(1) NOT NULL DEFAULT '0',
	  `dt` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	  PRIMARY KEY (`chkid`)
);
-- END QUERY

//Upgrading:
Upgrading from version 1.4 and older
1) Run the following MySQL query:
-- START QUERY
DELETE n1 FROM mod_chkproxy n1, mod_chkproxy n2 WHERE n1.chkid < n2.chkid AND n1.ipaddr = n2.ipaddr;
-- END QUERY

Upgrading from version 1.7 and older
1) Delete /includes/hooks/chkproxy.php from WHMCS.
2) Delete /modules/reports/last_50_proxy_checks.php from WHMCS.
3) Run the following MySQL query:
-- START QUERY
RENAME TABLE mod_chkproxy TO mod_chkproxy_mm;
-- END QUERY
4) Set $license_key in chkProxy_maxmind.php file if you wish to use Maxmind's database to check IPs.
5) Set $email in both chkProxy files.
6) Upload the chkProxy files into your WHMCS's hooks directory (/includes/hooks/).
7) Upload the last_50_proxy_checks files into your WHMCS's reports directory (/modules/reports/).
8) Run these query to create the database tables (run this command in phpMyAdmin, Adminer, SQLBuddy, command line, or your MySQL editor of choice):
-- START QUERY
CREATE TABLE IF NOT EXISTS `mod_chkproxy_mm` (
	  `chkid` int(11) NOT NULL AUTO_INCREMENT,
	  `ipaddr` varchar(40) NOT NULL,
	  `proxyscore` varchar(4) NOT NULL,
	  `ignore` int(1) NOT NULL DEFAULT '0',
	  `dt` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	  PRIMARY KEY (`chkid`)
);
CREATE TABLE IF NOT EXISTS `mod_chkproxy_gii` (
	  `chkid` int(11) NOT NULL AUTO_INCREMENT,
	  `ipaddr` varchar(40) NOT NULL,
	  `proxyscore` varchar(4) NOT NULL,
	  `ignore` int(1) NOT NULL DEFAULT '0',
	  `dt` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	  PRIMARY KEY (`chkid`)
);
-- END QUERY

//Optional:
A) Edit $max_score to fine tune detection (lower means will block more proxies but also have a higher change of blocking legit clients also). SEE ADDITIONAL INFORMATION.
B) Edit $error to fit your needs and match your template. To test your error message without access to a proxy/VPN, just set the $max_score to 0.00 to force the message to trigger (no orders will be processed until this is changed back).

//Additional Information:
You can run both hooks (Maxmind and GetIPIntel) in tandem or you can pick one to run instead.

MAXMIND - A paid service with highly accurate proxy/VPN database. Founded in 2002 and proven reliable. Fewer false positives but fails to identify some proxy/VPNs.
A $max_score of 1.7-1.8 is recommended. I've found that many large data centers return a score of 1.8 and every US residential ISP that I've tested has been a 0.00 so you can adjust accordingly. If you want to find the score of a specific IP address use the following URL in your browser:
https://minfraud.maxmind.com/app/ipauth_http?l=YOURLICENCEKEY&i=IPADDRESS

GETIPINTEL - A free service with a fairly accurate proxy/VPN detection algorithm. Founded in 2014 and constantly improving. More false positives but identifies more proxy/VPNs than Maxmind.
A $max_score of 0.95 is recommended to prevent false positives and as the service matures the recommended $max_score will be lowered. Set to 1 if you want to just block known bad IPs. More details about this project can be found at http://getipintel.net and if you want to find the score of a specific IP address use the following URL in your browser:
http://check.getipintel.net/check.php?ip=IPADDRESS&contact=EMAIL

If your website is behind a reverse proxy (i.e. CloudFlare) this hook might not work. You will need to configure your webserver to display the correct IP address of visitors.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.