Version Description
- Added new menu called Scanner with a new feature called File Change Detection. This feature will alert you if any files have changed, added or removed from your system.
- Fixed "Deny Bad Query Strings" rules to not break the ability to drag components in the WordPress "Appearance->Menus" page
- Fixed an activation time warning (on sites with WP_DEBUG option enabled)
- Re-implemented the wp-config.php file content backup feature. It now directly downloads the contents of the file to your computer.
- Multi-site enhancements: Suppressed access to configuration settings for features which are not allowed to be configured from subsites of multi-site installations.
- Fixed a bug with login lockdown feature.
Download this release
Release Info
Developer | mra13 |
Plugin | All In One WP Security & Firewall |
Version | 2.3 |
Comparing to | |
See all releases |
Code changes from version 2.2 to 2.3
- admin/wp-security-admin-init.php +35 -3
- admin/wp-security-blacklist-menu.php +1 -2
- admin/wp-security-dashboard-menu.php +3 -0
- admin/wp-security-filescan-menu.php +394 -0
- admin/wp-security-filesystem-menu.php +2 -2
- admin/wp-security-list-comment-spammer-ip.php +16 -6
- admin/wp-security-list-locked-ip.php +3 -3
- admin/wp-security-settings-menu.php +23 -49
- admin/wp-security-spam-menu.php +17 -1
- admin/wp-security-user-accounts-menu.php +1 -2
- classes/grade-system/wp-security-feature-item-manager.php +24 -0
- classes/wp-security-backup.php +2 -2
- classes/wp-security-config.php +2 -0
- classes/wp-security-configure-settings.php +23 -0
- classes/wp-security-cronjob-handler.php +1 -0
- classes/wp-security-file-scan.php +244 -0
- classes/wp-security-installer.php +18 -0
- classes/wp-security-user-login.php +3 -3
- classes/wp-security-utility-file.php +19 -0
- classes/wp-security-utility-htaccess.php +1 -1
- classes/wp-security-utility.php +10 -0
- readme.txt +13 -2
- wp-security-core.php +8 -3
- wp-security.php +2 -2
admin/wp-security-admin-init.php
CHANGED
@@ -17,6 +17,7 @@ class AIOWPSecurity_Admin_Init
|
|
17 |
var $firewall_menu;
|
18 |
var $maintenance_menu;
|
19 |
var $spam_menu;
|
|
|
20 |
|
21 |
function __construct()
|
22 |
{
|
@@ -133,6 +134,19 @@ class AIOWPSecurity_Admin_Init
|
|
133 |
$aio_wp_security->configs->save_config();//save the value
|
134 |
}
|
135 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
}
|
137 |
|
138 |
function create_admin_menus()
|
@@ -144,15 +158,28 @@ class AIOWPSecurity_Admin_Init
|
|
144 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('User Accounts', 'aiowpsecurity'), __('User Accounts', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_USER_ACCOUNTS_MENU_SLUG, array(&$this, 'handle_user_accounts_menu_rendering'));
|
145 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('User Login', 'aiowpsecurity'), __('User Login', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_USER_LOGIN_MENU_SLUG, array(&$this, 'handle_user_login_menu_rendering'));
|
146 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Database Security', 'aiowpsecurity'), __('Database Security', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_DB_SEC_MENU_SLUG, array(&$this, 'handle_database_menu_rendering'));
|
147 |
-
|
|
|
|
|
|
|
|
|
148 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('WHOIS Lookup', 'aiowpsecurity'), __('WHOIS Lookup', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_WHOIS_MENU_SLUG, array(&$this, 'handle_whois_menu_rendering'));
|
149 |
-
|
|
|
|
|
|
|
|
|
150 |
if (AIOWPSecurity_Utility::is_multisite_install() && get_current_blog_id() != 1){
|
151 |
//Suppress the firewall menu if site is a multi site AND not the main site
|
152 |
}else{
|
153 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Firewall', 'aiowpsecurity'), __('Firewall', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_FIREWALL_MENU_SLUG, array(&$this, 'handle_firewall_menu_rendering'));
|
154 |
}
|
155 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('SPAM Prevention', 'aiowpsecurity'), __('SPAM Prevention', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_SPAM_MENU_SLUG, array(&$this, 'handle_spam_menu_rendering'));
|
|
|
|
|
|
|
|
|
|
|
156 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Maintenance', 'aiowpsecurity'), __('Maintenance', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_MAINTENANCE_MENU_SLUG, array(&$this, 'handle_maintenance_menu_rendering'));
|
157 |
do_action('aiowpsecurity_admin_menu_created');
|
158 |
}
|
@@ -191,7 +218,7 @@ class AIOWPSecurity_Admin_Init
|
|
191 |
function handle_filesystem_menu_rendering()
|
192 |
{
|
193 |
include_once('wp-security-filesystem-menu.php');
|
194 |
-
$this->filesystem_menu = new
|
195 |
}
|
196 |
|
197 |
function handle_whois_menu_rendering()
|
@@ -224,6 +251,11 @@ class AIOWPSecurity_Admin_Init
|
|
224 |
$this->spam_menu = new AIOWPSecurity_Spam_Menu();
|
225 |
}
|
226 |
|
|
|
|
|
|
|
|
|
|
|
227 |
|
228 |
}//End of class
|
229 |
|
17 |
var $firewall_menu;
|
18 |
var $maintenance_menu;
|
19 |
var $spam_menu;
|
20 |
+
var $filescan_menu;
|
21 |
|
22 |
function __construct()
|
23 |
{
|
134 |
$aio_wp_security->configs->save_config();//save the value
|
135 |
}
|
136 |
}
|
137 |
+
|
138 |
+
if(isset($_POST['aiowps_save_wp_config']))//the wp-config backup operation
|
139 |
+
{
|
140 |
+
$nonce=$_REQUEST['_wpnonce'];
|
141 |
+
if (!wp_verify_nonce($nonce, 'aiowpsec-save-wp-config-nonce'))
|
142 |
+
{
|
143 |
+
$aio_wp_security->debug_logger->log_debug("Nonce check failed on wp_config file save!",4);
|
144 |
+
die("Nonce check failed on wp_config file save!");
|
145 |
+
}
|
146 |
+
$wp_config_path = ABSPATH . 'wp-config.php';
|
147 |
+
$result = AIOWPSecurity_Utility_File::backup_a_file($wp_config_path); //Backup the wp_config.php file
|
148 |
+
AIOWPSecurity_Utility_File::download_a_file_option1($wp_config_path, "wp-config-backup.txt");
|
149 |
+
}
|
150 |
}
|
151 |
|
152 |
function create_admin_menus()
|
158 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('User Accounts', 'aiowpsecurity'), __('User Accounts', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_USER_ACCOUNTS_MENU_SLUG, array(&$this, 'handle_user_accounts_menu_rendering'));
|
159 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('User Login', 'aiowpsecurity'), __('User Login', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_USER_LOGIN_MENU_SLUG, array(&$this, 'handle_user_login_menu_rendering'));
|
160 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Database Security', 'aiowpsecurity'), __('Database Security', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_DB_SEC_MENU_SLUG, array(&$this, 'handle_database_menu_rendering'));
|
161 |
+
if (AIOWPSecurity_Utility::is_multisite_install() && get_current_blog_id() != 1){
|
162 |
+
//Suppress the firewall menu if site is a multi site AND not the main site
|
163 |
+
}else{
|
164 |
+
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Filesystem Security', 'aiowpsecurity'), __('Filesystem Security', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_FILESYSTEM_MENU_SLUG, array(&$this, 'handle_filesystem_menu_rendering'));
|
165 |
+
}
|
166 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('WHOIS Lookup', 'aiowpsecurity'), __('WHOIS Lookup', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_WHOIS_MENU_SLUG, array(&$this, 'handle_whois_menu_rendering'));
|
167 |
+
if (AIOWPSecurity_Utility::is_multisite_install() && get_current_blog_id() != 1){
|
168 |
+
//Suppress the firewall menu if site is a multi site AND not the main site
|
169 |
+
}else{
|
170 |
+
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Blacklist Manager', 'aiowpsecurity'), __('Blacklist Manager', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_BLACKLIST_MENU_SLUG, array(&$this, 'handle_blacklist_menu_rendering'));
|
171 |
+
}
|
172 |
if (AIOWPSecurity_Utility::is_multisite_install() && get_current_blog_id() != 1){
|
173 |
//Suppress the firewall menu if site is a multi site AND not the main site
|
174 |
}else{
|
175 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Firewall', 'aiowpsecurity'), __('Firewall', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_FIREWALL_MENU_SLUG, array(&$this, 'handle_firewall_menu_rendering'));
|
176 |
}
|
177 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('SPAM Prevention', 'aiowpsecurity'), __('SPAM Prevention', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_SPAM_MENU_SLUG, array(&$this, 'handle_spam_menu_rendering'));
|
178 |
+
if (AIOWPSecurity_Utility::is_multisite_install() && get_current_blog_id() != 1){
|
179 |
+
//Suppress the filescan menu if site is a multi site AND not the main site
|
180 |
+
}else{
|
181 |
+
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Scanner', 'aiowpsecurity'), __('Scanner', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_FILESCAN_MENU_SLUG, array(&$this, 'handle_filescan_menu_rendering'));
|
182 |
+
}
|
183 |
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Maintenance', 'aiowpsecurity'), __('Maintenance', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_MAINTENANCE_MENU_SLUG, array(&$this, 'handle_maintenance_menu_rendering'));
|
184 |
do_action('aiowpsecurity_admin_menu_created');
|
185 |
}
|
218 |
function handle_filesystem_menu_rendering()
|
219 |
{
|
220 |
include_once('wp-security-filesystem-menu.php');
|
221 |
+
$this->filesystem_menu = new AIOWPSecurity_Filesystem_Menu();
|
222 |
}
|
223 |
|
224 |
function handle_whois_menu_rendering()
|
251 |
$this->spam_menu = new AIOWPSecurity_Spam_Menu();
|
252 |
}
|
253 |
|
254 |
+
function handle_filescan_menu_rendering()
|
255 |
+
{
|
256 |
+
include_once('wp-security-filescan-menu.php');
|
257 |
+
$this->filescan_menu = new AIOWPSecurity_Filescan_Menu();
|
258 |
+
}
|
259 |
|
260 |
}//End of class
|
261 |
|
admin/wp-security-blacklist-menu.php
CHANGED
@@ -62,8 +62,7 @@ class AIOWPSecurity_Blacklist_Menu extends AIOWPSecurity_Admin_Menu
|
|
62 |
|
63 |
function render_tab1()
|
64 |
{
|
65 |
-
|
66 |
-
global $wpdb, $aio_wp_security;
|
67 |
global $aiowps_feature_mgr;
|
68 |
$result = 1;
|
69 |
if (isset($_POST['aiowps_save_blacklist_settings']))
|
62 |
|
63 |
function render_tab1()
|
64 |
{
|
65 |
+
global $aio_wp_security;
|
|
|
66 |
global $aiowps_feature_mgr;
|
67 |
$result = 1;
|
68 |
if (isset($_POST['aiowps_save_blacklist_settings']))
|
admin/wp-security-dashboard-menu.php
CHANGED
@@ -266,6 +266,9 @@ class AIOWPSecurity_Dashboard_Menu extends AIOWPSecurity_Admin_Menu
|
|
266 |
<div class="inside">
|
267 |
|
268 |
<p>We are working to make your WordPress site more secure. Please support us, here is how:</p>
|
|
|
|
|
|
|
269 |
<p>
|
270 |
<a href="http://twitter.com/intent/tweet?url=http://www.tipsandtricks-hq.com/wordpress-security-and-firewall-plugin&text=I love the All In One WP Security and Firewall plugin!" target="_blank" class="aio_tweet_link">Post to Twitter</a>
|
271 |
</p>
|
266 |
<div class="inside">
|
267 |
|
268 |
<p>We are working to make your WordPress site more secure. Please support us, here is how:</p>
|
269 |
+
<p>
|
270 |
+
<a href="https://plus.google.com/102469783420435518783/" target="_blank">Follow us on Google+</a>
|
271 |
+
</p>
|
272 |
<p>
|
273 |
<a href="http://twitter.com/intent/tweet?url=http://www.tipsandtricks-hq.com/wordpress-security-and-firewall-plugin&text=I love the All In One WP Security and Firewall plugin!" target="_blank" class="aio_tweet_link">Post to Twitter</a>
|
274 |
</p>
|
admin/wp-security-filescan-menu.php
ADDED
@@ -0,0 +1,394 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class AIOWPSecurity_Filescan_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
+
{
|
5 |
+
var $menu_page_slug = AIOWPSEC_FILESCAN_MENU_SLUG;
|
6 |
+
|
7 |
+
/* Specify all the tabs of this menu in the following array */
|
8 |
+
var $menu_tabs = array(
|
9 |
+
'tab1' => 'File Change Detection',
|
10 |
+
);
|
11 |
+
|
12 |
+
var $menu_tabs_handler = array(
|
13 |
+
'tab1' => 'render_tab1',
|
14 |
+
);
|
15 |
+
|
16 |
+
function __construct()
|
17 |
+
{
|
18 |
+
$this->render_menu_page();
|
19 |
+
}
|
20 |
+
|
21 |
+
function get_current_tab()
|
22 |
+
{
|
23 |
+
$tab_keys = array_keys($this->menu_tabs);
|
24 |
+
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0];
|
25 |
+
return $tab;
|
26 |
+
}
|
27 |
+
|
28 |
+
/*
|
29 |
+
* Renders our tabs of this menu as nav items
|
30 |
+
*/
|
31 |
+
function render_menu_tabs()
|
32 |
+
{
|
33 |
+
$current_tab = $this->get_current_tab();
|
34 |
+
|
35 |
+
echo '<h2 class="nav-tab-wrapper">';
|
36 |
+
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
37 |
+
{
|
38 |
+
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
39 |
+
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
40 |
+
}
|
41 |
+
echo '</h2>';
|
42 |
+
}
|
43 |
+
|
44 |
+
/*
|
45 |
+
* The menu rendering goes here
|
46 |
+
*/
|
47 |
+
function render_menu_page()
|
48 |
+
{
|
49 |
+
$tab = $this->get_current_tab();
|
50 |
+
?>
|
51 |
+
<div class="wrap">
|
52 |
+
<div id="poststuff"><div id="post-body">
|
53 |
+
<?php
|
54 |
+
$this->render_menu_tabs();
|
55 |
+
//$tab_keys = array_keys($this->menu_tabs);
|
56 |
+
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
57 |
+
?>
|
58 |
+
</div></div>
|
59 |
+
</div><!-- end of wrap -->
|
60 |
+
<?php
|
61 |
+
}
|
62 |
+
|
63 |
+
function render_tab1()
|
64 |
+
{
|
65 |
+
global $wpdb, $aio_wp_security;
|
66 |
+
global $aiowps_feature_mgr;
|
67 |
+
|
68 |
+
if (isset($_POST['fcd_scan_info']))
|
69 |
+
{
|
70 |
+
//Display scan file change info and clear the global alert variable
|
71 |
+
//TODO: display file change details
|
72 |
+
|
73 |
+
//Clear the global variable
|
74 |
+
$aio_wp_security->configs->set_value('aiowps_fcds_change_detected', FALSE);
|
75 |
+
$aio_wp_security->configs->save_config();
|
76 |
+
|
77 |
+
//Display the last scan results
|
78 |
+
$this->display_last_scan_results();
|
79 |
+
}
|
80 |
+
|
81 |
+
if (isset($_POST['aiowps_manual_fcd_scan']))
|
82 |
+
{
|
83 |
+
$nonce=$_REQUEST['_wpnonce'];
|
84 |
+
if (!wp_verify_nonce($nonce, 'aiowpsec-fcd-manual-scan-nonce'))
|
85 |
+
{
|
86 |
+
$aio_wp_security->debug_logger->log_debug("Nonce check failed for manual file change detection scan operation!",4);
|
87 |
+
die(__('Nonce check failed for manual file change detection scan operation!','aiowpsecurity'));
|
88 |
+
}
|
89 |
+
|
90 |
+
$result = $aio_wp_security->filescan_obj->execute_file_change_detection_scan();
|
91 |
+
//If this is first scan display special message
|
92 |
+
if ($result['initial_scan'] == 1)
|
93 |
+
{
|
94 |
+
$this->show_msg_updated(__('The plugin has detected that this is your first file change detection scan. The file details from this scan will be used to detect file changes for future scans!','aiowpsecurity'));
|
95 |
+
}
|
96 |
+
// else
|
97 |
+
// {
|
98 |
+
// $aio_wp_security->debug_logger->log_debug("Manual File Change Detection scan operation failed!",4);
|
99 |
+
// $this->show_msg_error(__('Manual File Change Detection scan operation failed!','aiowpsecurity'));
|
100 |
+
// }
|
101 |
+
}
|
102 |
+
|
103 |
+
if(isset($_POST['aiowps_schedule_fcd_scan']))//Do form submission tasks
|
104 |
+
{
|
105 |
+
$error = '';
|
106 |
+
$reset_scan_data = FALSE;
|
107 |
+
$file_types = '';
|
108 |
+
$files = '';
|
109 |
+
|
110 |
+
$nonce=$_REQUEST['_wpnonce'];
|
111 |
+
if (!wp_verify_nonce($nonce, 'aiowpsec-scheduled-fcd-scan-nonce'))
|
112 |
+
{
|
113 |
+
$aio_wp_security->debug_logger->log_debug("Nonce check failed for file change detection scan options save!",4);
|
114 |
+
die("Nonce check failed for file change detection scan options save!");
|
115 |
+
}
|
116 |
+
|
117 |
+
$fcd_scan_frequency = sanitize_text_field($_POST['aiowps_fcd_scan_frequency']);
|
118 |
+
if(!is_numeric($fcd_scan_frequency))
|
119 |
+
{
|
120 |
+
$error .= '<br />'.__('You entered a non numeric value for the "backup time interval" field. It has been set to the default value.','aiowpsecurity');
|
121 |
+
$fcd_scan_frequency = '4';//Set it to the default value for this field
|
122 |
+
}
|
123 |
+
|
124 |
+
if (!empty($_POST['aiowps_fcd_exclude_filetypes']))
|
125 |
+
{
|
126 |
+
$file_types = trim($_POST['aiowps_fcd_exclude_filetypes']);
|
127 |
+
//$file_types_array = preg_split( '/\r\n|\r|\n/', $file_types );
|
128 |
+
|
129 |
+
//Get the currently saved config value and check if this has changed. If so do another scan to reset the scan data so it omits these filetypes
|
130 |
+
if ($file_types != $aio_wp_security->configs->get_value('aiowps_fcd_exclude_filetypes'))
|
131 |
+
{
|
132 |
+
$reset_scan_data = TRUE;
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
+
if (!empty($_POST['aiowps_fcd_exclude_files']))
|
137 |
+
{
|
138 |
+
$files = trim($_POST['aiowps_fcd_exclude_files']);
|
139 |
+
//Get the currently saved config value and check if this has changed. If so do another scan to reset the scan data so it omits these files/dirs
|
140 |
+
if ($files != $aio_wp_security->configs->get_value('aiowps_fcd_exclude_files'))
|
141 |
+
{
|
142 |
+
$reset_scan_data = TRUE;
|
143 |
+
}
|
144 |
+
|
145 |
+
}
|
146 |
+
|
147 |
+
$email_address = sanitize_email($_POST['aiowps_fcd_scan_email_address']);
|
148 |
+
if(!is_email($email_address))
|
149 |
+
{
|
150 |
+
$error .= '<p>'.__('You have entered an incorrect email address format. It has been set to your WordPress admin email as default.','aiowpsecurity').'</p>';
|
151 |
+
$email_address = get_bloginfo('admin_email'); //Set the default value to the blog admin email
|
152 |
+
}
|
153 |
+
|
154 |
+
if($error)
|
155 |
+
{
|
156 |
+
$this->show_msg_error(__('Attention!','aiowpsecurity').$error);
|
157 |
+
}
|
158 |
+
|
159 |
+
//Save all the form values to the options
|
160 |
+
$aio_wp_security->configs->set_value('aiowps_enable_automated_fcd_scan',isset($_POST["aiowps_enable_automated_fcd_scan"])?'1':'');
|
161 |
+
$aio_wp_security->configs->set_value('aiowps_fcd_scan_frequency',absint($fcd_scan_frequency));
|
162 |
+
$aio_wp_security->configs->set_value('aiowps_fcd_scan_interval',$_POST["aiowps_fcd_scan_interval"]);
|
163 |
+
$aio_wp_security->configs->set_value('aiowps_fcd_exclude_filetypes',$file_types);
|
164 |
+
$aio_wp_security->configs->set_value('aiowps_fcd_exclude_files',$files);
|
165 |
+
$aio_wp_security->configs->set_value('aiowps_send_fcd_scan_email',isset($_POST["aiowps_send_fcd_scan_email"])?'1':'');
|
166 |
+
$aio_wp_security->configs->set_value('aiowps_fcd_scan_email_address',$email_address);
|
167 |
+
$aio_wp_security->configs->save_config();
|
168 |
+
|
169 |
+
//Recalculate points after the feature status/options have been altered
|
170 |
+
$aiowps_feature_mgr->check_feature_status_and_recalculate_points();
|
171 |
+
$this->show_msg_settings_updated();
|
172 |
+
|
173 |
+
//Let's check if backup interval was set to less than 24 hours
|
174 |
+
if (isset($_POST["aiowps_enable_automated_fcd_scan"]) && ($fcd_scan_frequency < 24) && $_POST["aiowps_fcd_scan_interval"]==0)
|
175 |
+
{
|
176 |
+
$alert_user_msg = 'ATTENTION: You have configured your file change detection scan to occur at least once daily. For most websites we recommended that you choose a less frequent
|
177 |
+
schedule such as once every few days, once a week or once a month. Choosing a less frequent schedule will also help reduce your server load.';
|
178 |
+
$this->show_msg_updated(__($alert_user_msg, 'aiowpsecurity'));
|
179 |
+
}
|
180 |
+
|
181 |
+
if($reset_scan_data)
|
182 |
+
{
|
183 |
+
//Clear old scan row and ask user to perform a fresh scan to reset the data
|
184 |
+
$aiowps_global_meta_tbl_name = AIOWPSEC_TBL_GLOBAL_META_DATA;
|
185 |
+
$where = array('meta_key1' => 'file_change_detection', 'meta_value1' => 'file_scan_data');
|
186 |
+
$wpdb->delete( $aiowps_global_meta_tbl_name, $where);
|
187 |
+
$result = $aio_wp_security->filescan_obj->execute_file_change_detection_scan();
|
188 |
+
$new_scan_alert = __('NEW SCAN COMPLETED: The plugin has detected that you have made changes to the "File Types To Ignore" or "Files To Ignore" fields.
|
189 |
+
In order to ensure that future scan results are accurate, the old scan data has been refreshed.', 'aiowpsecurity');
|
190 |
+
$this->show_msg_updated($new_scan_alert);
|
191 |
+
}
|
192 |
+
|
193 |
+
}
|
194 |
+
|
195 |
+
//Display an alert warning message if a file change was detected
|
196 |
+
if ($aio_wp_security->configs->get_value('aiowps_fcds_change_detected'))
|
197 |
+
{
|
198 |
+
$error_msg = __('All In One WP Security & Firewall has detected that there was a change in your host\'s files.', 'aiowpsecurity');
|
199 |
+
|
200 |
+
$button = '<div><form action="" method="POST"><input type="submit" name="fcd_scan_info" value="'.__('View Scan Details & Clear This Message', 'aiowpsecurity').'" class="button-secondary" /></form></div>';
|
201 |
+
$error_msg .= $button;
|
202 |
+
$this->show_msg_error($error_msg);
|
203 |
+
}
|
204 |
+
|
205 |
+
|
206 |
+
?>
|
207 |
+
<div class="postbox">
|
208 |
+
<h3><label for="title"><?php _e('Manual File Change Detection Scan', 'aiowpsecurity'); ?></label></h3>
|
209 |
+
<div class="inside">
|
210 |
+
<form action="" method="POST">
|
211 |
+
<?php wp_nonce_field('aiowpsec-fcd-manual-scan-nonce'); ?>
|
212 |
+
<table class="form-table">
|
213 |
+
<tr valign="top">
|
214 |
+
<span class="description"><?php _e('To perform a manual file change detection scan click on the button below.', 'aiowpsecurity'); ?></span>
|
215 |
+
</tr>
|
216 |
+
</table>
|
217 |
+
<input type="submit" name="aiowps_manual_fcd_scan" value="<?php _e('Perform Scan Now', 'aiowpsecurity')?>" class="button-primary" />
|
218 |
+
</form>
|
219 |
+
</div></div>
|
220 |
+
<div class="postbox">
|
221 |
+
<h3><label for="title"><?php _e('Automated File Change Detection', 'aiowpsecurity'); ?></label></h3>
|
222 |
+
<div class="inside">
|
223 |
+
<?php
|
224 |
+
//Display security info badge
|
225 |
+
global $aiowps_feature_mgr;
|
226 |
+
$aiowps_feature_mgr->output_feature_details_badge("scan-file-change-detection");
|
227 |
+
?>
|
228 |
+
|
229 |
+
<form action="" method="POST">
|
230 |
+
<?php wp_nonce_field('aiowpsec-scheduled-fcd-scan-nonce'); ?>
|
231 |
+
<table class="form-table">
|
232 |
+
<tr valign="top">
|
233 |
+
<th scope="row"><?php _e('Enable Automated File Change Detection Scan', 'aiowpsecurity')?>:</th>
|
234 |
+
<td>
|
235 |
+
<input name="aiowps_enable_automated_fcd_scan" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_enable_automated_fcd_scan')=='1') echo ' checked="checked"'; ?> value="1"/>
|
236 |
+
<span class="description"><?php _e('Check this if you want the system to automatically/periodically scan your files to check for file changes based on the settings below', 'aiowpsecurity'); ?></span>
|
237 |
+
</td>
|
238 |
+
</tr>
|
239 |
+
<tr valign="top">
|
240 |
+
<th scope="row"><?php _e('Scan Time Interval', 'aiowpsecurity')?>:</th>
|
241 |
+
<td><input size="5" name="aiowps_fcd_scan_frequency" value="<?php echo $aio_wp_security->configs->get_value('aiowps_fcd_scan_frequency'); ?>" />
|
242 |
+
<select id="backup_interval" name="aiowps_fcd_scan_interval">
|
243 |
+
<option value="0" <?php selected( $aio_wp_security->configs->get_value('aiowps_fcd_scan_interval'), '0' ); ?>><?php _e( 'Hours', 'aiowpsecurity' ); ?></option>
|
244 |
+
<option value="1" <?php selected( $aio_wp_security->configs->get_value('aiowps_fcd_scan_interval'), '1' ); ?>><?php _e( 'Days', 'aiowpsecurity' ); ?></option>
|
245 |
+
<option value="2" <?php selected( $aio_wp_security->configs->get_value('aiowps_fcd_scan_interval'), '2' ); ?>><?php _e( 'Weeks', 'aiowpsecurity' ); ?></option>
|
246 |
+
</select>
|
247 |
+
<span class="description"><?php _e('Set the value for how often you would like a scan to occur', 'aiowpsecurity'); ?></span>
|
248 |
+
</td>
|
249 |
+
</tr>
|
250 |
+
<tr valign="top">
|
251 |
+
<th scope="row"><?php _e('File Types To Ignore', 'aiowpsecurity')?>:</th>
|
252 |
+
<td><textarea name="aiowps_fcd_exclude_filetypes" rows="5" cols="50"><?php echo $aio_wp_security->configs->get_value('aiowps_fcd_exclude_filetypes'); ?></textarea>
|
253 |
+
<br />
|
254 |
+
<span class="description"><?php _e('Enter each file type or extension on a new line which you wish to exclude from the file change detection scan.', 'aiowpsecurity'); ?></span>
|
255 |
+
<span class="aiowps_more_info_anchor"><span class="aiowps_more_info_toggle_char">+</span><span class="aiowps_more_info_toggle_text"><?php _e('More Info', 'aiowpsecurity'); ?></span></span>
|
256 |
+
<div class="aiowps_more_info_body">
|
257 |
+
<?php
|
258 |
+
echo '<p class="description">'.__('You can exclude file types from the scan which would not normally pose any security threat if they were changed. These can include things such as image files.', 'aiowpsecurity').'</p>';
|
259 |
+
echo '<p class="description">'.__('Example: If you want the scanner to ignore files of type jpg, png, and bmp, then you would enter the following:', 'aiowpsecurity').'</p>';
|
260 |
+
echo '<p class="description">'.__('jpg', 'aiowpsecurity').'</p>';
|
261 |
+
echo '<p class="description">'.__('png', 'aiowpsecurity').'</p>';
|
262 |
+
echo '<p class="description">'.__('bmp', 'aiowpsecurity').'</p>';
|
263 |
+
?>
|
264 |
+
</div>
|
265 |
+
</td>
|
266 |
+
</tr>
|
267 |
+
<tr valign="top">
|
268 |
+
<th scope="row"><?php _e('Files/Directories To Ignore', 'aiowpsecurity')?>:</th>
|
269 |
+
<td><textarea name="aiowps_fcd_exclude_files" rows="5" cols="50"><?php echo $aio_wp_security->configs->get_value('aiowps_fcd_exclude_files'); ?></textarea>
|
270 |
+
<br />
|
271 |
+
<span class="description"><?php _e('Enter each file or directory on a new line which you wish to exclude from the file change detection scan.', 'aiowpsecurity'); ?></span>
|
272 |
+
<span class="aiowps_more_info_anchor"><span class="aiowps_more_info_toggle_char">+</span><span class="aiowps_more_info_toggle_text"><?php _e('More Info', 'aiowpsecurity'); ?></span></span>
|
273 |
+
<div class="aiowps_more_info_body">
|
274 |
+
<?php
|
275 |
+
echo '<p class="description">'.__('You can exclude specific files/directories from the scan which would not normally pose any security threat if they were changed. These can include things such as log files.', 'aiowpsecurity').'</p>';
|
276 |
+
echo '<p class="description">'.__('Example: If you want the scanner to ignore certain files in different directories or whole directories, then you would enter the following:', 'aiowpsecurity').'</p>';
|
277 |
+
echo '<p class="description">'.__('cache/config/master.php', 'aiowpsecurity').'</p>';
|
278 |
+
echo '<p class="description">'.__('somedirectory', 'aiowpsecurity').'</p>';
|
279 |
+
?>
|
280 |
+
</div>
|
281 |
+
</td>
|
282 |
+
</tr>
|
283 |
+
<tr valign="top">
|
284 |
+
<th scope="row"><?php _e('Send Email When Change Detected', 'aiowpsecurity')?>:</th>
|
285 |
+
<td>
|
286 |
+
<input name="aiowps_send_fcd_scan_email" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_send_fcd_scan_email')=='1') echo ' checked="checked"'; ?> value="1"/>
|
287 |
+
<span class="description"><?php _e('Check this if you want the system to email you if a file change was detected', 'aiowpsecurity'); ?></span>
|
288 |
+
<br /><input size="40" name="aiowps_fcd_scan_email_address" value="<?php echo $aio_wp_security->configs->get_value('aiowps_fcd_scan_email_address'); ?>" />
|
289 |
+
<span class="description"><?php _e('Enter an email address', 'aiowpsecurity'); ?></span>
|
290 |
+
</td>
|
291 |
+
</tr>
|
292 |
+
</table>
|
293 |
+
<input type="submit" name="aiowps_schedule_fcd_scan" value="<?php _e('Save Settings', 'aiowpsecurity')?>" class="button-primary" />
|
294 |
+
</form>
|
295 |
+
</div></div>
|
296 |
+
|
297 |
+
<?php
|
298 |
+
}
|
299 |
+
|
300 |
+
/*
|
301 |
+
* Outputs the last scan results in a postbox
|
302 |
+
*/
|
303 |
+
function display_last_scan_results()
|
304 |
+
{
|
305 |
+
global $wpdb;
|
306 |
+
//Let's get the results array from the DB
|
307 |
+
$query = "SELECT * FROM ".AIOWPSEC_TBL_GLOBAL_META_DATA." WHERE meta_key1='file_change_detection'";
|
308 |
+
$scan_db_data = $wpdb->get_row($query, ARRAY_A);
|
309 |
+
if ($scan_db_data === NULL)
|
310 |
+
{
|
311 |
+
//TODO: Failure scenario
|
312 |
+
return;
|
313 |
+
}
|
314 |
+
$date_last_scan = $scan_db_data['date_time'];
|
315 |
+
$scan_results_unserialized = maybe_unserialize($scan_db_data['meta_value5']);
|
316 |
+
?>
|
317 |
+
<div class="postbox">
|
318 |
+
<h3><label for="title"><?php _e('Latest File Change Scan Results', 'aiowpsecurity'); ?></label></h3>
|
319 |
+
<div class="inside">
|
320 |
+
<?php
|
321 |
+
$files_added_output = "";
|
322 |
+
$files_removed_output = "";
|
323 |
+
$files_changed_output = "";
|
324 |
+
if (!empty($scan_results_unserialized['files_added']))
|
325 |
+
{
|
326 |
+
//Output table of files added
|
327 |
+
echo '<div class="aio_info_with_icon aio_spacer_10_tb">'.__('The following files were added to your host.', 'aiowpsecurity').'</div>';
|
328 |
+
$files_added_output .= '<table class="widefat">';
|
329 |
+
$files_added_output .= '<tr>';
|
330 |
+
$files_added_output .= '<th>'.__('File','aiowpsecurity').'</th>';
|
331 |
+
$files_added_output .= '<th>'.__('File Size','aiowpsecurity').'</th>';
|
332 |
+
$files_added_output .= '<th>'.__('File Modified','aiowpsecurity').'</th>';
|
333 |
+
$files_added_output .= '</tr>';
|
334 |
+
foreach ($scan_results_unserialized['files_added'] as $key=>$value) {
|
335 |
+
$files_added_output .= '<tr>';
|
336 |
+
$files_added_output .= '<td>'.$key.'</td>';
|
337 |
+
$files_added_output .= '<td>'.$value['filesize'].'</td>';
|
338 |
+
$files_added_output .= '<td>'.date('Y-m-d H:i:s',$value['last_modified']).'</td>';
|
339 |
+
$files_added_output .= '</tr>';
|
340 |
+
}
|
341 |
+
$files_added_output .= '</table>';
|
342 |
+
echo $files_added_output;
|
343 |
+
}
|
344 |
+
echo '<div class="aio_spacer_15"></div>';
|
345 |
+
if (!empty($scan_results_unserialized['files_removed']))
|
346 |
+
{
|
347 |
+
//Output table of files removed
|
348 |
+
echo '<div class="aio_info_with_icon aio_spacer_10_tb">'.__('The following files were removed from your host.', 'aiowpsecurity').'</div>';
|
349 |
+
$files_removed_output .= '<table class="widefat">';
|
350 |
+
$files_removed_output .= '<tr>';
|
351 |
+
$files_removed_output .= '<th>'.__('File','aiowpsecurity').'</th>';
|
352 |
+
$files_removed_output .= '<th>'.__('File Size','aiowpsecurity').'</th>';
|
353 |
+
$files_removed_output .= '<th>'.__('File Modified','aiowpsecurity').'</th>';
|
354 |
+
$files_removed_output .= '</tr>';
|
355 |
+
foreach ($scan_results_unserialized['files_removed'] as $key=>$value) {
|
356 |
+
$files_removed_output .= '<tr>';
|
357 |
+
$files_removed_output .= '<td>'.$key.'</td>';
|
358 |
+
$files_removed_output .= '<td>'.$value['filesize'].'</td>';
|
359 |
+
$files_removed_output .= '<td>'.date('Y-m-d H:i:s',$value['last_modified']).'</td>';
|
360 |
+
$files_removed_output .= '</tr>';
|
361 |
+
}
|
362 |
+
$files_removed_output .= '</table>';
|
363 |
+
echo $files_removed_output;
|
364 |
+
|
365 |
+
}
|
366 |
+
|
367 |
+
echo '<div class="aio_spacer_15"></div>';
|
368 |
+
|
369 |
+
if (!empty($scan_results_unserialized['files_changed']))
|
370 |
+
{
|
371 |
+
//Output table of files changed
|
372 |
+
echo '<div class="aio_info_with_icon aio_spacer_10_tb">'.__('The following files were changed on your host.', 'aiowpsecurity').'</div>';
|
373 |
+
$files_changed_output .= '<table class="widefat">';
|
374 |
+
$files_changed_output .= '<tr>';
|
375 |
+
$files_changed_output .= '<th>'.__('File','aiowpsecurity').'</th>';
|
376 |
+
$files_changed_output .= '<th>'.__('File Size','aiowpsecurity').'</th>';
|
377 |
+
$files_changed_output .= '<th>'.__('File Modified','aiowpsecurity').'</th>';
|
378 |
+
$files_changed_output .= '</tr>';
|
379 |
+
foreach ($scan_results_unserialized['files_changed'] as $key=>$value) {
|
380 |
+
$files_changed_output .= '<tr>';
|
381 |
+
$files_changed_output .= '<td>'.$key.'</td>';
|
382 |
+
$files_changed_output .= '<td>'.$value['filesize'].'</td>';
|
383 |
+
$files_changed_output .= '<td>'.date('Y-m-d H:i:s',$value['last_modified']).'</td>';
|
384 |
+
$files_changed_output .= '</tr>';
|
385 |
+
}
|
386 |
+
$files_changed_output .= '</table>';
|
387 |
+
echo $files_changed_output;
|
388 |
+
}
|
389 |
+
|
390 |
+
?>
|
391 |
+
</div></div>
|
392 |
+
<?php
|
393 |
+
}
|
394 |
+
} //end class
|
admin/wp-security-filesystem-menu.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
class
|
4 |
{
|
5 |
var $menu_page_slug = AIOWPSEC_FILESYSTEM_MENU_SLUG;
|
6 |
|
@@ -554,7 +554,7 @@ class AIOWPSecurity_Filescan_Menu extends AIOWPSecurity_Admin_Menu
|
|
554 |
if (!$error_file_contents)
|
555 |
{
|
556 |
//TODO - error could not read file, display notice???
|
557 |
-
$aio_wp_security->debug_logger->log_debug("
|
558 |
|
559 |
}
|
560 |
$last_50_entries = array_slice($error_file_contents, -50); //extract the last 50 entries
|
1 |
<?php
|
2 |
|
3 |
+
class AIOWPSecurity_Filesystem_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
{
|
5 |
var $menu_page_slug = AIOWPSEC_FILESYSTEM_MENU_SLUG;
|
6 |
|
554 |
if (!$error_file_contents)
|
555 |
{
|
556 |
//TODO - error could not read file, display notice???
|
557 |
+
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_Filesystem_Menu - Unable to read file: ".$filepath,4);
|
558 |
|
559 |
}
|
560 |
$last_50_entries = array_slice($error_file_contents, -50); //extract the last 50 entries
|
admin/wp-security-list-comment-spammer-ip.php
CHANGED
@@ -21,9 +21,14 @@ class AIOWPSecurity_List_Comment_Spammer_IP extends AIOWPSecurity_List_Table {
|
|
21 |
function column_comment_author_IP($item){
|
22 |
$tab = strip_tags($_REQUEST['tab']);
|
23 |
//Build row actions
|
24 |
-
|
25 |
-
|
26 |
-
|
|
|
|
|
|
|
|
|
|
|
27 |
|
28 |
//Return the user_login contents
|
29 |
return sprintf('%1$s <span style="color:silver"></span>%2$s',
|
@@ -59,9 +64,14 @@ class AIOWPSecurity_List_Comment_Spammer_IP extends AIOWPSecurity_List_Table {
|
|
59 |
}
|
60 |
|
61 |
function get_bulk_actions() {
|
62 |
-
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
65 |
return $actions;
|
66 |
}
|
67 |
|
21 |
function column_comment_author_IP($item){
|
22 |
$tab = strip_tags($_REQUEST['tab']);
|
23 |
//Build row actions
|
24 |
+
if (AIOWPSecurity_Utility::is_multisite_install() && get_current_blog_id() != 1){
|
25 |
+
//Suppress the block link if site is a multi site AND not the main site
|
26 |
+
$actions = array(); //blank array
|
27 |
+
}else{
|
28 |
+
$actions = array(
|
29 |
+
'block' => sprintf('<a href="admin.php?page=%s&tab=%s&action=%s&spammer_ip=%s" onclick="return confirm(\'Are you sure you want to add this IP address to your blacklist?\')">Block</a>',AIOWPSEC_BLACKLIST_MENU_SLUG,$tab,'block_spammer_ip',$item['comment_author_IP']),
|
30 |
+
);
|
31 |
+
}
|
32 |
|
33 |
//Return the user_login contents
|
34 |
return sprintf('%1$s <span style="color:silver"></span>%2$s',
|
64 |
}
|
65 |
|
66 |
function get_bulk_actions() {
|
67 |
+
if (AIOWPSecurity_Utility::is_multisite_install() && get_current_blog_id() != 1){
|
68 |
+
//Suppress the block link if site is a multi site AND not the main site
|
69 |
+
$actions = array(); //blank array
|
70 |
+
}else{
|
71 |
+
$actions = array(
|
72 |
+
'block' => 'Block'
|
73 |
+
);
|
74 |
+
}
|
75 |
return $actions;
|
76 |
}
|
77 |
|
admin/wp-security-list-locked-ip.php
CHANGED
@@ -18,11 +18,11 @@ class AIOWPSecurity_List_Locked_IP extends AIOWPSecurity_List_Table {
|
|
18 |
}
|
19 |
|
20 |
function column_failed_login_ip($item){
|
21 |
-
|
22 |
//Build row actions
|
23 |
$actions = array(
|
24 |
-
'unlock' => sprintf('<a href="admin.php?page=%s&
|
25 |
-
'delete' => sprintf('<a href="admin.php?page=%s&
|
26 |
);
|
27 |
|
28 |
//Return the user_login contents
|
18 |
}
|
19 |
|
20 |
function column_failed_login_ip($item){
|
21 |
+
//$tab = strip_tags($_REQUEST['tab']);
|
22 |
//Build row actions
|
23 |
$actions = array(
|
24 |
+
'unlock' => sprintf('<a href="admin.php?page=%s&action=%s&lockdown_id=%s" onclick="return confirm(\'Are you sure you want to unlock this address range?\')">Unlock</a>',AIOWPSEC_USER_LOGIN_MENU_SLUG,'unlock_ip',$item['id']),
|
25 |
+
'delete' => sprintf('<a href="admin.php?page=%s&action=%s&lockdown_id=%s" onclick="return confirm(\'Are you sure you want to delete this item?\')">Delete</a>',AIOWPSEC_USER_LOGIN_MENU_SLUG,'delete_blocked_ip',$item['id']),
|
26 |
);
|
27 |
|
28 |
//Return the user_login contents
|
admin/wp-security-settings-menu.php
CHANGED
@@ -90,7 +90,7 @@ class AIOWPSecurity_Settings_Menu extends AIOWPSecurity_Admin_Menu
|
|
90 |
<h3><label for="title"><?php _e('WP Security Plugin', 'aiowpsecurity'); ?></label></h3>
|
91 |
<div class="inside">
|
92 |
<p><?php _e('Thank you for using our WordPress security plugin. There are a lot of security features in this plugin.', 'aiowpsecurity'); ?></p>
|
93 |
-
<p><?php _e('Go through each menu items and enable the security options to add more security to your site.', 'aiowpsecurity'); ?></p>
|
94 |
<p><?php _e('It is a good practice to take a backup of your .htaccess file, database and wp-config.php file before activating the security features. This plugin has options that you can use to backup those resources easily.', 'aiowpsecurity'); ?></p>
|
95 |
<p>
|
96 |
<ul class="aiowps_admin_ul_grp1">
|
@@ -213,7 +213,15 @@ class AIOWPSecurity_Settings_Menu extends AIOWPSecurity_Admin_Menu
|
|
213 |
</p>';
|
214 |
?>
|
215 |
</div>
|
216 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
<div class="postbox">
|
218 |
<h3><label for="title"><?php _e('Save the current .htaccess file', 'aiowpsecurity'); ?></label></h3>
|
219 |
<div class="inside">
|
@@ -257,49 +265,12 @@ class AIOWPSecurity_Settings_Menu extends AIOWPSecurity_Admin_Menu
|
|
257 |
</div></div>
|
258 |
|
259 |
<?php
|
|
|
260 |
}
|
261 |
|
262 |
function render_tab3()
|
263 |
{
|
264 |
global $aio_wp_security;
|
265 |
-
|
266 |
-
if(isset($_POST['aiowps_save_wp_config']))//Do form submission tasks
|
267 |
-
{
|
268 |
-
$nonce=$_REQUEST['_wpnonce'];
|
269 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-save-wp-config-nonce'))
|
270 |
-
{
|
271 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on wp_config file save!",4);
|
272 |
-
die("Nonce check failed on wp_config file save!");
|
273 |
-
}
|
274 |
-
$wp_config_path = ABSPATH . 'wp-config.php';
|
275 |
-
$result = AIOWPSecurity_Utility_File::backup_a_file($wp_config_path); //Backup the wp_config.php file
|
276 |
-
|
277 |
-
if ($result)
|
278 |
-
{
|
279 |
-
$random_prefix = AIOWPSecurity_Utility::generate_alpha_numeric_random_string(10);
|
280 |
-
if (rename(ABSPATH.'wp-config.php.backup', AIO_WP_SECURITY_BACKUPS_PATH.'/'.$random_prefix.'_wp-config-backup.txt'))
|
281 |
-
{
|
282 |
-
// $backup_file_url = AIO_WP_SECURITY_BACKUPS_PATH . '/wp-config-backup.txt';
|
283 |
-
echo '<div id="message" class="updated fade"><p>';
|
284 |
-
_e('Your wp-config.php file was successfully backed up! Using an FTP program go to the "backups" directory of this plugin to save a copy of the file to your computer.','aiowpsecurity');
|
285 |
-
// echo '<p>';
|
286 |
-
// _e('Your wp-config.php File: ');
|
287 |
-
// echo '<a href="'.$backup_file_url.'" target="_blank">'.$backup_file_url.'</a>';
|
288 |
-
// echo '</p>';
|
289 |
-
echo '</p></div>';
|
290 |
-
}
|
291 |
-
else
|
292 |
-
{
|
293 |
-
$aio_wp_security->debug_logger->log_debug("wp-config.php file rename failed during backup!",4);
|
294 |
-
$this->show_msg_error(__('wp-config.php file rename failed during backup. Please check your root directory for the backup file using FTP.','aiowpsecurity'));
|
295 |
-
}
|
296 |
-
}
|
297 |
-
else
|
298 |
-
{
|
299 |
-
$aio_wp_security->debug_logger->log_debug("wp-config.php - Backup operation failed!",4);
|
300 |
-
$this->show_msg_error(__('wp-config.php backup failed.','aiowpsecurity'));
|
301 |
-
}
|
302 |
-
}
|
303 |
|
304 |
if(isset($_POST['aiowps_restore_wp_config_button']))//Do form submission tasks
|
305 |
{
|
@@ -353,20 +324,22 @@ class AIOWPSecurity_Settings_Menu extends AIOWPSecurity_Admin_Menu
|
|
353 |
</p>';
|
354 |
?>
|
355 |
</div>
|
356 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
357 |
<div class="postbox">
|
358 |
<h3><label for="title"><?php _e('Save the current wp-config.php file', 'aiowpsecurity'); ?></label></h3>
|
359 |
<div class="inside">
|
360 |
<form action="" method="POST">
|
361 |
<?php wp_nonce_field('aiowpsec-save-wp-config-nonce'); ?>
|
362 |
-
<p class="description"><?php _e('Click the button below to backup and
|
363 |
-
|
364 |
-
<div class="aio_yellow_box">
|
365 |
-
<?php
|
366 |
-
$info_msg = '<p>'.__('The feature to back up the wp-config.php has currently been disabled in order to prevent a potential security exploit. We are currently in the process of implementing a more secure method which we will release in a future version of the plugin.', 'aiowpsecurity').'</p>';
|
367 |
-
echo $info_msg;
|
368 |
-
?>
|
369 |
-
</div>
|
370 |
|
371 |
</form>
|
372 |
</div></div>
|
@@ -403,6 +376,7 @@ class AIOWPSecurity_Settings_Menu extends AIOWPSecurity_Admin_Menu
|
|
403 |
</div></div>
|
404 |
|
405 |
<?php
|
|
|
406 |
}
|
407 |
|
408 |
function render_tab4()
|
90 |
<h3><label for="title"><?php _e('WP Security Plugin', 'aiowpsecurity'); ?></label></h3>
|
91 |
<div class="inside">
|
92 |
<p><?php _e('Thank you for using our WordPress security plugin. There are a lot of security features in this plugin.', 'aiowpsecurity'); ?></p>
|
93 |
+
<p><?php _e('Go through each menu items and enable the security options to add more security to your site. Start by activating the basic features first.', 'aiowpsecurity'); ?></p>
|
94 |
<p><?php _e('It is a good practice to take a backup of your .htaccess file, database and wp-config.php file before activating the security features. This plugin has options that you can use to backup those resources easily.', 'aiowpsecurity'); ?></p>
|
95 |
<p>
|
96 |
<ul class="aiowps_admin_ul_grp1">
|
213 |
</p>';
|
214 |
?>
|
215 |
</div>
|
216 |
+
<?php
|
217 |
+
if (AIOWPSecurity_Utility::is_multisite_install() && get_current_blog_id() != 1)
|
218 |
+
{
|
219 |
+
//Hide config settings if MS and not main site
|
220 |
+
AIOWPSecurity_Utility::display_multisite_message();
|
221 |
+
}
|
222 |
+
else
|
223 |
+
{
|
224 |
+
?>
|
225 |
<div class="postbox">
|
226 |
<h3><label for="title"><?php _e('Save the current .htaccess file', 'aiowpsecurity'); ?></label></h3>
|
227 |
<div class="inside">
|
265 |
</div></div>
|
266 |
|
267 |
<?php
|
268 |
+
} // End if statement
|
269 |
}
|
270 |
|
271 |
function render_tab3()
|
272 |
{
|
273 |
global $aio_wp_security;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
274 |
|
275 |
if(isset($_POST['aiowps_restore_wp_config_button']))//Do form submission tasks
|
276 |
{
|
324 |
</p>';
|
325 |
?>
|
326 |
</div>
|
327 |
+
<?php
|
328 |
+
if (AIOWPSecurity_Utility::is_multisite_install() && get_current_blog_id() != 1)
|
329 |
+
{
|
330 |
+
//Hide config settings if MS and not main site
|
331 |
+
AIOWPSecurity_Utility::display_multisite_message();
|
332 |
+
}
|
333 |
+
else
|
334 |
+
{
|
335 |
+
?>
|
336 |
<div class="postbox">
|
337 |
<h3><label for="title"><?php _e('Save the current wp-config.php file', 'aiowpsecurity'); ?></label></h3>
|
338 |
<div class="inside">
|
339 |
<form action="" method="POST">
|
340 |
<?php wp_nonce_field('aiowpsec-save-wp-config-nonce'); ?>
|
341 |
+
<p class="description"><?php _e('Click the button below to backup and download the contents of the currently active wp-config.php file.', 'aiowpsecurity'); ?></p>
|
342 |
+
<input type="submit" name="aiowps_save_wp_config" value="<?php _e('Backup wp-config.php File', 'aiowpsecurity')?>" class="button-primary" />
|
|
|
|
|
|
|
|
|
|
|
|
|
343 |
|
344 |
</form>
|
345 |
</div></div>
|
376 |
</div></div>
|
377 |
|
378 |
<?php
|
379 |
+
} //End if statement
|
380 |
}
|
381 |
|
382 |
function render_tab4()
|
admin/wp-security-spam-menu.php
CHANGED
@@ -116,6 +116,13 @@ class AIOWPSecurity_Spam_Menu extends AIOWPSecurity_Admin_Menu
|
|
116 |
<?php
|
117 |
//Display security info badge
|
118 |
$aiowps_feature_mgr->output_feature_details_badge("block-spambots");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
?>
|
120 |
<table class="form-table">
|
121 |
<tr valign="top">
|
@@ -135,6 +142,7 @@ class AIOWPSecurity_Spam_Menu extends AIOWPSecurity_Admin_Menu
|
|
135 |
</td>
|
136 |
</tr>
|
137 |
</table>
|
|
|
138 |
</div></div>
|
139 |
|
140 |
<input type="submit" name="aiowps_apply_comment_spam_prevention_settings" value="<?php _e('Save Settings', 'aiowpsecurity')?>" class="button-primary" />
|
@@ -224,7 +232,15 @@ class AIOWPSecurity_Spam_Menu extends AIOWPSecurity_Admin_Menu
|
|
224 |
<div class="postbox">
|
225 |
<h3><label for="title"><?php _e('SPAMMER IP Address Results', 'aiowpsecurity'); ?></label></h3>
|
226 |
<div class="inside">
|
227 |
-
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
228 |
//Fetch, prepare, sort, and filter our data...
|
229 |
$spammer_ip_list->prepare_items();
|
230 |
//echo "put table of locked entries here";
|
116 |
<?php
|
117 |
//Display security info badge
|
118 |
$aiowps_feature_mgr->output_feature_details_badge("block-spambots");
|
119 |
+
if (AIOWPSecurity_Utility::is_multisite_install() && get_current_blog_id() != 1)
|
120 |
+
{
|
121 |
+
//Hide config settings if MS and not main site
|
122 |
+
AIOWPSecurity_Utility::display_multisite_message();
|
123 |
+
}
|
124 |
+
else
|
125 |
+
{
|
126 |
?>
|
127 |
<table class="form-table">
|
128 |
<tr valign="top">
|
142 |
</td>
|
143 |
</tr>
|
144 |
</table>
|
145 |
+
<?php } //End if statement ?>
|
146 |
</div></div>
|
147 |
|
148 |
<input type="submit" name="aiowps_apply_comment_spam_prevention_settings" value="<?php _e('Save Settings', 'aiowpsecurity')?>" class="button-primary" />
|
232 |
<div class="postbox">
|
233 |
<h3><label for="title"><?php _e('SPAMMER IP Address Results', 'aiowpsecurity'); ?></label></h3>
|
234 |
<div class="inside">
|
235 |
+
<?php
|
236 |
+
if (AIOWPSecurity_Utility::is_multisite_install() && get_current_blog_id() != 1)
|
237 |
+
{
|
238 |
+
echo '<div class="aio_yellow_box">';
|
239 |
+
echo '<p>'.__('The plugin has detected that you are using a Multi-Site WordPress installation.', 'aiowpsecurity').'</p>
|
240 |
+
<p>'.__('Only the "superadmin" can block IP addresses from the main site.', 'aiowpsecurity').'</p>
|
241 |
+
<p>'.__('Take note of the IP addresses you want blocked and ask the superadmin to add these to the blacklist using the "Blacklist Manager" on the main site.', 'aiowpsecurity').'</p>';
|
242 |
+
echo '</div>';
|
243 |
+
}
|
244 |
//Fetch, prepare, sort, and filter our data...
|
245 |
$spammer_ip_list->prepare_items();
|
246 |
//echo "put table of locked entries here";
|
admin/wp-security-user-accounts-menu.php
CHANGED
@@ -90,8 +90,7 @@ class AIOWPSecurity_User_Accounts_Menu extends AIOWPSecurity_Admin_Menu
|
|
90 |
<?php
|
91 |
//display a list of all administrator accounts for this site
|
92 |
$postbox_title = __('List of Administrator Accounts', 'aiowpsecurity');
|
93 |
-
//
|
94 |
-
if (AIOWPSecurity_Utility::is_multisite_install()) { //get admin accounts for current site
|
95 |
$blog_id = get_current_blog_id();
|
96 |
$this->postbox($postbox_title, $this->get_all_admin_accounts($blog_id));
|
97 |
} else {
|
90 |
<?php
|
91 |
//display a list of all administrator accounts for this site
|
92 |
$postbox_title = __('List of Administrator Accounts', 'aiowpsecurity');
|
93 |
+
if (AIOWPSecurity_Utility::is_multisite_install()) { //Multi-site: get admin accounts for current site
|
|
|
94 |
$blog_id = get_current_blog_id();
|
95 |
$this->postbox($postbox_title, $this->get_all_admin_accounts($blog_id));
|
96 |
} else {
|
classes/grade-system/wp-security-feature-item-manager.php
CHANGED
@@ -74,6 +74,11 @@ class AIOWPSecurity_Feature_Item_Manager
|
|
74 |
|
75 |
//SPAM Prevention
|
76 |
$this->feature_items[] = new AIOWPSecurity_Feature_Item("block-spambots", "Block Spambots", $this->feature_point_2, $this->sec_level_basic);
|
|
|
|
|
|
|
|
|
|
|
77 |
}
|
78 |
|
79 |
function get_feature_item_by_id($feature_id)
|
@@ -214,6 +219,12 @@ class AIOWPSecurity_Feature_Item_Manager
|
|
214 |
{
|
215 |
$this->check_enable_block_spambots_feature($item);
|
216 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
217 |
}
|
218 |
}
|
219 |
|
@@ -503,4 +514,17 @@ class AIOWPSecurity_Feature_Item_Manager
|
|
503 |
$item->set_feature_status($this->feature_inactive);
|
504 |
}
|
505 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
506 |
}
|
74 |
|
75 |
//SPAM Prevention
|
76 |
$this->feature_items[] = new AIOWPSecurity_Feature_Item("block-spambots", "Block Spambots", $this->feature_point_2, $this->sec_level_basic);
|
77 |
+
|
78 |
+
//Filescan
|
79 |
+
//File change detection
|
80 |
+
$this->feature_items[] = new AIOWPSecurity_Feature_Item("scan-file-change-detection", "File Change Detection", $this->feature_point_4, $this->sec_level_inter);
|
81 |
+
|
82 |
}
|
83 |
|
84 |
function get_feature_item_by_id($feature_id)
|
219 |
{
|
220 |
$this->check_enable_block_spambots_feature($item);
|
221 |
}
|
222 |
+
|
223 |
+
if($item->feature_id == "scan-file-change-detection")
|
224 |
+
{
|
225 |
+
$this->check_enable_fcd_scan_feature($item);
|
226 |
+
}
|
227 |
+
|
228 |
}
|
229 |
}
|
230 |
|
514 |
$item->set_feature_status($this->feature_inactive);
|
515 |
}
|
516 |
}
|
517 |
+
|
518 |
+
function check_enable_fcd_scan_feature($item)
|
519 |
+
{
|
520 |
+
global $aio_wp_security;
|
521 |
+
if ($aio_wp_security->configs->get_value('aiowps_enable_automated_fcd_scan') == '1') {
|
522 |
+
$item->set_feature_status($this->feature_active);
|
523 |
+
}
|
524 |
+
else
|
525 |
+
{
|
526 |
+
$item->set_feature_status($this->feature_inactive);
|
527 |
+
}
|
528 |
+
}
|
529 |
+
|
530 |
}
|
classes/wp-security-backup.php
CHANGED
@@ -7,7 +7,7 @@ class AIOWPSecurity_Backup
|
|
7 |
|
8 |
function __construct()
|
9 |
{
|
10 |
-
add_action('aiowps_perform_scheduled_backup_tasks', array(&$this, 'aiowps_scheduled_backup_handler'));
|
11 |
}
|
12 |
|
13 |
/**
|
@@ -163,7 +163,7 @@ class AIOWPSecurity_Backup
|
|
163 |
//Get the right email address.
|
164 |
if ( is_email( $aio_wp_security->configs->get_value('aiowps_send_backup_email_address') ) )
|
165 |
{
|
166 |
-
$toaddress = $aio_wp_security->configs->get_value('
|
167 |
} else
|
168 |
{
|
169 |
$toaddress = get_site_option( 'admin_email' );
|
7 |
|
8 |
function __construct()
|
9 |
{
|
10 |
+
add_action('aiowps_perform_scheduled_backup_tasks', array(&$this, 'aiowps_scheduled_backup_handler'));
|
11 |
}
|
12 |
|
13 |
/**
|
163 |
//Get the right email address.
|
164 |
if ( is_email( $aio_wp_security->configs->get_value('aiowps_send_backup_email_address') ) )
|
165 |
{
|
166 |
+
$toaddress = $aio_wp_security->configs->get_value('aiowps_backup_email_address');
|
167 |
} else
|
168 |
{
|
169 |
$toaddress = get_site_option( 'admin_email' );
|
classes/wp-security-config.php
CHANGED
@@ -21,6 +21,8 @@ class AIOWPSecurity_Config{
|
|
21 |
}
|
22 |
|
23 |
function add_value($key, $value){
|
|
|
|
|
24 |
if (array_key_exists($key, $this->configs)){
|
25 |
//Don't update the value for this key
|
26 |
}
|
21 |
}
|
22 |
|
23 |
function add_value($key, $value){
|
24 |
+
if(!is_array($this->configs)){$this->configs = array();}
|
25 |
+
|
26 |
if (array_key_exists($key, $this->configs)){
|
27 |
//Don't update the value for this key
|
28 |
}
|
classes/wp-security-configure-settings.php
CHANGED
@@ -69,6 +69,18 @@ class AIOWPSecurity_Configure_Settings
|
|
69 |
|
70 |
//SPAM Prevention menu
|
71 |
$aio_wp_security->configs->set_value('aiowps_enable_spambot_blocking','');//Checkbox
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
|
73 |
//TODO - keep adding default options for any fields that require it
|
74 |
|
@@ -140,6 +152,17 @@ class AIOWPSecurity_Configure_Settings
|
|
140 |
//SPAM Prevention menu
|
141 |
$aio_wp_security->configs->add_value('aiowps_enable_spambot_blocking','');//Checkbox
|
142 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
143 |
//TODO - keep adding default options for any fields that require it
|
144 |
|
145 |
//Save it
|
69 |
|
70 |
//SPAM Prevention menu
|
71 |
$aio_wp_security->configs->set_value('aiowps_enable_spambot_blocking','');//Checkbox
|
72 |
+
|
73 |
+
//Filescan features
|
74 |
+
//File change detection feature
|
75 |
+
$aio_wp_security->configs->set_value('aiowps_enable_automated_fcd_scan','');//Checkbox
|
76 |
+
$aio_wp_security->configs->set_value('aiowps_fcd_scan_frequency','4');
|
77 |
+
$aio_wp_security->configs->set_value('aiowps_fcd_scan_interval','2'); //Dropdown box where (0,1,2) => (hours,days,weeks)
|
78 |
+
$aio_wp_security->configs->set_value('aiowps_fcd_exclude_filetypes','');
|
79 |
+
$aio_wp_security->configs->set_value('aiowps_fcd_exclude_files','');
|
80 |
+
$aio_wp_security->configs->set_value('aiowps_send_fcd_scan_email','');//Checkbox
|
81 |
+
$aio_wp_security->configs->set_value('aiowps_fcd_scan_email_address',$blog_email_address);
|
82 |
+
$aio_wp_security->configs->set_value('aiowps_fcds_change_detected',FALSE); //used to display a global alert on site when file change detected
|
83 |
+
|
84 |
|
85 |
//TODO - keep adding default options for any fields that require it
|
86 |
|
152 |
//SPAM Prevention menu
|
153 |
$aio_wp_security->configs->add_value('aiowps_enable_spambot_blocking','');//Checkbox
|
154 |
|
155 |
+
//Filescan features
|
156 |
+
//File change detection feature
|
157 |
+
$aio_wp_security->configs->add_value('aiowps_enable_automated_fcd_scan','');//Checkbox
|
158 |
+
$aio_wp_security->configs->add_value('aiowps_fcd_scan_frequency','4');
|
159 |
+
$aio_wp_security->configs->add_value('aiowps_fcd_scan_interval','2'); //Dropdown box where (0,1,2) => (hours,days,weeks)
|
160 |
+
$aio_wp_security->configs->add_value('aiowps_fcd_exclude_filetypes','');
|
161 |
+
$aio_wp_security->configs->add_value('aiowps_fcd_exclude_files','');
|
162 |
+
$aio_wp_security->configs->add_value('aiowps_send_fcd_scan_email','');//Checkbox
|
163 |
+
$aio_wp_security->configs->add_value('aiowps_fcd_scan_email_address',$blog_email_address);
|
164 |
+
$aio_wp_security->configs->add_value('aiowps_fcds_change_detected',FALSE); //used to display a global alert on site when file change detected
|
165 |
+
|
166 |
//TODO - keep adding default options for any fields that require it
|
167 |
|
168 |
//Save it
|
classes/wp-security-cronjob-handler.php
CHANGED
@@ -16,6 +16,7 @@ class AIOWPSecurity_Cronjob_Handler {
|
|
16 |
//do_action('aiowps_force_logout_check');
|
17 |
//do_action('aiowps_check_password_stuff');
|
18 |
do_action('aiowps_perform_scheduled_backup_tasks');
|
|
|
19 |
}
|
20 |
|
21 |
// function aiowps_daily_cron_event_handler()
|
16 |
//do_action('aiowps_force_logout_check');
|
17 |
//do_action('aiowps_check_password_stuff');
|
18 |
do_action('aiowps_perform_scheduled_backup_tasks');
|
19 |
+
do_action('aiowps_perform_fcd_scan_tasks');
|
20 |
}
|
21 |
|
22 |
// function aiowps_daily_cron_event_handler()
|
classes/wp-security-file-scan.php
ADDED
@@ -0,0 +1,244 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class AIOWPSecurity_Filescan
|
3 |
+
{
|
4 |
+
|
5 |
+
function __construct()
|
6 |
+
{
|
7 |
+
add_action('aiowps_perform_fcd_scan_tasks', array(&$this, 'aiowps_scheduled_fcd_scan_handler'));
|
8 |
+
}
|
9 |
+
|
10 |
+
/**
|
11 |
+
* This function will recursively scan through all directories starting from the specified location
|
12 |
+
* It will store the path/filename, last_modified and filesize values in a multi-dimensional associative array
|
13 |
+
*/
|
14 |
+
function execute_file_change_detection_scan()
|
15 |
+
{
|
16 |
+
global $aio_wp_security;
|
17 |
+
$scan_result = array();
|
18 |
+
if($this->has_scan_data()){
|
19 |
+
$scanned_data = $this->do_file_change_scan(); //Scan the filesystem and get details
|
20 |
+
$last_scan_data = $this->get_last_scan_data();
|
21 |
+
$scan_result = $this->compare_scan_data($last_scan_data,$scanned_data);
|
22 |
+
$scan_result['initial_scan'] = '';
|
23 |
+
$this->save_scan_data_to_db($scanned_data, 'update', $scan_result);
|
24 |
+
if (!empty($scan_result['files_added']) || !empty($scan_result['files_removed']) || !empty($scan_result['files_changed'])){
|
25 |
+
//This means there was a change detected
|
26 |
+
$aio_wp_security->configs->set_value('aiowps_fcds_change_detected', TRUE);
|
27 |
+
$aio_wp_security->configs->save_config();
|
28 |
+
$aio_wp_security->debug_logger->log_debug_cron("File Change Detection Feature: change to filesystem detected!");
|
29 |
+
|
30 |
+
$this->aiowps_send_file_change_alert_email(); //Send file change scan results via email if applicable
|
31 |
+
}
|
32 |
+
return $scan_result;
|
33 |
+
}
|
34 |
+
else{
|
35 |
+
$scanned_data = $this->do_file_change_scan();
|
36 |
+
$this->save_scan_data_to_db($scanned_data);
|
37 |
+
$scan_result['initial_scan'] = '1';
|
38 |
+
return $scan_result;
|
39 |
+
}
|
40 |
+
}
|
41 |
+
|
42 |
+
function aiowps_send_file_change_alert_email()
|
43 |
+
{
|
44 |
+
global $aio_wp_security;
|
45 |
+
if ( $aio_wp_security->configs->get_value('aiowps_send_fcd_scan_email') == '1' )
|
46 |
+
{
|
47 |
+
//Get the right email address.
|
48 |
+
if ( is_email( $aio_wp_security->configs->get_value('aiowps_fcd_scan_email_address') ) )
|
49 |
+
{
|
50 |
+
$toaddress = $aio_wp_security->configs->get_value('aiowps_fcd_scan_email_address');
|
51 |
+
} else
|
52 |
+
{
|
53 |
+
$toaddress = get_site_option( 'admin_email' );
|
54 |
+
}
|
55 |
+
|
56 |
+
$to = $toaddress;
|
57 |
+
$headers = 'From: ' . get_option( 'blogname' ) . ' <' . $to . '>' . PHP_EOL;
|
58 |
+
$subject = __( 'All In One WP Security - File change detected!', 'aiowpsecurity' ) . ' ' . date( 'l, F jS, Y \a\\t g:i a', current_time( 'timestamp' ) );
|
59 |
+
//$attachment = array();
|
60 |
+
$message = __( 'A file change was detected on your system for site URL', 'aiowpsecurity' ) . ' ' . get_option( 'siteurl' ) . __( '. Scan was generated on', 'aiowpsecurity' ) . ' ' . date( 'l, F jS, Y \a\\t g:i a', current_time( 'timestamp' ) );
|
61 |
+
$message .= "\r\n".__( 'Login to your site to view the scan details.', 'aiowpsecurity' );
|
62 |
+
|
63 |
+
wp_mail( $to, $subject, $message, $headers );
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
function aiowps_scheduled_fcd_scan_handler()
|
68 |
+
{
|
69 |
+
global $aio_wp_security;
|
70 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_automated_fcd_scan')=='1')
|
71 |
+
{
|
72 |
+
$aio_wp_security->debug_logger->log_debug_cron("Filescan - Scheduled fcd_scan is enabled. Checking now to see if scan needs to be done...");
|
73 |
+
$current_time = strtotime(current_time('mysql'));
|
74 |
+
$fcd_scan_frequency = $aio_wp_security->configs->get_value('aiowps_fcd_scan_frequency'); //Number of hours or days or months interval
|
75 |
+
$interval_setting = $aio_wp_security->configs->get_value('aiowps_fcd_scan_interval'); //Hours/Days/Months
|
76 |
+
switch($interval_setting)
|
77 |
+
{
|
78 |
+
case '0':
|
79 |
+
$interval = 'hours';
|
80 |
+
break;
|
81 |
+
case '1':
|
82 |
+
$interval = 'days';
|
83 |
+
break;
|
84 |
+
case '2':
|
85 |
+
$interval = 'weeks';
|
86 |
+
break;
|
87 |
+
}
|
88 |
+
$last_fcd_scan_time = $aio_wp_security->configs->get_value('aiowps_last_fcd_scan_time');
|
89 |
+
if ($last_fcd_scan_time != NULL)
|
90 |
+
{
|
91 |
+
$last_fcd_scan_time = strtotime($aio_wp_security->configs->get_value('aiowps_last_fcd_scan_time'));
|
92 |
+
$next_fcd_scan_time = strtotime("+".abs($fcd_scan_frequency).$interval, $last_fcd_scan_time);
|
93 |
+
if ($next_fcd_scan_time <= $current_time)
|
94 |
+
{
|
95 |
+
//It's time to do a filescan
|
96 |
+
$result = $this->execute_file_change_detection_scan(ABSPATH);
|
97 |
+
// if ($result)
|
98 |
+
// {
|
99 |
+
$aio_wp_security->configs->set_value('aiowps_last_fcd_scan_time', current_time('mysql'));
|
100 |
+
$aio_wp_security->configs->save_config();
|
101 |
+
$aio_wp_security->debug_logger->log_debug_cron("Filescan - Scheduled filescan was successfully completed.");
|
102 |
+
// }
|
103 |
+
// else
|
104 |
+
// {
|
105 |
+
// $aio_wp_security->debug_logger->log_debug_cron("Filescan - Scheduled filescan operation failed!",4);
|
106 |
+
// }
|
107 |
+
}
|
108 |
+
}
|
109 |
+
else
|
110 |
+
{
|
111 |
+
//Set the last scan time to now so it can trigger for the next scheduled period
|
112 |
+
$aio_wp_security->configs->set_value('aiowps_last_fcd_scan_time', current_time('mysql'));
|
113 |
+
$aio_wp_security->configs->save_config();
|
114 |
+
}
|
115 |
+
}
|
116 |
+
}
|
117 |
+
|
118 |
+
/* Returns true if there is at least one previous scaned data in the DB. False otherwise */
|
119 |
+
function has_scan_data()
|
120 |
+
{
|
121 |
+
global $wpdb;
|
122 |
+
//For scanced data the meta_key1 column valu is 'file_change_detection', meta_value1 column value is 'file_scan_data'. Then the data is stored in meta_value4 column.
|
123 |
+
$aiowps_global_meta_tbl_name = AIOWPSEC_TBL_GLOBAL_META_DATA;
|
124 |
+
$resultset = $wpdb->get_row("SELECT * FROM $aiowps_global_meta_tbl_name WHERE meta_key1 = 'file_change_detection' AND meta_value1='file_scan_data'", OBJECT);
|
125 |
+
if($resultset){
|
126 |
+
$scan_data = maybe_unserialize($resultset->meta_value4);
|
127 |
+
if(!empty($scan_data)){
|
128 |
+
return true;
|
129 |
+
}
|
130 |
+
}
|
131 |
+
return false;
|
132 |
+
}
|
133 |
+
|
134 |
+
function get_last_scan_data()
|
135 |
+
{
|
136 |
+
global $wpdb;
|
137 |
+
//For scanced data the meta_key1 column valu is 'file_change_detection', meta_value1 column value is 'file_scan_data'. Then the data is stored in meta_value4 column.
|
138 |
+
$aiowps_global_meta_tbl_name = AIOWPSEC_TBL_GLOBAL_META_DATA;
|
139 |
+
$resultset = $wpdb->get_row("SELECT * FROM $aiowps_global_meta_tbl_name WHERE meta_key1 = 'file_change_detection' AND meta_value1='file_scan_data'", OBJECT);
|
140 |
+
if($resultset){
|
141 |
+
$scan_data = maybe_unserialize($resultset->meta_value4);
|
142 |
+
return $scan_data;
|
143 |
+
}
|
144 |
+
return array(); //return empty array if no old scan data
|
145 |
+
}
|
146 |
+
|
147 |
+
function save_scan_data_to_db($scanned_data, $save_type = 'insert', $scan_result = array())
|
148 |
+
{
|
149 |
+
global $wpdb;
|
150 |
+
//For scanced data the meta_key1 column valu is 'file_change_detection', meta_value1 column value is 'file_scan_data'. Then the data is stored in meta_value4 column.
|
151 |
+
$aiowps_global_meta_tbl_name = AIOWPSEC_TBL_GLOBAL_META_DATA;
|
152 |
+
$payload = serialize($scanned_data);
|
153 |
+
$scan_result = serialize($scan_result);
|
154 |
+
$date_time = current_time('mysql');
|
155 |
+
$data = array('date_time' => $date_time, 'meta_key1' => 'file_change_detection', 'meta_value1' => 'file_scan_data', 'meta_value4' => $payload, 'meta_key5' => 'last_scan_result', 'meta_value5' => $scan_result);
|
156 |
+
if($save_type == 'insert'){
|
157 |
+
$wpdb->insert($aiowps_global_meta_tbl_name, $data);
|
158 |
+
}
|
159 |
+
else{
|
160 |
+
$where = array('meta_key1' => 'file_change_detection', 'meta_value1' => 'file_scan_data');
|
161 |
+
$wpdb->update($aiowps_global_meta_tbl_name, $data, $where);
|
162 |
+
|
163 |
+
}
|
164 |
+
return true;
|
165 |
+
}
|
166 |
+
|
167 |
+
function do_file_change_scan($start_dir=ABSPATH)
|
168 |
+
{
|
169 |
+
global $aio_wp_security;
|
170 |
+
$filescan_data = array();
|
171 |
+
$dit = new RecursiveDirectoryIterator($start_dir);
|
172 |
+
$rit = new RecursiveIteratorIterator(
|
173 |
+
$dit, RecursiveIteratorIterator::SELF_FIRST);
|
174 |
+
|
175 |
+
$file_types_to_skip = $aio_wp_security->configs->get_value('aiowps_fcd_exclude_filetypes');
|
176 |
+
|
177 |
+
foreach ($rit as $fileinfo) {
|
178 |
+
if ($fileinfo->isDir()) continue; //skip directories
|
179 |
+
if ($fileinfo->getFilename() == 'wp-security-log-cron-job.txt' || $fileinfo->getFilename() == 'wp-security-log.txt') continue; //skip aiowps log files
|
180 |
+
//Let's omit any file types from the scan which were specified in the settings if necessary
|
181 |
+
if (!empty($file_types_to_skip)){
|
182 |
+
$file_types_to_skip = strtolower($file_types_to_skip);
|
183 |
+
//$current_file_ext = strtolower($fileinfo->getExtension()); //getExtension() only available on PHP 5.3.6 or higher
|
184 |
+
$ext = pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION);
|
185 |
+
$current_file_ext = strtolower($ext);
|
186 |
+
if (!empty($current_file_ext)){
|
187 |
+
if (strpos($file_types_to_skip, $current_file_ext) !== FALSE) continue;
|
188 |
+
}
|
189 |
+
}
|
190 |
+
//Let's omit specific files or directories from the scan which were specified in the settings
|
191 |
+
$filename = $fileinfo->getPathname();
|
192 |
+
$files_to_skip = $aio_wp_security->configs->get_value('aiowps_fcd_exclude_files');
|
193 |
+
if (!empty($files_to_skip))
|
194 |
+
{
|
195 |
+
$file_array = explode(PHP_EOL, $files_to_skip);
|
196 |
+
$skip_this = FALSE;
|
197 |
+
foreach ($file_array as $f_or_dir)
|
198 |
+
{
|
199 |
+
if (strpos($filename, trim($f_or_dir)) !== FALSE){
|
200 |
+
$skip_this = TRUE;
|
201 |
+
}
|
202 |
+
}
|
203 |
+
if ($skip_this) continue;
|
204 |
+
}
|
205 |
+
$filescan_data[$filename] = array();
|
206 |
+
$filescan_data[$filename]['last_modified'] = $fileinfo->getMTime();
|
207 |
+
$filescan_data[$filename]['filesize'] = $fileinfo->getSize();
|
208 |
+
|
209 |
+
}
|
210 |
+
return $filescan_data;
|
211 |
+
}
|
212 |
+
|
213 |
+
function compare_scan_data($last_scan_data, $new_scanned_data)
|
214 |
+
{
|
215 |
+
$files_added = @array_diff_assoc( $new_scanned_data, $last_scan_data ); //Identify new files added: get all files which are in the new scan but not present in the old scan
|
216 |
+
$files_removed = @array_diff_assoc( $last_scan_data, $new_scanned_data ); //Identify files deleted : get all files which are in the old scan but not present in the new scan
|
217 |
+
$new_scan_minus_added = @array_diff_key( $new_scanned_data, $files_added ); //Get all files in current scan which were not newly added
|
218 |
+
$old_scan_minus_deleted = @array_diff_key( $last_scan_data, $files_removed ); //Get all files in old scan which were not deleted
|
219 |
+
$file_changes_detected = array();
|
220 |
+
|
221 |
+
//compare file hashes and mod dates
|
222 |
+
foreach ( $new_scan_minus_added as $entry => $key) {
|
223 |
+
if ( array_key_exists( $entry, $old_scan_minus_deleted ) )
|
224 |
+
{
|
225 |
+
//check filesize and last_modified values
|
226 |
+
if (strcmp($key['last_modified'], $old_scan_minus_deleted[$entry]['last_modified']) != 0 ||
|
227 |
+
strcmp($key['filesize'], $old_scan_minus_deleted[$entry]['filesize']) != 0)
|
228 |
+
{
|
229 |
+
$file_changes_detected[$entry]['filesize'] = $key['filesize'];
|
230 |
+
$file_changes_detected[$entry]['last_modified'] = $key['last_modified'];
|
231 |
+
}
|
232 |
+
}
|
233 |
+
|
234 |
+
}
|
235 |
+
|
236 |
+
//create single array of all changes
|
237 |
+
$results = array(
|
238 |
+
'files_added' => $files_added,
|
239 |
+
'files_removed' => $files_removed,
|
240 |
+
'files_changed' => $file_changes_detected
|
241 |
+
);
|
242 |
+
return $results;
|
243 |
+
}
|
244 |
+
}
|
classes/wp-security-installer.php
CHANGED
@@ -35,6 +35,7 @@ class AIOWPSecurity_Installer
|
|
35 |
$lockdown_tbl_name = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
36 |
$failed_login_tbl_name = AIOWPSEC_TBL_FAILED_LOGINS;
|
37 |
$user_login_activity_tbl_name = AIOWPSEC_TBL_USER_LOGIN_ACTIVITY;
|
|
|
38 |
|
39 |
$ld_tbl_sql = "CREATE TABLE " . $lockdown_tbl_name . " (
|
40 |
id bigint(20) NOT NULL AUTO_INCREMENT,
|
@@ -70,6 +71,23 @@ class AIOWPSecurity_Installer
|
|
70 |
)ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
71 |
dbDelta($ula_tbl_sql);
|
72 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
update_option("aiowpsec_db_version", AIO_WP_SECURITY_DB_VERSION);
|
74 |
}
|
75 |
}
|
35 |
$lockdown_tbl_name = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
36 |
$failed_login_tbl_name = AIOWPSEC_TBL_FAILED_LOGINS;
|
37 |
$user_login_activity_tbl_name = AIOWPSEC_TBL_USER_LOGIN_ACTIVITY;
|
38 |
+
$aiowps_global_meta_tbl_name = AIOWPSEC_TBL_GLOBAL_META_DATA;
|
39 |
|
40 |
$ld_tbl_sql = "CREATE TABLE " . $lockdown_tbl_name . " (
|
41 |
id bigint(20) NOT NULL AUTO_INCREMENT,
|
71 |
)ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
72 |
dbDelta($ula_tbl_sql);
|
73 |
|
74 |
+
$gm_tbl_sql = "CREATE TABLE " . $aiowps_global_meta_tbl_name . " (
|
75 |
+
meta_id bigint(20) NOT NULL auto_increment,
|
76 |
+
date_time datetime NOT NULL default '0000-00-00 00:00:00',
|
77 |
+
meta_key1 varchar(255) NOT NULL,
|
78 |
+
meta_key2 varchar(255) NOT NULL,
|
79 |
+
meta_key3 varchar(255) NOT NULL,
|
80 |
+
meta_key4 varchar(255) NOT NULL,
|
81 |
+
meta_key5 varchar(255) NOT NULL,
|
82 |
+
meta_value1 varchar(255) NOT NULL,
|
83 |
+
meta_value2 text NOT NULL,
|
84 |
+
meta_value3 text NOT NULL,
|
85 |
+
meta_value4 longtext NOT NULL,
|
86 |
+
meta_value5 longtext NOT NULL,
|
87 |
+
PRIMARY KEY (meta_id)
|
88 |
+
)ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
89 |
+
dbDelta($gm_tbl_sql);
|
90 |
+
|
91 |
update_option("aiowpsec_db_version", AIO_WP_SECURITY_DB_VERSION);
|
92 |
}
|
93 |
}
|
classes/wp-security-user-login.php
CHANGED
@@ -35,7 +35,7 @@ class AIOWPSecurity_User_Login
|
|
35 |
|
36 |
$user_locked = $this->check_locked_user();
|
37 |
if ($user_locked != NULL) {
|
38 |
-
$aio_wp_security->debug_logger->log_debug("Login attempt from blocked IP range - ".$user_locked['
|
39 |
return new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Login failed because your IP address has been blocked due to too many failed login attempts.
|
40 |
Please contact the administrator.', 'aiowpsecurity'));
|
41 |
}
|
@@ -117,9 +117,9 @@ class AIOWPSecurity_User_Login
|
|
117 |
$login_lockdown_table = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
118 |
$ip = AIOWPSecurity_Utility_IP::get_user_ip_address(); //Get the IP address of user
|
119 |
$ip_range = AIOWPSecurity_Utility_IP::get_sanitized_ip_range($ip); //Get the IP range of the current user
|
120 |
-
$locked_user = $wpdb->
|
121 |
"WHERE release_date > now() AND " .
|
122 |
-
"
|
123 |
return $locked_user;
|
124 |
}
|
125 |
|
35 |
|
36 |
$user_locked = $this->check_locked_user();
|
37 |
if ($user_locked != NULL) {
|
38 |
+
$aio_wp_security->debug_logger->log_debug("Login attempt from blocked IP range - ".$user_locked['failed_login_ip'],2);
|
39 |
return new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Login failed because your IP address has been blocked due to too many failed login attempts.
|
40 |
Please contact the administrator.', 'aiowpsecurity'));
|
41 |
}
|
117 |
$login_lockdown_table = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
118 |
$ip = AIOWPSecurity_Utility_IP::get_user_ip_address(); //Get the IP address of user
|
119 |
$ip_range = AIOWPSecurity_Utility_IP::get_sanitized_ip_range($ip); //Get the IP range of the current user
|
120 |
+
$locked_user = $wpdb->get_row("SELECT * FROM $login_lockdown_table " .
|
121 |
"WHERE release_date > now() AND " .
|
122 |
+
"failed_login_ip LIKE '" . esc_sql($ip_range) . "%'", ARRAY_A);
|
123 |
return $locked_user;
|
124 |
}
|
125 |
|
classes/wp-security-utility-file.php
CHANGED
@@ -119,6 +119,25 @@ class AIOWPSecurity_Utility_File
|
|
119 |
}
|
120 |
}
|
121 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
/*
|
123 |
* This function will compare the current permission value for a file or dir with the recommended value.
|
124 |
* It will compare the individual "execute", "write" and "read" bits for the "public", "group" and "owner" permissions.
|
119 |
}
|
120 |
}
|
121 |
|
122 |
+
static function download_a_file_option1($file_path, $file_name = '')
|
123 |
+
{
|
124 |
+
$file = $file_path;//Full ABS path to the file
|
125 |
+
if(empty($file_name)){$file_name = basename($file);}
|
126 |
+
|
127 |
+
header('Content-Description: File Transfer');
|
128 |
+
header('Content-Type: application/octet-stream');
|
129 |
+
header('Content-Disposition: attachment; filename='.$file_name);
|
130 |
+
header('Content-Transfer-Encoding: binary');
|
131 |
+
header('Expires: 0');
|
132 |
+
header('Cache-Control: must-revalidate');
|
133 |
+
header('Pragma: public');
|
134 |
+
header('Content-Length: ' . filesize($file));
|
135 |
+
//ob_clean();
|
136 |
+
//flush();
|
137 |
+
readfile($file);
|
138 |
+
exit;
|
139 |
+
}
|
140 |
+
|
141 |
/*
|
142 |
* This function will compare the current permission value for a file or dir with the recommended value.
|
143 |
* It will compare the individual "execute", "write" and "read" bits for the "public", "group" and "owner" permissions.
|
classes/wp-security-utility-htaccess.php
CHANGED
@@ -557,7 +557,7 @@ class AIOWPSecurity_Utility_Htaccess
|
|
557 |
//$rules .= 'RewriteCond %{QUERY_STRING} ^.*(%22|%27|%3C|%3E|%5C|%7B|%7C).* [NC,OR]' . PHP_EOL;
|
558 |
//$rules .= 'RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127.0).* [NC,OR]' . PHP_EOL;
|
559 |
$rules .= 'RewriteCond %{QUERY_STRING} ^.*(globals|encode|config|localhost|loopback).* [NC,OR]' . PHP_EOL;
|
560 |
-
$rules .= 'RewriteCond %{QUERY_STRING}
|
561 |
$rules .= 'RewriteRule ^(.*)$ - [F,L]' . PHP_EOL;
|
562 |
$rules .= AIOWPSecurity_Utility_Htaccess::$deny_bad_query_strings_marker_end . PHP_EOL; //Add feature marker end
|
563 |
}
|
557 |
//$rules .= 'RewriteCond %{QUERY_STRING} ^.*(%22|%27|%3C|%3E|%5C|%7B|%7C).* [NC,OR]' . PHP_EOL;
|
558 |
//$rules .= 'RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127.0).* [NC,OR]' . PHP_EOL;
|
559 |
$rules .= 'RewriteCond %{QUERY_STRING} ^.*(globals|encode|config|localhost|loopback).* [NC,OR]' . PHP_EOL;
|
560 |
+
$rules .= 'RewriteCond %{QUERY_STRING} (\;|\'|\"|%22).*(request|insert|union|declare|drop) [NC]' . PHP_EOL;
|
561 |
$rules .= 'RewriteRule ^(.*)$ - [F,L]' . PHP_EOL;
|
562 |
$rules .= AIOWPSecurity_Utility_Htaccess::$deny_bad_query_strings_marker_end . PHP_EOL; //Add feature marker end
|
563 |
}
|
classes/wp-security-utility.php
CHANGED
@@ -142,4 +142,14 @@ class AIOWPSecurity_Utility
|
|
142 |
return false;
|
143 |
}
|
144 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
145 |
}
|
142 |
return false;
|
143 |
}
|
144 |
}
|
145 |
+
|
146 |
+
//This is a general yellow box message for when we want to suppress a feature's config items because site is subsite of multi-site
|
147 |
+
static function display_multisite_message()
|
148 |
+
{
|
149 |
+
echo '<div class="aio_yellow_box">';
|
150 |
+
echo '<p>'.__('The plugin has detected that you are using a Multi-Site WordPress installation.', 'aiowpsecurity').'</p>
|
151 |
+
<p>'.__('This feature can only be configured by the "superadmin" on the main site.', 'aiowpsecurity').'</p>';
|
152 |
+
echo '</div>';
|
153 |
+
}
|
154 |
+
|
155 |
}
|
readme.txt
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
=== All In One WP Security & Firewall ===
|
2 |
Contributors: Tips and Tricks HQ, wpsolutions, Peter Petreski, Ruhul Amin
|
3 |
Donate link: http://www.tipsandtricks-hq.com
|
4 |
-
Tags: security, secure, Anti Virus, antivirus, virus, firewall, login, lockdown, htaccess,
|
5 |
Requires at least: 3.5
|
6 |
Tested up to: 3.6
|
7 |
-
Stable tag: 2.
|
8 |
License: GPLv3
|
9 |
|
10 |
A comprehensive, user-friendly, all in one WordPress security and firewall plugin for your site.
|
@@ -85,6 +85,9 @@ or malicious bots who do not have a special cookie in their browser. You (the si
|
|
85 |
= WhoIs Lookup =
|
86 |
* Perform a WhoIs lookup of a suspicious host or IP address and get full details.
|
87 |
|
|
|
|
|
|
|
88 |
= Comment SPAM Security =
|
89 |
* Monitor the most active IP addresses which persistently produce the most SPAM comments and instantly block them with the click of a button.
|
90 |
* Prevent comments from being submitted if it doesn't originate from your domain (this should reduce some SPAM bot comment posting on your site).
|
@@ -133,6 +136,14 @@ None
|
|
133 |
|
134 |
== Changelog ==
|
135 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
= 2.2 =
|
137 |
- Added a new feature which will block some spambots from submitting comments.
|
138 |
- Moved Comment SPAM IP monitoring interface to the new "SPAM Prevention" menu.
|
1 |
=== All In One WP Security & Firewall ===
|
2 |
Contributors: Tips and Tricks HQ, wpsolutions, Peter Petreski, Ruhul Amin
|
3 |
Donate link: http://www.tipsandtricks-hq.com
|
4 |
+
Tags: security, secure, Anti Virus, antivirus, ban, ban hacker, virus, firewall, login, lockdown, htaccess, hack, malware, vulnerability, protect, protection, phishing, database, backup, plugin, sql injection, ssl, restrict
|
5 |
Requires at least: 3.5
|
6 |
Tested up to: 3.6
|
7 |
+
Stable tag: 2.3
|
8 |
License: GPLv3
|
9 |
|
10 |
A comprehensive, user-friendly, all in one WordPress security and firewall plugin for your site.
|
85 |
= WhoIs Lookup =
|
86 |
* Perform a WhoIs lookup of a suspicious host or IP address and get full details.
|
87 |
|
88 |
+
= Security Scanner =
|
89 |
+
* The file change detection scanner can alert you if any files have changed in your WordPress system. You can then investigate and see if that was a legitimate change or some bad code was injected.
|
90 |
+
|
91 |
= Comment SPAM Security =
|
92 |
* Monitor the most active IP addresses which persistently produce the most SPAM comments and instantly block them with the click of a button.
|
93 |
* Prevent comments from being submitted if it doesn't originate from your domain (this should reduce some SPAM bot comment posting on your site).
|
136 |
|
137 |
== Changelog ==
|
138 |
|
139 |
+
= 2.3 =
|
140 |
+
- Added new menu called Scanner with a new feature called File Change Detection. This feature will alert you if any files have changed, added or removed from your system.
|
141 |
+
- Fixed "Deny Bad Query Strings" rules to not break the ability to drag components in the WordPress "Appearance->Menus" page
|
142 |
+
- Fixed an activation time warning (on sites with WP_DEBUG option enabled)
|
143 |
+
- Re-implemented the wp-config.php file content backup feature. It now directly downloads the contents of the file to your computer.
|
144 |
+
- Multi-site enhancements: Suppressed access to configuration settings for features which are not allowed to be configured from subsites of multi-site installations.
|
145 |
+
- Fixed a bug with login lockdown feature.
|
146 |
+
|
147 |
= 2.2 =
|
148 |
- Added a new feature which will block some spambots from submitting comments.
|
149 |
- Moved Comment SPAM IP monitoring interface to the new "SPAM Prevention" menu.
|
wp-security-core.php
CHANGED
@@ -3,8 +3,8 @@
|
|
3 |
if (!class_exists('AIO_WP_Security')){
|
4 |
|
5 |
class AIO_WP_Security{
|
6 |
-
var $version = '2.
|
7 |
-
var $db_version = '1.
|
8 |
var $plugin_url;
|
9 |
var $plugin_path;
|
10 |
var $configs;
|
@@ -13,6 +13,7 @@ class AIO_WP_Security{
|
|
13 |
var $cron_handler;
|
14 |
var $user_login_obj;
|
15 |
var $backup_obj;
|
|
|
16 |
|
17 |
function __construct()
|
18 |
{
|
@@ -65,11 +66,13 @@ class AIO_WP_Security{
|
|
65 |
define('AIOWPSEC_FIREWALL_MENU_SLUG', 'aiowpsec_firewall');
|
66 |
define('AIOWPSEC_MAINTENANCE_MENU_SLUG', 'aiowpsec_maintenance');
|
67 |
define('AIOWPSEC_SPAM_MENU_SLUG', 'aiowpsec_spam');
|
|
|
68 |
|
69 |
global $wpdb;
|
70 |
define('AIOWPSEC_TBL_LOGIN_LOCKDOWN', $wpdb->prefix . 'aiowps_login_lockdown');
|
71 |
define('AIOWPSEC_TBL_FAILED_LOGINS', $wpdb->prefix . 'aiowps_failed_logins');
|
72 |
define('AIOWPSEC_TBL_USER_LOGIN_ACTIVITY', $wpdb->prefix . 'aiowps_login_activity');
|
|
|
73 |
|
74 |
}
|
75 |
|
@@ -85,6 +88,7 @@ class AIO_WP_Security{
|
|
85 |
|
86 |
include_once('classes/wp-security-user-login.php');
|
87 |
include_once('classes/wp-security-backup.php');
|
|
|
88 |
include_once('classes/wp-security-cronjob-handler.php');
|
89 |
include_once('classes/grade-system/wp-security-feature-item.php');
|
90 |
include_once('classes/grade-system/wp-security-feature-item-manager.php');
|
@@ -151,7 +155,8 @@ class AIO_WP_Security{
|
|
151 |
|
152 |
//Actions, filters, shortcodes goes here
|
153 |
$this->user_login_obj = new AIOWPSecurity_User_Login();//Do the user login operation tasks
|
154 |
-
$this->backup_obj = new AIOWPSecurity_Backup();//Object to handle backup tasks
|
|
|
155 |
$this->cron_handler = new AIOWPSecurity_Cronjob_Handler();
|
156 |
|
157 |
add_action('wp_head',array(&$this, 'aiowps_header_content'));
|
3 |
if (!class_exists('AIO_WP_Security')){
|
4 |
|
5 |
class AIO_WP_Security{
|
6 |
+
var $version = '2.3';
|
7 |
+
var $db_version = '1.3';
|
8 |
var $plugin_url;
|
9 |
var $plugin_path;
|
10 |
var $configs;
|
13 |
var $cron_handler;
|
14 |
var $user_login_obj;
|
15 |
var $backup_obj;
|
16 |
+
var $filescan_obj;
|
17 |
|
18 |
function __construct()
|
19 |
{
|
66 |
define('AIOWPSEC_FIREWALL_MENU_SLUG', 'aiowpsec_firewall');
|
67 |
define('AIOWPSEC_MAINTENANCE_MENU_SLUG', 'aiowpsec_maintenance');
|
68 |
define('AIOWPSEC_SPAM_MENU_SLUG', 'aiowpsec_spam');
|
69 |
+
define('AIOWPSEC_FILESCAN_MENU_SLUG', 'aiowpsec_filescan');
|
70 |
|
71 |
global $wpdb;
|
72 |
define('AIOWPSEC_TBL_LOGIN_LOCKDOWN', $wpdb->prefix . 'aiowps_login_lockdown');
|
73 |
define('AIOWPSEC_TBL_FAILED_LOGINS', $wpdb->prefix . 'aiowps_failed_logins');
|
74 |
define('AIOWPSEC_TBL_USER_LOGIN_ACTIVITY', $wpdb->prefix . 'aiowps_login_activity');
|
75 |
+
define('AIOWPSEC_TBL_GLOBAL_META_DATA', $wpdb->prefix . 'aiowps_global_meta');
|
76 |
|
77 |
}
|
78 |
|
88 |
|
89 |
include_once('classes/wp-security-user-login.php');
|
90 |
include_once('classes/wp-security-backup.php');
|
91 |
+
include_once('classes/wp-security-file-scan.php');
|
92 |
include_once('classes/wp-security-cronjob-handler.php');
|
93 |
include_once('classes/grade-system/wp-security-feature-item.php');
|
94 |
include_once('classes/grade-system/wp-security-feature-item-manager.php');
|
155 |
|
156 |
//Actions, filters, shortcodes goes here
|
157 |
$this->user_login_obj = new AIOWPSecurity_User_Login();//Do the user login operation tasks
|
158 |
+
$this->backup_obj = new AIOWPSecurity_Backup();//Object to handle backup tasks
|
159 |
+
$this->filescan_obj = new AIOWPSecurity_Filescan();//Object to handle backup tasks
|
160 |
$this->cron_handler = new AIOWPSecurity_Cronjob_Handler();
|
161 |
|
162 |
add_action('wp_head',array(&$this, 'aiowps_header_content'));
|
wp-security.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: All In One WP Security
|
4 |
-
Version: v2.
|
5 |
Plugin URI: http://www.tipsandtricks-hq.com/
|
6 |
Author: Tips and Tricks HQ, Peter, Ruhul Amin
|
7 |
Author URI: http://www.tipsandtricks-hq.com/
|
@@ -38,4 +38,4 @@ function aiowps_ms_handle_new_blog_creation($blog_id, $user_id, $domain, $path,
|
|
38 |
switch_to_blog($old_blog);
|
39 |
}
|
40 |
}
|
41 |
-
add_action('wpmu_new_blog', 'aiowps_ms_handle_new_blog_creation', 10, 6);
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: All In One WP Security
|
4 |
+
Version: v2.3
|
5 |
Plugin URI: http://www.tipsandtricks-hq.com/
|
6 |
Author: Tips and Tricks HQ, Peter, Ruhul Amin
|
7 |
Author URI: http://www.tipsandtricks-hq.com/
|
38 |
switch_to_blog($old_blog);
|
39 |
}
|
40 |
}
|
41 |
+
add_action('wpmu_new_blog', 'aiowps_ms_handle_new_blog_creation', 10, 6);
|