PluginProbe
Easy Basic Authentication – Add basic auth to site or admin area / 2
Easy Basic Authentication – Add basic auth to site or admin area v2
trunk 1.1 1.2 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.4 1.4.1 1.5 1.5.1 1.5.2 1.5.3 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.7 1.7.1 1.8 1.8.1 1.9 All 50 releases
← All changes | class/easy-basic-authentication-class.php +21 -110 trunk2 View file →
@@ -2,10 +2,8 @@
2 2
3 3 require_once (dirname(__FILE__).'/easy-basic-authentication-log-class.php');
4 4 require_once (dirname(__FILE__).'/easy-basic-authentication-emailalert-class.php');
5 5 require_once (dirname(__FILE__).'/easy-basic-authentication-form-class.php');
6 -require_once (dirname(__FILE__).'/easy-basic-authentication-notice-class.php');
7 -require_once (dirname(__FILE__).'/easy-basic-authentication-compatcheck-class.php');
8 6
9 7 class easy_basic_authentication_class {
10 8
11 9 private $log;
@@ -10,9 +8,8 @@
10 8
11 9 private $log;
12 10 private $email;
13 11 private $form;
14 - private $compatcheck;
15 12
16 13 public function __construct()
17 14 {
18 15 $this->log = new easy_basic_authentication_log_class();
@@ -17,15 +14,12 @@
17 14 {
18 15 $this->log = new easy_basic_authentication_log_class();
19 16 $this->email = new easy_basic_authentication_emailalert_class();
20 17 $this->form = new easy_basic_authentication_form_class();
21 - $notice = new easy_basic_authentication_notice_class();
22 - $this->compatcheck = new easy_basic_authentication_compatcheck_class();
23 - $this->compatcheck->register_hooks();
24 18
25 19 if(get_option( 'basic_auth_plugin_admin_enable' )) {
26 20 if (in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php'))) {
27 - add_action( 'init', array($this,'basic_auth_root') );
21 + add_action( 'init', array($this,'basic_auth_admin') );
28 22 }
29 23 }
30 24
31 25 if(get_option( 'basic_auth_plugin_enable' ) && get_option( 'basic_auth_plugin_admin_enable' )){
@@ -41,120 +35,41 @@
41 35 });
42 36
43 37 }
44 38
45 - public function basic_auth_root()
46 - {
47 - $user = get_option('basic_auth_plugin_username');
48 - $pass = get_option('basic_auth_plugin_password');
49 -
50 - if ($this->whiteListChecker()) {
51 - return;
52 - }
53 -
54 - if ($this->urlWhiteListChecker()) {
55 - return;
56 - }
57 -
58 - if (!isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['HTTP_AUTHORIZATION'])) {
59 - if (stripos($_SERVER['HTTP_AUTHORIZATION'], 'basic') === 0) {
60 - list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)), 2);
61 - }
62 - }
63 -
64 - if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
65 - $_SERVER['PHP_AUTH_USER'] !== $user ||
66 - !wp_check_password(wp_unslash($_SERVER['PHP_AUTH_PW']), $pass)) {
39 + public function basic_auth_root() {
40 + $user = get_option( 'basic_auth_plugin_username' );
41 + $pass = get_option( 'basic_auth_plugin_password' );
42 +
43 + if ( !isset( $_SERVER['PHP_AUTH_USER'] ) || !isset( $_SERVER['PHP_AUTH_PW'] ) ||
44 + $_SERVER['PHP_AUTH_USER'] != $user || !wp_check_password( $_SERVER['PHP_AUTH_PW'], $pass ) ) {
45 +
67 46 $this->do_exit(true);
68 47 }
69 48 }
70 -
71 - public function urlWhiteListChecker() {
72 - if (empty($_SERVER['HTTP_HOST']) || empty($_SERVER['REQUEST_URI'])) {
73 - return false;
74 - }
75 -
76 - $scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
77 - $currentUrl = $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
78 -
79 - $whitelist = $this->getUrlWhiteList();
80 -
81 - foreach ($whitelist as $entry) {
82 - if ($this->isUrlAllowed($currentUrl, $entry)) {
83 - return true;
84 - }
85 - }
86 -
87 - return false;
88 - }
89 -
90 - private function isUrlAllowed($currentUrl, $entry) {
91 - $currentUrl = rtrim($currentUrl, '/');
92 - $entry = rtrim($entry, '/');
93 -
94 - if (strpos($entry, '/') === 0) {
95 - $path = wp_parse_url($currentUrl, PHP_URL_PATH);
96 - return stripos($path, $entry) === 0;
97 - }
98 -
99 - if (!preg_match('#^https?://#i', $entry)) {
100 - $scheme = wp_parse_url($currentUrl, PHP_URL_SCHEME) ?: 'https';
101 - $entry = $scheme . '://' . $entry;
102 - }
103 -
104 - return stripos($currentUrl, $entry) === 0;
105 - }
106 -
107 - public function whiteListChecker() {
108 - if (!isset($_SERVER['REMOTE_ADDR'])) {
109 - return false;
110 - }
111 49
112 - $ip = $_SERVER['REMOTE_ADDR'];
113 - $whitelist = $this->getWhiteList();
114 -
115 - foreach ($whitelist as $entry) {
116 - if ($this->isIpAllowed($ip, $entry)) {
117 - return true;
118 - }
119 - }
120 - return false;
121 - }
50 + public function basic_auth_admin() {
51 + $user = get_option( 'basic_auth_plugin_username' );
52 + $pass = get_option( 'basic_auth_plugin_password' );
122 53
123 - private function isIpAllowed($ip, $entry) {
124 - if (filter_var($entry, FILTER_VALIDATE_IP)) {
125 - return $ip === $entry;
126 - } elseif (strpos($entry, '/') !== false) {
127 - return $this->isIpInCidr($ip, $entry);
128 - } elseif (strpos($entry, '-') !== false) {
129 - return $this->isIpInRange($ip, $entry);
130 - }
131 - return false;
54 + if ( !isset( $_SERVER['PHP_AUTH_USER'] ) || !isset( $_SERVER['PHP_AUTH_PW'] ) ||
55 + $_SERVER['PHP_AUTH_USER'] != $user || !wp_check_password( $_SERVER['PHP_AUTH_PW'], $pass ) ) {
56 +
57 + $this->do_exit(true);
58 + }
132 59 }
133 60
134 - private function isIpInCidr($ip, $cidr) {
135 - list($subnet, $mask) = explode('/', $cidr);
136 - $ipLong = ip2long($ip);
137 - $subnetLong = ip2long($subnet);
138 - $maskLong = -1 << (32 - $mask);
139 - return ($ipLong & $maskLong) === ($subnetLong & $maskLong);
140 - }
141 -
142 - private function isIpInRange($ip, $range) {
143 - list($start, $end) = array_map('trim', explode('-', $range));
144 - $ipLong = ip2long($ip);
145 - $startLong = ip2long($start);
146 - $endLong = ip2long($end);
147 - return ($ipLong >= $startLong && $ipLong <= $endLong);
148 - }
149 -
150 61 public function do_exit($admin_area = false) {
151 62
63 + if (in_array($_SERVER['REMOTE_ADDR'], $this->getWhiteList())) {
64 + return;
65 + }
152 66 $this->basic_auth_action_failed_access();
153 67 do_action('basic_auth_before_401');
154 68
155 69 if($admin_area) {
156 - do_action('basic_auth_before_401_admin_area');
70 + do_action('basic_auth_before_401_admin_area');
71 +
157 72 header( 'WWW-Authenticate: Basic realm="My Website"' );
158 73 header( 'HTTP/1.0 401 Unauthorized' );
159 74 exit;
160 75 } else {
@@ -165,12 +80,8 @@
165 80 }
166 81
167 82 public function getWhiteList() {
168 83 return get_option( 'basic_auth_plugin_whitelist' )?explode(',',get_option( 'basic_auth_plugin_whitelist' )):[];
169 - }
170 -
171 - public function getUrlWhiteList() {
172 - return get_option( 'basic_auth_plugin_urlwhitelist' )?explode(',',get_option( 'basic_auth_plugin_urlwhitelist' )):[];
173 84 }
174 85
175 86 public function basic_auth_plugin_menu() {
176 87 add_menu_page(