Version Description
(2017-10-24) =
-
New Audit Trail Alerts for logging of Tag changes
- Alert 2119: User added tag to a post
- Alert 2120: User removed a tag from a post
- Alert 2121: User added new tag on WordPress
- Alert 2122: User deleted a tag from WordPress
- Alert 2123: User renamed a tag
- Alert 2124: User changed the slug of a tag
- Alert 2125: User changed the description of a tag
-
New Audit Trail Alerts for logging of User Profile Changes
- Alert 4017: Changed the first name of a user
- Alert 4018: Changed the last name of a user
- Alert 4019: Changed the nickname of a user
- Alert 4020: Changed the display name of a user
-
New Functionality
- New hover over option to modify alerts' behaviour. This applies to alerts that have configuration such as 1002, 1003, 6007 and 6023.
- Option to record referrer URL in log file when logging 404 errors to a log file.
- Option to specify how many failed logins the plugin should log.
- Option to capture the usernames used during failed login attempts with non WordPress users.
-
Improvements
- Drop down menu to select number of alerts to display in Audit Log Viewer now has only fixed numbers.
- Renamed first column to Alert ID (standardising text in plugin)
- New French translation by Denis Moscato
Refer to the WP Security Audit Log change log on the plugin page for a complete changelog.
Download this release
Release Info
Developer | WPWhiteSecurity |
Plugin | WP Security Audit Log |
Version | 2.6.9 |
Comparing to | |
See all releases |
Code changes from version 2.6.8 to 2.6.9
- classes/AuditLogListView.php +29 -7
- classes/Sensors/Content.php +230 -4
- classes/Sensors/LogInOut.php +131 -30
- classes/Sensors/MetaData.php +80 -7
- classes/Sensors/System.php +28 -4
- classes/Sensors/UserProfile.php +2 -2
- classes/Settings.php +46 -0
- classes/Views/Settings.php +5 -1
- classes/Views/ToggleAlerts.php +58 -17
- css/auditlog.css +10 -2
- defaults.php +19 -4
- js/auditlog.js +41 -20
- languages/wp-security-audit-log-de_DE.mo +0 -0
- languages/wp-security-audit-log-es_ES.mo +0 -0
- languages/wp-security-audit-log-fr_FR.mo +0 -0
- languages/wp-security-audit-log-it_IT.mo +0 -0
- languages/wp-security-audit-log-ro_RO.mo +0 -0
- readme.txt +27 -812
- wp-security-audit-log.php +2 -2
classes/AuditLogListView.php
CHANGED
@@ -43,11 +43,9 @@ class WSAL_AuditLogListView extends WP_List_Table
|
|
43 |
public function extra_tablenav($which)
|
44 |
{
|
45 |
// items-per-page widget
|
46 |
-
$o = __('Other', 'wp-security-audit-log');
|
47 |
$p = $this->_plugin->settings->GetViewPerPage();
|
48 |
-
$items = array(
|
49 |
if (!in_array($p, $items)) $items[] = $p;
|
50 |
-
if ($p == $o || $p == 0) $p = $o[1]; // a sane default if things goes bust
|
51 |
|
52 |
?><div class="wsal-ipp wsal-ipp-<?php echo $which; ?>">
|
53 |
<?php _e('Show ', 'wp-security-audit-log'); ?>
|
@@ -141,7 +139,7 @@ class WSAL_AuditLogListView extends WP_List_Table
|
|
141 |
$cols = array(
|
142 |
//'cb' => '<input type="checkbox" />',
|
143 |
//'read' => __('Read', 'wp-security-audit-log'),
|
144 |
-
'type' => __( '
|
145 |
'code' => __( 'Type', 'wp-security-audit-log' ),
|
146 |
'crtd' => __( 'Date', 'wp-security-audit-log' ),
|
147 |
'user' => $name_column,
|
@@ -158,7 +156,7 @@ class WSAL_AuditLogListView extends WP_List_Table
|
|
158 |
foreach ( $sel_columns as $key => $value ) {
|
159 |
switch ( $key ) {
|
160 |
case 'alert_code':
|
161 |
-
$cols['type'] = __( '
|
162 |
break;
|
163 |
case 'type':
|
164 |
$cols['code'] = __( 'Type', 'wp-security-audit-log' );
|
@@ -216,8 +214,19 @@ class WSAL_AuditLogListView extends WP_List_Table
|
|
216 |
. ($item->is_read ? 'old' : 'new')
|
217 |
. '" title="' . __('Click to toggle.', 'wp-security-audit-log') . '"></span>';
|
218 |
case 'type':
|
219 |
-
$code = $this->_plugin->alerts->GetAlert($item->alert_id);
|
220 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
. str_pad($item->alert_id, 4, '0', STR_PAD_LEFT) . ' </span>';
|
222 |
case 'code':
|
223 |
$code = $this->_plugin->alerts->GetAlert($item->alert_id);
|
@@ -392,6 +401,9 @@ class WSAL_AuditLogListView extends WP_List_Table
|
|
392 |
case $name == '%CategoryLink%':
|
393 |
return ' <a target="_blank" href="'.esc_url($value).'">View the category</a>';
|
394 |
|
|
|
|
|
|
|
395 |
case $name == '%EditorLinkForum%':
|
396 |
return ' <a target="_blank" href="'.esc_url($value).'">View the forum</a>';
|
397 |
|
@@ -417,6 +429,16 @@ class WSAL_AuditLogListView extends WP_List_Table
|
|
417 |
return 'Click <a href="'.esc_url(admin_url("admin.php?page=wsal-togglealerts#tab-system-activity")).'">here</a> to log such requests to file';
|
418 |
}
|
419 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
420 |
case strncmp($value, 'http://', 7) === 0:
|
421 |
case strncmp($value, 'https://', 7) === 0:
|
422 |
return '<a href="' . esc_html($value) . '"' . ' title="' . esc_html($value) . '"' . ' target="_blank">' . esc_html($value) . '</a>';
|
43 |
public function extra_tablenav($which)
|
44 |
{
|
45 |
// items-per-page widget
|
|
|
46 |
$p = $this->_plugin->settings->GetViewPerPage();
|
47 |
+
$items = array(5, 10, 15, 30, 50);
|
48 |
if (!in_array($p, $items)) $items[] = $p;
|
|
|
49 |
|
50 |
?><div class="wsal-ipp wsal-ipp-<?php echo $which; ?>">
|
51 |
<?php _e('Show ', 'wp-security-audit-log'); ?>
|
139 |
$cols = array(
|
140 |
//'cb' => '<input type="checkbox" />',
|
141 |
//'read' => __('Read', 'wp-security-audit-log'),
|
142 |
+
'type' => __( 'Alert ID', 'wp-security-audit-log' ),
|
143 |
'code' => __( 'Type', 'wp-security-audit-log' ),
|
144 |
'crtd' => __( 'Date', 'wp-security-audit-log' ),
|
145 |
'user' => $name_column,
|
156 |
foreach ( $sel_columns as $key => $value ) {
|
157 |
switch ( $key ) {
|
158 |
case 'alert_code':
|
159 |
+
$cols['type'] = __( 'Alert ID', 'wp-security-audit-log' );
|
160 |
break;
|
161 |
case 'type':
|
162 |
$cols['code'] = __( 'Type', 'wp-security-audit-log' );
|
214 |
. ($item->is_read ? 'old' : 'new')
|
215 |
. '" title="' . __('Click to toggle.', 'wp-security-audit-log') . '"></span>';
|
216 |
case 'type':
|
217 |
+
$code = $this->_plugin->alerts->GetAlert( $item->alert_id );
|
218 |
+
$extra_msg = '';
|
219 |
+
$data_link = '';
|
220 |
+
$modification_alerts = array( 1002, 1003, 6007, 6023 );
|
221 |
+
if ( in_array( $item->alert_id, $modification_alerts, true ) ) {
|
222 |
+
$extra_msg = '. Modify this alert.';
|
223 |
+
if ( 1002 === $item->alert_id || 1003 === $item->alert_id ) {
|
224 |
+
$data_link = add_query_arg( 'page', 'wsal-togglealerts#tab-users-profiles---activity', admin_url( 'admin.php' ) );
|
225 |
+
} elseif ( 6007 === $item->alert_id || 6023 === $item->alert_id ) {
|
226 |
+
$data_link = add_query_arg( 'page', 'wsal-togglealerts#tab-system-activity', admin_url( 'admin.php' ) );
|
227 |
+
}
|
228 |
+
}
|
229 |
+
return '<span class="log-disable" data-tooltip="' . __( 'Disable this type of alerts.', 'wp-security-audit-log' ) . '<br>' . $item->alert_id . ' - ' . esc_html( $code->desc ) . $extra_msg . '" data-alert-id="' . $item->alert_id . '" ' . esc_attr( 'data-link=' . $data_link ) . ' >'
|
230 |
. str_pad($item->alert_id, 4, '0', STR_PAD_LEFT) . ' </span>';
|
231 |
case 'code':
|
232 |
$code = $this->_plugin->alerts->GetAlert($item->alert_id);
|
401 |
case $name == '%CategoryLink%':
|
402 |
return ' <a target="_blank" href="'.esc_url($value).'">View the category</a>';
|
403 |
|
404 |
+
case $name == '%TagLink%':
|
405 |
+
return ' <a target="_blank" href="'.esc_url($value).'">View the tag</a>';
|
406 |
+
|
407 |
case $name == '%EditorLinkForum%':
|
408 |
return ' <a target="_blank" href="'.esc_url($value).'">View the forum</a>';
|
409 |
|
429 |
return 'Click <a href="'.esc_url(admin_url("admin.php?page=wsal-togglealerts#tab-system-activity")).'">here</a> to log such requests to file';
|
430 |
}
|
431 |
|
432 |
+
case '%LogFileLink%' === $name:
|
433 |
+
if ( ! empty( $value ) && 'on' === $this->_plugin->GetGlobalOption( 'log-visitor-failed-login' ) ) {
|
434 |
+
return '<a href="' . esc_url( $value ) . '" download>Download the Log file</a>';
|
435 |
+
} elseif ( ! empty( $value ) ) {
|
436 |
+
return '<a href="' . esc_url( $value ) . '">Keep a record of the usernames</a>';
|
437 |
+
}
|
438 |
+
// Failed login file link.
|
439 |
+
case '%LogFileText%' === $name:
|
440 |
+
return esc_html( $value );
|
441 |
+
// Failed login file text.
|
442 |
case strncmp($value, 'http://', 7) === 0:
|
443 |
case strncmp($value, 'https://', 7) === 0:
|
444 |
return '<a href="' . esc_html($value) . '"' . ' title="' . esc_html($value) . '"' . ' target="_blank">' . esc_html($value) . '</a>';
|
classes/Sensors/Content.php
CHANGED
@@ -77,6 +77,13 @@
|
|
77 |
* 2088 User changed title of a custom post type
|
78 |
* 2104 User opened a custom post type in the editor
|
79 |
* 2105 User viewed a custom post type
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
*/
|
81 |
class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
82 |
/**
|
@@ -94,6 +101,13 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
94 |
*/
|
95 |
protected $_OldCats = null;
|
96 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
/**
|
98 |
* @var string old path to file
|
99 |
*/
|
@@ -119,11 +133,68 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
119 |
add_action('edit_category', array($this, 'EventChangedCategoryParent'));
|
120 |
add_action('save_post', array($this, 'SetRevisionLink'), 10, 3);
|
121 |
add_action('publish_future_post', array($this, 'EventPublishFuture'), 10, 1);
|
122 |
-
|
123 |
add_action('create_category', array($this, 'EventCategoryCreation'), 10, 1);
|
|
|
124 |
|
125 |
add_action( 'wp_head', array( $this, 'ViewingPost' ), 10 );
|
126 |
add_filter('post_edit_form_tag', array($this, 'EditingPost'), 10, 1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
}
|
128 |
|
129 |
/**
|
@@ -155,6 +226,9 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
155 |
$this->RetrieveOldData();
|
156 |
// check for category changes
|
157 |
$this->CheckCategoryDeletion();
|
|
|
|
|
|
|
158 |
}
|
159 |
|
160 |
/**
|
@@ -172,6 +246,7 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
172 |
$this->_OldLink = get_permalink($postID);
|
173 |
$this->_OldTmpl = $this->GetPostTemplate($this->_OldPost);
|
174 |
$this->_OldCats = $this->GetPostCategories($this->_OldPost);
|
|
|
175 |
$this->_OldStky = in_array($postID, get_option('sticky_posts'));
|
176 |
}
|
177 |
}
|
@@ -212,6 +287,16 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
212 |
return wp_get_post_categories($post->ID, array('fields' => 'names'));
|
213 |
}
|
214 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
215 |
/**
|
216 |
* Check all the post changes.
|
217 |
* @param string $newStatus new status
|
@@ -255,8 +340,8 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
255 |
+ $this->CheckStickyChange($this->_OldStky, isset($_REQUEST['sticky']), $post)
|
256 |
+ $this->CheckVisibilityChange($this->_OldPost, $post, $oldStatus, $newStatus)
|
257 |
+ $this->CheckTemplateChange($this->_OldTmpl, $this->GetPostTemplate($post), $post)
|
258 |
-
+ $this->CheckCategoriesChange($this->_OldCats, $this->GetPostCategories($post), $post)
|
259 |
-
;
|
260 |
|
261 |
if (!$changes) {
|
262 |
$changes = $this->CheckDateChange($this->_OldPost, $post);
|
@@ -495,6 +580,64 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
495 |
}
|
496 |
}
|
497 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
498 |
/**
|
499 |
* Author changed.
|
500 |
* @param stdClass $oldPost old post
|
@@ -766,6 +909,21 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
766 |
));
|
767 |
}
|
768 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
769 |
/**
|
770 |
* Category deleted.
|
771 |
* @global array $_POST post data
|
@@ -786,7 +944,9 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
786 |
if (isset($_POST['taxonomy'])) {
|
787 |
if ($action == 'delete' && $_POST['taxonomy'] == 'category' && !empty($_POST['delete_tags'])) {
|
788 |
// bulk delete
|
789 |
-
|
|
|
|
|
790 |
} elseif ($action == 'delete-tag' && $_POST['taxonomy'] == 'category' && !empty($_POST['tag_ID'])) {
|
791 |
// single delete
|
792 |
$categoryIds[] = $_POST['tag_ID'];
|
@@ -803,6 +963,58 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
803 |
}
|
804 |
}
|
805 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
806 |
/**
|
807 |
* Changed the parent of the category.
|
808 |
* @global array $_POST post data
|
@@ -885,6 +1097,20 @@ class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
|
885 |
}
|
886 |
}
|
887 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
888 |
/**
|
889 |
* Ignore post from BBPress, WooCommerce Plugin
|
890 |
* Triggered on the Sensors
|
77 |
* 2088 User changed title of a custom post type
|
78 |
* 2104 User opened a custom post type in the editor
|
79 |
* 2105 User viewed a custom post type
|
80 |
+
* 2119 User added blog post tag
|
81 |
+
* 2120 User removed blog post tag
|
82 |
+
* 2121 User created new tag
|
83 |
+
* 2122 User deleted tag
|
84 |
+
* 2123 User renamed tag
|
85 |
+
* 2124 User changed tag slug
|
86 |
+
* 2125 User changed tag description
|
87 |
*/
|
88 |
class WSAL_Sensors_Content extends WSAL_AbstractSensor {
|
89 |
/**
|
101 |
*/
|
102 |
protected $_OldCats = null;
|
103 |
|
104 |
+
/**
|
105 |
+
* Old tags.
|
106 |
+
*
|
107 |
+
* @var array
|
108 |
+
*/
|
109 |
+
protected $_old_tags = null;
|
110 |
+
|
111 |
/**
|
112 |
* @var string old path to file
|
113 |
*/
|
133 |
add_action('edit_category', array($this, 'EventChangedCategoryParent'));
|
134 |
add_action('save_post', array($this, 'SetRevisionLink'), 10, 3);
|
135 |
add_action('publish_future_post', array($this, 'EventPublishFuture'), 10, 1);
|
136 |
+
|
137 |
add_action('create_category', array($this, 'EventCategoryCreation'), 10, 1);
|
138 |
+
add_action( 'create_post_tag', array( $this, 'EventTagCreation' ), 10, 1 );
|
139 |
|
140 |
add_action( 'wp_head', array( $this, 'ViewingPost' ), 10 );
|
141 |
add_filter('post_edit_form_tag', array($this, 'EditingPost'), 10, 1);
|
142 |
+
|
143 |
+
add_filter( 'wp_update_term_data', array( $this, 'event_terms_rename' ), 10, 4 );
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Method: Triggered when terms are renamed.
|
148 |
+
*
|
149 |
+
* @param array $data Term data to be updated.
|
150 |
+
* @param int $term_id Term ID.
|
151 |
+
* @param string $taxonomy Taxonomy slug.
|
152 |
+
* @param array $args Arguments passed to wp_update_term().
|
153 |
+
* @since 2.6.9
|
154 |
+
*/
|
155 |
+
public function event_terms_rename( $data, $term_id, $taxonomy, $args ) {
|
156 |
+
|
157 |
+
// Check if the taxonomy is term.
|
158 |
+
if ( 'post_tag' !== $taxonomy ) {
|
159 |
+
return $data;
|
160 |
+
}
|
161 |
+
|
162 |
+
// Get data.
|
163 |
+
$new_name = ( isset( $data['name'] ) ) ? $data['name'] : false;
|
164 |
+
$new_slug = ( isset( $data['slug'] ) ) ? $data['slug'] : false;
|
165 |
+
$new_desc = ( isset( $args['description'] ) ) ? $args['description'] : false;
|
166 |
+
|
167 |
+
// Get old data.
|
168 |
+
$term = get_term( $term_id, $taxonomy );
|
169 |
+
$old_name = $term->name;
|
170 |
+
$old_slug = $term->slug;
|
171 |
+
$old_desc = $term->description;
|
172 |
+
|
173 |
+
// Update if both names are not same.
|
174 |
+
if ( $old_name !== $new_name ) {
|
175 |
+
$this->plugin->alerts->Trigger( 2123, array(
|
176 |
+
'old_name' => $old_name,
|
177 |
+
'new_name' => $new_name,
|
178 |
+
) );
|
179 |
+
}
|
180 |
+
|
181 |
+
// Update if both slugs are not same.
|
182 |
+
if ( $old_slug !== $new_slug ) {
|
183 |
+
$this->plugin->alerts->Trigger( 2124, array(
|
184 |
+
'tag' => $new_name,
|
185 |
+
'old_slug' => $old_slug,
|
186 |
+
'new_slug' => $new_slug,
|
187 |
+
) );
|
188 |
+
}
|
189 |
+
|
190 |
+
// Update if both descriptions are not same.
|
191 |
+
if ( $old_desc !== $new_desc ) {
|
192 |
+
$this->plugin->alerts->Trigger( 2125, array(
|
193 |
+
'tag' => $new_name,
|
194 |
+
) );
|
195 |
+
}
|
196 |
+
return $data;
|
197 |
+
|
198 |
}
|
199 |
|
200 |
/**
|
226 |
$this->RetrieveOldData();
|
227 |
// check for category changes
|
228 |
$this->CheckCategoryDeletion();
|
229 |
+
|
230 |
+
// Check for tag changes.
|
231 |
+
$this->check_tag_deletion();
|
232 |
}
|
233 |
|
234 |
/**
|
246 |
$this->_OldLink = get_permalink($postID);
|
247 |
$this->_OldTmpl = $this->GetPostTemplate($this->_OldPost);
|
248 |
$this->_OldCats = $this->GetPostCategories($this->_OldPost);
|
249 |
+
$this->_old_tags = $this->get_post_tags( $this->_OldPost );
|
250 |
$this->_OldStky = in_array($postID, get_option('sticky_posts'));
|
251 |
}
|
252 |
}
|
287 |
return wp_get_post_categories($post->ID, array('fields' => 'names'));
|
288 |
}
|
289 |
|
290 |
+
/**
|
291 |
+
* Get post tags (array of tag names).
|
292 |
+
*
|
293 |
+
* @param stdClass $post - The post.
|
294 |
+
* @return array list of categories
|
295 |
+
*/
|
296 |
+
protected function get_post_tags( $post ) {
|
297 |
+
return wp_get_post_tags( $post->ID, array( 'fields' => 'names' ) );
|
298 |
+
}
|
299 |
+
|
300 |
/**
|
301 |
* Check all the post changes.
|
302 |
* @param string $newStatus new status
|
340 |
+ $this->CheckStickyChange($this->_OldStky, isset($_REQUEST['sticky']), $post)
|
341 |
+ $this->CheckVisibilityChange($this->_OldPost, $post, $oldStatus, $newStatus)
|
342 |
+ $this->CheckTemplateChange($this->_OldTmpl, $this->GetPostTemplate($post), $post)
|
343 |
+
+ $this->CheckCategoriesChange($this->_OldCats, $this->GetPostCategories($post), $post);
|
344 |
+
$this->check_tags_change( $this->_old_tags, $this->get_post_tags( $post ), $post );
|
345 |
|
346 |
if (!$changes) {
|
347 |
$changes = $this->CheckDateChange($this->_OldPost, $post);
|
580 |
}
|
581 |
}
|
582 |
|
583 |
+
/**
|
584 |
+
* Tags changed.
|
585 |
+
*
|
586 |
+
* @param array $old_tags - Old tags.
|
587 |
+
* @param array $new_tags - New tags.
|
588 |
+
* @param stdClass $post - The post.
|
589 |
+
*/
|
590 |
+
protected function check_tags_change( $old_tags, $new_tags, $post ) {
|
591 |
+
// Check for added tags.
|
592 |
+
$added_tags = array_diff( $new_tags, $old_tags );
|
593 |
+
|
594 |
+
// Check for removed tags.
|
595 |
+
$removed_tags = array_diff( $old_tags, $new_tags );
|
596 |
+
|
597 |
+
// Convert tags arrays to string.
|
598 |
+
$old_tags = implode( ', ', $old_tags );
|
599 |
+
$new_tags = implode( ', ', $new_tags );
|
600 |
+
$added_tags = implode( ', ', $added_tags );
|
601 |
+
$removed_tags = implode( ', ', $removed_tags );
|
602 |
+
|
603 |
+
// Declare event variables.
|
604 |
+
$add_event = '';
|
605 |
+
$remove_event = '';
|
606 |
+
if ( $old_tags !== $new_tags && ! empty( $added_tags ) ) {
|
607 |
+
$add_event = $this->GetEventTypeForPostType( $post, 2119, 0, 0 );
|
608 |
+
if ( $add_event ) {
|
609 |
+
$editor_link = $this->GetEditorLink( $post );
|
610 |
+
$post_status = ( 'publish' === $post->post_status ) ? 'published' : $this->post_status;
|
611 |
+
$this->plugin->alerts->Trigger( $add_event, array(
|
612 |
+
'PostID' => $post->ID,
|
613 |
+
'status' => $post_status,
|
614 |
+
'post_title' => $post->post_title,
|
615 |
+
'tag' => $added_tags ? $added_tags : 'no tags',
|
616 |
+
$editor_link['name'] => $editor_link['value'],
|
617 |
+
) );
|
618 |
+
}
|
619 |
+
}
|
620 |
+
|
621 |
+
if ( $old_tags !== $new_tags && ! empty( $removed_tags ) ) {
|
622 |
+
$remove_event = $this->GetEventTypeForPostType( $post, 2120, 0, 0 );
|
623 |
+
if ( $remove_event ) {
|
624 |
+
$editor_link = $this->GetEditorLink( $post );
|
625 |
+
$post_status = ( 'publish' === $post->post_status ) ? 'published' : $this->post_status;
|
626 |
+
$this->plugin->alerts->Trigger( $remove_event, array(
|
627 |
+
'PostID' => $post->ID,
|
628 |
+
'status' => $post_status,
|
629 |
+
'post_title' => $post->post_title,
|
630 |
+
'tag' => $removed_tags ? $removed_tags : 'no tags',
|
631 |
+
$editor_link['name'] => $editor_link['value'],
|
632 |
+
) );
|
633 |
+
}
|
634 |
+
}
|
635 |
+
|
636 |
+
if ( $add_event || $remove_event ) {
|
637 |
+
return 1;
|
638 |
+
}
|
639 |
+
}
|
640 |
+
|
641 |
/**
|
642 |
* Author changed.
|
643 |
* @param stdClass $oldPost old post
|
909 |
));
|
910 |
}
|
911 |
|
912 |
+
/**
|
913 |
+
* New tag created.
|
914 |
+
*
|
915 |
+
* @param int $tag_id - Tag ID.
|
916 |
+
*/
|
917 |
+
public function EventTagCreation( $tag_id ) {
|
918 |
+
$tag = get_tag( $tag_id );
|
919 |
+
$tag_link = $this->get_tag_link( $tag_id );
|
920 |
+
$this->plugin->alerts->Trigger( 2121, array(
|
921 |
+
'TagName' => $tag->name,
|
922 |
+
'Slug' => $tag->slug,
|
923 |
+
'TagLink' => $tag_link,
|
924 |
+
) );
|
925 |
+
}
|
926 |
+
|
927 |
/**
|
928 |
* Category deleted.
|
929 |
* @global array $_POST post data
|
944 |
if (isset($_POST['taxonomy'])) {
|
945 |
if ($action == 'delete' && $_POST['taxonomy'] == 'category' && !empty($_POST['delete_tags'])) {
|
946 |
// bulk delete
|
947 |
+
foreach ( $_POST['delete_tags'] as $delete_tag ) {
|
948 |
+
$categoryIds[] = $delete_tag;
|
949 |
+
}
|
950 |
} elseif ($action == 'delete-tag' && $_POST['taxonomy'] == 'category' && !empty($_POST['tag_ID'])) {
|
951 |
// single delete
|
952 |
$categoryIds[] = $_POST['tag_ID'];
|
963 |
}
|
964 |
}
|
965 |
|
966 |
+
/**
|
967 |
+
* Tag deleted.
|
968 |
+
*
|
969 |
+
* @global array $_POST - Post data
|
970 |
+
*/
|
971 |
+
protected function check_tag_deletion() {
|
972 |
+
|
973 |
+
// Filter global post array for security.
|
974 |
+
$post_array = filter_input_array( INPUT_POST );
|
975 |
+
|
976 |
+
// If post array is empty then return.
|
977 |
+
if ( empty( $post_array ) ) {
|
978 |
+
return;
|
979 |
+
}
|
980 |
+
|
981 |
+
// Check for action.
|
982 |
+
$action = ! empty( $post_array['action'] ) ? $post_array['action']
|
983 |
+
: ( ! empty( $post_array['action2'] ) ? $post_array['action2'] : '' );
|
984 |
+
if ( ! $action ) {
|
985 |
+
return;
|
986 |
+
}
|
987 |
+
|
988 |
+
$tag_ids = array();
|
989 |
+
|
990 |
+
if ( isset( $post_array['taxonomy'] ) ) {
|
991 |
+
if ( 'delete' === $action
|
992 |
+
&& 'post_tag' === $post_array['taxonomy']
|
993 |
+
&& ! empty( $post_array['delete_tags'] )
|
994 |
+
&& wp_verify_nonce( $post_array['_wpnonce'], 'bulk-tags' ) ) {
|
995 |
+
// Bulk delete.
|
996 |
+
foreach ( $post_array['delete_tags'] as $delete_tag ) {
|
997 |
+
$tag_ids[] = $delete_tag;
|
998 |
+
}
|
999 |
+
} elseif ( 'delete-tag' === $action
|
1000 |
+
&& 'post_tag' === $post_array['taxonomy']
|
1001 |
+
&& ! empty( $post_array['tag_ID']
|
1002 |
+
&& wp_verify_nonce( $post_array['_wpnonce'], 'delete-tag_' . $post_array['tag_ID'] ) ) ) {
|
1003 |
+
// Single delete.
|
1004 |
+
$tag_ids[] = $post_array['tag_ID'];
|
1005 |
+
}
|
1006 |
+
}
|
1007 |
+
|
1008 |
+
foreach ( $tag_ids as $tag_id ) {
|
1009 |
+
$tag = get_tag( $tag_id );
|
1010 |
+
$this->plugin->alerts->Trigger( 2122, array(
|
1011 |
+
'TagID' => $tag_id,
|
1012 |
+
'TagName' => $tag->name,
|
1013 |
+
'Slug' => $tag->slug,
|
1014 |
+
) );
|
1015 |
+
}
|
1016 |
+
}
|
1017 |
+
|
1018 |
/**
|
1019 |
* Changed the parent of the category.
|
1020 |
* @global array $_POST post data
|
1097 |
}
|
1098 |
}
|
1099 |
|
1100 |
+
/**
|
1101 |
+
* Builds tag link.
|
1102 |
+
*
|
1103 |
+
* @param integer $tag_id - Tag ID.
|
1104 |
+
* @return string|null link
|
1105 |
+
*/
|
1106 |
+
private function get_tag_link( $tag_id ) {
|
1107 |
+
if ( ! empty( $tag_id ) ) {
|
1108 |
+
return admin_url( 'term.php?taxnomy=post_tag&tag_ID=' . $tag_id );
|
1109 |
+
} else {
|
1110 |
+
return null;
|
1111 |
+
}
|
1112 |
+
}
|
1113 |
+
|
1114 |
/**
|
1115 |
* Ignore post from BBPress, WooCommerce Plugin
|
1116 |
* Triggered on the Sensors
|
classes/Sensors/LogInOut.php
CHANGED
@@ -36,8 +36,15 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
36 |
add_action('wp_login_failed', array($this, 'EventLoginFailure'));
|
37 |
add_action('clear_auth_cookie', array($this, 'GetCurrentUser'), 10);
|
38 |
add_filter('wp_login_blocked', array($this, 'EventLoginBlocked'), 10, 1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
}
|
40 |
-
|
41 |
/**
|
42 |
* Sets current user.
|
43 |
*/
|
@@ -45,7 +52,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
45 |
{
|
46 |
$this->_current_user = wp_get_current_user();
|
47 |
}
|
48 |
-
|
49 |
/**
|
50 |
* Event Login.
|
51 |
*/
|
@@ -63,7 +70,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
63 |
'CurrentUserRoles' => $userRoles,
|
64 |
), true);
|
65 |
}
|
66 |
-
|
67 |
/**
|
68 |
* Event Logout.
|
69 |
*/
|
@@ -76,16 +83,25 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
76 |
), true);
|
77 |
}
|
78 |
}
|
79 |
-
|
80 |
/**
|
81 |
* Login failure limit count.
|
82 |
-
*
|
|
|
83 |
*/
|
84 |
-
protected function GetLoginFailureLogLimit()
|
85 |
-
|
86 |
-
return 10;
|
87 |
}
|
88 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
/**
|
90 |
* Expiration of the transient saved in the WP database.
|
91 |
* @return integer Time until expiration in seconds from now
|
@@ -94,7 +110,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
94 |
{
|
95 |
return 12 * 60 * 60;
|
96 |
}
|
97 |
-
|
98 |
/**
|
99 |
* Check failure limit.
|
100 |
* @param string $ip IP address
|
@@ -105,15 +121,23 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
105 |
protected function IsPastLoginFailureLimit($ip, $site_id, $user)
|
106 |
{
|
107 |
$get_fn = $this->IsMultisite() ? 'get_site_transient' : 'get_transient';
|
108 |
-
if ($user) {
|
109 |
-
|
110 |
-
|
|
|
|
|
|
|
|
|
111 |
} else {
|
112 |
-
|
113 |
-
|
|
|
|
|
|
|
|
|
114 |
}
|
115 |
}
|
116 |
-
|
117 |
/**
|
118 |
* Increment failure limit.
|
119 |
* @param string $ip IP address
|
@@ -146,7 +170,7 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
146 |
$set_fn(self::TRANSIENT_FAILEDLOGINS_UNKNOWN, $dataUnknown, $this->GetLoginFailureExpiration());
|
147 |
}
|
148 |
}
|
149 |
-
|
150 |
/**
|
151 |
* Event Login failure.
|
152 |
* @param string $username username
|
@@ -154,9 +178,9 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
154 |
public function EventLoginFailure($username)
|
155 |
{
|
156 |
list($y, $m, $d) = explode('-', date('Y-m-d'));
|
157 |
-
|
158 |
$ip = $this->plugin->settings->GetMainClientIP();
|
159 |
-
|
160 |
$username = array_key_exists('log', $_POST) ? $_POST["log"] : $username;
|
161 |
$newAlertCode = 1003;
|
162 |
$user = get_user_by('login', $username);
|
@@ -178,8 +202,8 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
178 |
return;
|
179 |
}
|
180 |
|
181 |
-
$objOcc = new
|
182 |
-
|
183 |
if ($newAlertCode == 1002) {
|
184 |
if (!$this->plugin->alerts->CheckEnableUserRoles($username, $userRoles)) {
|
185 |
return;
|
@@ -195,17 +219,20 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
195 |
)
|
196 |
);
|
197 |
$occ = count($occ) ? $occ[0] : null;
|
198 |
-
|
199 |
if (!empty($occ)) {
|
200 |
// update existing record exists user
|
201 |
$this->IncrementLoginFailure($ip, $site_id, $user);
|
202 |
$new = $occ->GetMetaValue('Attempts', 0) + 1;
|
203 |
-
|
204 |
-
if (
|
|
|
205 |
$new = $this->GetLoginFailureLogLimit() . '+';
|
206 |
}
|
|
|
207 |
$occ->UpdateMetaValue('Attempts', $new);
|
208 |
$occ->UpdateMetaValue('Username', $username);
|
|
|
209 |
//$occ->SetMetaValue('CurrentUserRoles', $userRoles);
|
210 |
$occ->created_on = null;
|
211 |
$occ->Save();
|
@@ -227,22 +254,45 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
227 |
mktime(0, 0, 0, $m, $d + 1, $y) - 1
|
228 |
)
|
229 |
);
|
230 |
-
|
231 |
$occUnknown = count($occUnknown) ? $occUnknown[0] : null;
|
232 |
if (!empty($occUnknown)) {
|
233 |
// update existing record not exists user
|
234 |
$this->IncrementLoginFailure($ip, $site_id, false);
|
235 |
$new = $occUnknown->GetMetaValue('Attempts', 0) + 1;
|
236 |
-
|
237 |
-
if (
|
238 |
-
$
|
|
|
|
|
|
|
|
|
|
|
239 |
}
|
|
|
240 |
$occUnknown->UpdateMetaValue('Attempts', $new);
|
|
|
|
|
|
|
|
|
|
|
|
|
241 |
$occUnknown->created_on = null;
|
242 |
$occUnknown->Save();
|
243 |
} else {
|
244 |
-
|
245 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
246 |
}
|
247 |
}
|
248 |
}
|
@@ -279,4 +329,55 @@ class WSAL_Sensors_LogInOut extends WSAL_AbstractSensor
|
|
279 |
'CurrentUserRoles' => $userRoles
|
280 |
), true);
|
281 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
}
|
36 |
add_action('wp_login_failed', array($this, 'EventLoginFailure'));
|
37 |
add_action('clear_auth_cookie', array($this, 'GetCurrentUser'), 10);
|
38 |
add_filter('wp_login_blocked', array($this, 'EventLoginBlocked'), 10, 1);
|
39 |
+
|
40 |
+
// Directory for logged in users log files.
|
41 |
+
$user_upload_dir = wp_upload_dir();
|
42 |
+
$user_upload_path = trailingslashit( $user_upload_dir['basedir'] . '/wp-security-audit-log/failed-logins/' );
|
43 |
+
if ( ! $this->CheckDirectory( $user_upload_path ) ) {
|
44 |
+
wp_mkdir_p( $user_upload_path );
|
45 |
+
}
|
46 |
}
|
47 |
+
|
48 |
/**
|
49 |
* Sets current user.
|
50 |
*/
|
52 |
{
|
53 |
$this->_current_user = wp_get_current_user();
|
54 |
}
|
55 |
+
|
56 |
/**
|
57 |
* Event Login.
|
58 |
*/
|
70 |
'CurrentUserRoles' => $userRoles,
|
71 |
), true);
|
72 |
}
|
73 |
+
|
74 |
/**
|
75 |
* Event Logout.
|
76 |
*/
|
83 |
), true);
|
84 |
}
|
85 |
}
|
86 |
+
|
87 |
/**
|
88 |
* Login failure limit count.
|
89 |
+
*
|
90 |
+
* @return int
|
91 |
*/
|
92 |
+
protected function GetLoginFailureLogLimit() {
|
93 |
+
return $this->plugin->settings->get_failed_login_limit();
|
|
|
94 |
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Non-existing Login failure limit count.
|
98 |
+
*
|
99 |
+
* @return int
|
100 |
+
*/
|
101 |
+
protected function GetVisitorLoginFailureLogLimit() {
|
102 |
+
return $this->plugin->settings->get_visitor_failed_login_limit();
|
103 |
+
}
|
104 |
+
|
105 |
/**
|
106 |
* Expiration of the transient saved in the WP database.
|
107 |
* @return integer Time until expiration in seconds from now
|
110 |
{
|
111 |
return 12 * 60 * 60;
|
112 |
}
|
113 |
+
|
114 |
/**
|
115 |
* Check failure limit.
|
116 |
* @param string $ip IP address
|
121 |
protected function IsPastLoginFailureLimit($ip, $site_id, $user)
|
122 |
{
|
123 |
$get_fn = $this->IsMultisite() ? 'get_site_transient' : 'get_transient';
|
124 |
+
if ( $user ) {
|
125 |
+
if ( -1 === (int) $this->GetLoginFailureLogLimit() ) {
|
126 |
+
return false;
|
127 |
+
} else {
|
128 |
+
$dataKnown = $get_fn(self::TRANSIENT_FAILEDLOGINS);
|
129 |
+
return ($dataKnown !== false) && isset($dataKnown[$site_id.":".$user->ID.":".$ip]) && ($dataKnown[$site_id.":".$user->ID.":".$ip] >= $this->GetLoginFailureLogLimit());
|
130 |
+
}
|
131 |
} else {
|
132 |
+
if ( -1 === (int) $this->GetVisitorLoginFailureLogLimit() ) {
|
133 |
+
return false;
|
134 |
+
} else {
|
135 |
+
$dataUnknown = $get_fn(self::TRANSIENT_FAILEDLOGINS_UNKNOWN);
|
136 |
+
return ($dataUnknown !== false) && isset($dataUnknown[$site_id.":".$ip]) && ($dataUnknown[$site_id.":".$ip] >= $this->GetVisitorLoginFailureLogLimit());
|
137 |
+
}
|
138 |
}
|
139 |
}
|
140 |
+
|
141 |
/**
|
142 |
* Increment failure limit.
|
143 |
* @param string $ip IP address
|
170 |
$set_fn(self::TRANSIENT_FAILEDLOGINS_UNKNOWN, $dataUnknown, $this->GetLoginFailureExpiration());
|
171 |
}
|
172 |
}
|
173 |
+
|
174 |
/**
|
175 |
* Event Login failure.
|
176 |
* @param string $username username
|
178 |
public function EventLoginFailure($username)
|
179 |
{
|
180 |
list($y, $m, $d) = explode('-', date('Y-m-d'));
|
181 |
+
|
182 |
$ip = $this->plugin->settings->GetMainClientIP();
|
183 |
+
|
184 |
$username = array_key_exists('log', $_POST) ? $_POST["log"] : $username;
|
185 |
$newAlertCode = 1003;
|
186 |
$user = get_user_by('login', $username);
|
202 |
return;
|
203 |
}
|
204 |
|
205 |
+
$objOcc = new WSAL_Models_Occurrence();
|
206 |
+
|
207 |
if ($newAlertCode == 1002) {
|
208 |
if (!$this->plugin->alerts->CheckEnableUserRoles($username, $userRoles)) {
|
209 |
return;
|
219 |
)
|
220 |
);
|
221 |
$occ = count($occ) ? $occ[0] : null;
|
222 |
+
|
223 |
if (!empty($occ)) {
|
224 |
// update existing record exists user
|
225 |
$this->IncrementLoginFailure($ip, $site_id, $user);
|
226 |
$new = $occ->GetMetaValue('Attempts', 0) + 1;
|
227 |
+
|
228 |
+
if ( -1 !== (int) $this->GetLoginFailureLogLimit()
|
229 |
+
&& $new > $this->GetLoginFailureLogLimit() ) {
|
230 |
$new = $this->GetLoginFailureLogLimit() . '+';
|
231 |
}
|
232 |
+
|
233 |
$occ->UpdateMetaValue('Attempts', $new);
|
234 |
$occ->UpdateMetaValue('Username', $username);
|
235 |
+
|
236 |
//$occ->SetMetaValue('CurrentUserRoles', $userRoles);
|
237 |
$occ->created_on = null;
|
238 |
$occ->Save();
|
254 |
mktime(0, 0, 0, $m, $d + 1, $y) - 1
|
255 |
)
|
256 |
);
|
257 |
+
|
258 |
$occUnknown = count($occUnknown) ? $occUnknown[0] : null;
|
259 |
if (!empty($occUnknown)) {
|
260 |
// update existing record not exists user
|
261 |
$this->IncrementLoginFailure($ip, $site_id, false);
|
262 |
$new = $occUnknown->GetMetaValue('Attempts', 0) + 1;
|
263 |
+
|
264 |
+
if ( 'on' === $this->plugin->GetGlobalOption( 'log-visitor-failed-login' ) ) {
|
265 |
+
$link_file = $this->WriteLog( $new, $username );
|
266 |
+
}
|
267 |
+
|
268 |
+
if ( -1 !== (int) $this->GetVisitorLoginFailureLogLimit()
|
269 |
+
&& $new > $this->GetVisitorLoginFailureLogLimit() ) {
|
270 |
+
$new = $this->GetVisitorLoginFailureLogLimit() . '+';
|
271 |
}
|
272 |
+
|
273 |
$occUnknown->UpdateMetaValue('Attempts', $new);
|
274 |
+
if ( ! empty( $link_file ) && 'on' === $this->plugin->GetGlobalOption( 'log-visitor-failed-login' ) ) {
|
275 |
+
$occUnknown->UpdateMetaValue( 'LogFileLink', $link_file );
|
276 |
+
} else {
|
277 |
+
$link_file = site_url() . '/wp-admin/admin.php?page=wsal-togglealerts#tab-users-profiles---activity';
|
278 |
+
$occUnknown->UpdateMetaValue( 'LogFileLink', $link_file );
|
279 |
+
}
|
280 |
$occUnknown->created_on = null;
|
281 |
$occUnknown->Save();
|
282 |
} else {
|
283 |
+
$link_file = site_url() . '/wp-admin/admin.php?page=wsal-togglealerts#tab-users-profiles---activity';
|
284 |
+
$log_file_text = ' in a log file';
|
285 |
+
if ( 'on' === $this->plugin->GetGlobalOption( 'log-visitor-failed-login' ) ) {
|
286 |
+
$link_file = $this->WriteLog( 1, $username );
|
287 |
+
$log_file_text = ' with the usernames used during these failed login attempts';
|
288 |
+
}
|
289 |
+
|
290 |
+
// Create a new record not exists user.
|
291 |
+
$this->plugin->alerts->Trigger( $newAlertCode, array(
|
292 |
+
'Attempts' => 1,
|
293 |
+
'LogFileLink' => $link_file,
|
294 |
+
'LogFileText' => $log_file_text,
|
295 |
+
) );
|
296 |
}
|
297 |
}
|
298 |
}
|
329 |
'CurrentUserRoles' => $userRoles
|
330 |
), true);
|
331 |
}
|
332 |
+
|
333 |
+
/**
|
334 |
+
* Write log file.
|
335 |
+
*
|
336 |
+
* @param int $attempts - Number of attempt.
|
337 |
+
* @param string $username - Username.
|
338 |
+
* @author Ashar Irfan
|
339 |
+
* @since 2.6.9
|
340 |
+
*/
|
341 |
+
private function WriteLog( $attempts, $username = '' ) {
|
342 |
+
$name_file = null;
|
343 |
+
|
344 |
+
// Create/Append to the log file.
|
345 |
+
$data = 'Attempts: ' . $attempts . ' — Username: ' . $username;
|
346 |
+
|
347 |
+
$upload_dir = wp_upload_dir();
|
348 |
+
$uploads_dir_path = trailingslashit( $upload_dir['basedir'] ) . 'wp-security-audit-log/failed-logins/';
|
349 |
+
$uploads_url = trailingslashit( $upload_dir['baseurl'] ) . 'wp-security-audit-log/failed-logins/';
|
350 |
+
|
351 |
+
// Check directory.
|
352 |
+
if ( $this->CheckDirectory( $uploads_dir_path ) ) {
|
353 |
+
$filename = 'failed_logins_usernames_' . date( 'Ymd' ) . '.log';
|
354 |
+
$fp = $uploads_dir_path . $filename;
|
355 |
+
$name_file = $uploads_url . $filename;
|
356 |
+
if ( ! $file = fopen( $fp, 'a' ) ) {
|
357 |
+
$i = 1;
|
358 |
+
$file_opened = false;
|
359 |
+
do {
|
360 |
+
$fp2 = substr( $fp, 0, -4 ) . '_' . $i . '.log';
|
361 |
+
if ( ! file_exists( $fp2 ) ) {
|
362 |
+
if ( $file = fopen( $fp2, 'a' ) ) {
|
363 |
+
$file_opened = true;
|
364 |
+
$name_file = $uploads_url . substr( $name_file, 0, -4 ) . '_' . $i . '.log';
|
365 |
+
}
|
366 |
+
} else {
|
367 |
+
$latest_filename = $this->GetLastModified( $uploads_dir_path, $filename );
|
368 |
+
$fp_last = $uploads_dir_path . $latest_filename;
|
369 |
+
if ( $file = fopen( $fp_last, 'a' ) ) {
|
370 |
+
$file_opened = true;
|
371 |
+
$name_file = $uploads_url . $latest_filename;
|
372 |
+
}
|
373 |
+
}
|
374 |
+
$i++;
|
375 |
+
} while ( ! $file_opened );
|
376 |
+
}
|
377 |
+
fwrite( $file, sprintf( "%s\n", $data ) );
|
378 |
+
fclose( $file );
|
379 |
+
}
|
380 |
+
|
381 |
+
return $name_file;
|
382 |
+
}
|
383 |
}
|
classes/Sensors/MetaData.php
CHANGED
@@ -14,6 +14,12 @@
|
|
14 |
* 2055 User deleted a custom field from a post
|
15 |
* 2058 User deleted a custom field from a custom post type
|
16 |
* 2061 User deleted a custom field from a page
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
*
|
18 |
* @package Wsal
|
19 |
* @subpackage Sensors
|
@@ -49,6 +55,7 @@ class WSAL_Sensors_MetaData extends WSAL_AbstractSensor {
|
|
49 |
add_action( 'update_user_meta', array( $this, 'event_user_meta_updating' ), 10, 3 );
|
50 |
add_action( 'updated_user_meta', array( $this, 'event_user_meta_updated' ), 10, 4 );
|
51 |
add_action( 'user_register', array( $this, 'reset_null_meta_counter' ), 10 );
|
|
|
52 |
}
|
53 |
|
54 |
/**
|
@@ -434,10 +441,10 @@ class WSAL_Sensors_MetaData extends WSAL_AbstractSensor {
|
|
434 |
/**
|
435 |
* Updated a custom field name/value.
|
436 |
*
|
437 |
-
* @param int
|
438 |
-
* @param int
|
439 |
* @param string $meta_key - Meta key.
|
440 |
-
* @param mix
|
441 |
*/
|
442 |
public function event_user_meta_updated( $meta_id, $object_id, $meta_key, $meta_value ) {
|
443 |
|
@@ -449,24 +456,90 @@ class WSAL_Sensors_MetaData extends WSAL_AbstractSensor {
|
|
449 |
return;
|
450 |
}
|
451 |
|
|
|
|
|
|
|
452 |
// Get POST array.
|
453 |
$post_array = $_POST;
|
454 |
|
455 |
// If update action is set then trigger the alert.
|
456 |
if ( isset( $post_array['action'] ) && 'update' == $post_array['action'] ) {
|
457 |
-
if ( isset( $this->old_meta[ $meta_id ] ) ) {
|
458 |
// Check change in meta value.
|
459 |
if ( $this->old_meta[ $meta_id ]->val != $meta_value ) {
|
460 |
$this->plugin->alerts->Trigger( 4015, array(
|
461 |
-
'TargetUsername'
|
462 |
'custom_field_name' => $meta_key,
|
463 |
-
'new_value'
|
464 |
-
'old_value'
|
465 |
) );
|
466 |
}
|
467 |
// Remove old meta update data.
|
468 |
unset( $this->old_meta[ $meta_id ] );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
469 |
}
|
470 |
}
|
471 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
472 |
}
|
14 |
* 2055 User deleted a custom field from a post
|
15 |
* 2058 User deleted a custom field from a custom post type
|
16 |
* 2061 User deleted a custom field from a page
|
17 |
+
* 4015 User updated a custom field value for a user
|
18 |
+
* 4016 User created a custom field value for a user
|
19 |
+
* 4017 User changed first name for a user
|
20 |
+
* 4018 User changed last name for a user
|
21 |
+
* 4019 User changed nickname for a user
|
22 |
+
* 4020 User changed the display name for a user
|
23 |
*
|
24 |
* @package Wsal
|
25 |
* @subpackage Sensors
|
55 |
add_action( 'update_user_meta', array( $this, 'event_user_meta_updating' ), 10, 3 );
|
56 |
add_action( 'updated_user_meta', array( $this, 'event_user_meta_updated' ), 10, 4 );
|
57 |
add_action( 'user_register', array( $this, 'reset_null_meta_counter' ), 10 );
|
58 |
+
add_action( 'profile_update', array( $this, 'event_userdata_updated' ), 10, 2 );
|
59 |
}
|
60 |
|
61 |
/**
|
441 |
/**
|
442 |
* Updated a custom field name/value.
|
443 |
*
|
444 |
+
* @param int $meta_id - Meta ID.
|
445 |
+
* @param int $object_id - Object ID.
|
446 |
* @param string $meta_key - Meta key.
|
447 |
+
* @param mix $meta_value - Meta value.
|
448 |
*/
|
449 |
public function event_user_meta_updated( $meta_id, $object_id, $meta_key, $meta_value ) {
|
450 |
|
456 |
return;
|
457 |
}
|
458 |
|
459 |
+
// User profile name related meta.
|
460 |
+
$username_meta = array( 'first_name', 'last_name', 'nickname' );
|
461 |
+
|
462 |
// Get POST array.
|
463 |
$post_array = $_POST;
|
464 |
|
465 |
// If update action is set then trigger the alert.
|
466 |
if ( isset( $post_array['action'] ) && 'update' == $post_array['action'] ) {
|
467 |
+
if ( isset( $this->old_meta[ $meta_id ] ) && ! in_array( $meta_key, $username_meta, true ) ) {
|
468 |
// Check change in meta value.
|
469 |
if ( $this->old_meta[ $meta_id ]->val != $meta_value ) {
|
470 |
$this->plugin->alerts->Trigger( 4015, array(
|
471 |
+
'TargetUsername' => $user->user_login,
|
472 |
'custom_field_name' => $meta_key,
|
473 |
+
'new_value' => $meta_value,
|
474 |
+
'old_value' => $this->old_meta[ $meta_id ]->val,
|
475 |
) );
|
476 |
}
|
477 |
// Remove old meta update data.
|
478 |
unset( $this->old_meta[ $meta_id ] );
|
479 |
+
} elseif ( isset( $this->old_meta[ $meta_id ] ) && in_array( $meta_key, $username_meta, true ) ) {
|
480 |
+
// Detect the alert based on meta key.
|
481 |
+
switch ( $meta_key ) {
|
482 |
+
case 'first_name':
|
483 |
+
if ( $this->old_meta[ $meta_id ]->val != $meta_value ) {
|
484 |
+
$this->plugin->alerts->Trigger( 4017, array(
|
485 |
+
'TargetUsername' => $user->user_login,
|
486 |
+
'new_firstname' => $meta_value,
|
487 |
+
'old_firstname' => $this->old_meta[ $meta_id ]->val,
|
488 |
+
) );
|
489 |
+
}
|
490 |
+
break;
|
491 |
+
|
492 |
+
case 'last_name':
|
493 |
+
if ( $this->old_meta[ $meta_id ]->val != $meta_value ) {
|
494 |
+
$this->plugin->alerts->Trigger( 4018, array(
|
495 |
+
'TargetUsername' => $user->user_login,
|
496 |
+
'new_lastname' => $meta_value,
|
497 |
+
'old_lastname' => $this->old_meta[ $meta_id ]->val,
|
498 |
+
) );
|
499 |
+
}
|
500 |
+
break;
|
501 |
+
|
502 |
+
case 'nickname':
|
503 |
+
if ( $this->old_meta[ $meta_id ]->val != $meta_value ) {
|
504 |
+
$this->plugin->alerts->Trigger( 4019, array(
|
505 |
+
'TargetUsername' => $user->user_login,
|
506 |
+
'new_nickname' => $meta_value,
|
507 |
+
'old_nickname' => $this->old_meta[ $meta_id ]->val,
|
508 |
+
) );
|
509 |
+
}
|
510 |
+
break;
|
511 |
+
|
512 |
+
default:
|
513 |
+
break;
|
514 |
+
}
|
515 |
}
|
516 |
}
|
517 |
}
|
518 |
+
|
519 |
+
/**
|
520 |
+
* Method: Updated user data.
|
521 |
+
*
|
522 |
+
* @param int $user_id User ID.
|
523 |
+
* @param object $old_user_data Object containing user's data prior to update.
|
524 |
+
* @since 2.6.9
|
525 |
+
*/
|
526 |
+
public function event_userdata_updated( $user_id, $old_user_data ) {
|
527 |
+
|
528 |
+
// Get user display name.
|
529 |
+
$old_display_name = $old_user_data->display_name;
|
530 |
+
|
531 |
+
// Get user's current data.
|
532 |
+
$new_userdata = get_userdata( $user_id );
|
533 |
+
$new_display_name = $new_userdata->display_name;
|
534 |
+
|
535 |
+
// Alert if display name is changed.
|
536 |
+
if ( $old_display_name !== $new_display_name ) {
|
537 |
+
$this->plugin->alerts->Trigger( 4020, array(
|
538 |
+
'TargetUsername' => $new_userdata->user_login,
|
539 |
+
'new_displayname' => $new_display_name,
|
540 |
+
'old_displayname' => $old_display_name,
|
541 |
+
) );
|
542 |
+
}
|
543 |
+
|
544 |
+
}
|
545 |
}
|
classes/Sensors/System.php
CHANGED
@@ -611,8 +611,20 @@ class WSAL_Sensors_System extends WSAL_AbstractSensor {
|
|
611 |
if ( 'on' == $this->plugin->GetGlobalOption( 'log-404', 'off' ) ) {
|
612 |
// Request URL.
|
613 |
$url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
614 |
-
|
615 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
616 |
if ( ! is_user_logged_in() ) {
|
617 |
$username = '';
|
618 |
} else {
|
@@ -660,8 +672,20 @@ class WSAL_Sensors_System extends WSAL_AbstractSensor {
|
|
660 |
if ( 'on' == $this->plugin->GetGlobalOption( 'log-visitor-404', 'off' ) ) {
|
661 |
// Request URL.
|
662 |
$url = $_SERVER["HTTP_HOST"] . $_SERVER['REQUEST_URI'];
|
663 |
-
|
664 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
665 |
$username = '';
|
666 |
|
667 |
if ( '127.0.0.1' == $ip || '::1' == $ip ) {
|
611 |
if ( 'on' == $this->plugin->GetGlobalOption( 'log-404', 'off' ) ) {
|
612 |
// Request URL.
|
613 |
$url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
614 |
+
|
615 |
+
// Get option to log referrer.
|
616 |
+
$log_referrer = $this->plugin->GetGlobalOption( 'log-404-referrer' );
|
617 |
+
|
618 |
+
if ( 'on' === $log_referrer ) {
|
619 |
+
// Get the referer.
|
620 |
+
$referrer = ( isset( $_SERVER['HTTP_REFERER'] ) ) ? $_SERVER['HTTP_REFERER'] : false;
|
621 |
+
// Create/Append to the log file.
|
622 |
+
$data = 'Request URL ' . $url . ' Referer ' . $referrer . ',';
|
623 |
+
} else {
|
624 |
+
// Create/Append to the log file.
|
625 |
+
$data = 'Request URL ' . $url . ',';
|
626 |
+
}
|
627 |
+
|
628 |
if ( ! is_user_logged_in() ) {
|
629 |
$username = '';
|
630 |
} else {
|
672 |
if ( 'on' == $this->plugin->GetGlobalOption( 'log-visitor-404', 'off' ) ) {
|
673 |
// Request URL.
|
674 |
$url = $_SERVER["HTTP_HOST"] . $_SERVER['REQUEST_URI'];
|
675 |
+
|
676 |
+
// Get option to log referrer.
|
677 |
+
$log_referrer = $this->plugin->GetGlobalOption( 'log-visitor-404-referrer' );
|
678 |
+
|
679 |
+
if ( 'on' === $log_referrer ) {
|
680 |
+
// Get the referer.
|
681 |
+
$referrer = ( isset( $_SERVER['HTTP_REFERER'] ) ) ? $_SERVER['HTTP_REFERER'] : false;
|
682 |
+
// Create/Append to the log file.
|
683 |
+
$data = 'Request URL ' . $url . ' Referer ' . $referrer . ',';
|
684 |
+
} else {
|
685 |
+
// Create/Append to the log file.
|
686 |
+
$data = 'Request URL ' . $url . ',';
|
687 |
+
}
|
688 |
+
|
689 |
$username = '';
|
690 |
|
691 |
if ( '127.0.0.1' == $ip || '::1' == $ip ) {
|
classes/Sensors/UserProfile.php
CHANGED
@@ -74,12 +74,12 @@ class WSAL_Sensors_UserProfile extends WSAL_AbstractSensor
|
|
74 |
if (is_array($oldRoles)) {
|
75 |
foreach ($oldRoles as $value) {
|
76 |
if (in_array($value, $aBbpRoles)) {
|
77 |
-
if ($_POST['bbp-forums-role'] != $value) {
|
78 |
$current_user = wp_get_current_user();
|
79 |
$this->plugin->alerts->TriggerIf(4013, array(
|
80 |
'TargetUsername' => $user->user_login,
|
81 |
'OldRole' => ucfirst(substr($value, 4)),
|
82 |
-
'NewRole' => ucfirst(substr($_POST['bbp-forums-role'], 4)),
|
83 |
'UserChanger' => $current_user->user_login
|
84 |
));
|
85 |
}
|
74 |
if (is_array($oldRoles)) {
|
75 |
foreach ($oldRoles as $value) {
|
76 |
if (in_array($value, $aBbpRoles)) {
|
77 |
+
if ( isset( $_POST['bbp-forums-role'] ) && $_POST['bbp-forums-role'] != $value ) {
|
78 |
$current_user = wp_get_current_user();
|
79 |
$this->plugin->alerts->TriggerIf(4013, array(
|
80 |
'TargetUsername' => $user->user_login,
|
81 |
'OldRole' => ucfirst(substr($value, 4)),
|
82 |
+
'NewRole' => ( isset( $_POST['bbp-forums-role'] ) ) ? ucfirst(substr($_POST['bbp-forums-role'], 4)) : false,
|
83 |
'UserChanger' => $current_user->user_login
|
84 |
));
|
85 |
}
|
classes/Settings.php
CHANGED
@@ -963,6 +963,52 @@ class WSAL_Settings
|
|
963 |
return $this->_plugin->GetGlobalOption( 'log-visitor-404-limit', 99 );
|
964 |
}
|
965 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
966 |
/*============================== Support Archive Database ==============================*/
|
967 |
|
968 |
public function IsArchivingEnabled()
|
963 |
return $this->_plugin->GetGlobalOption( 'log-visitor-404-limit', 99 );
|
964 |
}
|
965 |
|
966 |
+
/**
|
967 |
+
* Sets the log limit for failed login attempts.
|
968 |
+
*
|
969 |
+
* @param int $value - Failed login limit.
|
970 |
+
* @since 2.6.3
|
971 |
+
*/
|
972 |
+
public function set_failed_login_limit( $value ) {
|
973 |
+
if ( ! empty( $value ) ) {
|
974 |
+
return $this->_plugin->SetGlobalOption( 'log-failed-login-limit', abs( $value ) );
|
975 |
+
} else {
|
976 |
+
return $this->_plugin->SetGlobalOption( 'log-failed-login-limit', -1 );
|
977 |
+
}
|
978 |
+
}
|
979 |
+
|
980 |
+
/**
|
981 |
+
* Get the log limit for failed login attempts.
|
982 |
+
*
|
983 |
+
* @since 2.6.3
|
984 |
+
*/
|
985 |
+
public function get_failed_login_limit() {
|
986 |
+
return $this->_plugin->GetGlobalOption( 'log-failed-login-limit', 10 );
|
987 |
+
}
|
988 |
+
|
989 |
+
/**
|
990 |
+
* Sets the log limit for failed login attempts for visitor.
|
991 |
+
*
|
992 |
+
* @param int $value - Failed login limit.
|
993 |
+
* @since 2.6.3
|
994 |
+
*/
|
995 |
+
public function set_visitor_failed_login_limit( $value ) {
|
996 |
+
if ( ! empty( $value ) ) {
|
997 |
+
return $this->_plugin->SetGlobalOption( 'log-visitor-failed-login-limit', abs( $value ) );
|
998 |
+
} else {
|
999 |
+
return $this->_plugin->SetGlobalOption( 'log-visitor-failed-login-limit', -1 );
|
1000 |
+
}
|
1001 |
+
}
|
1002 |
+
|
1003 |
+
/**
|
1004 |
+
* Get the log limit for failed login attempts for visitor.
|
1005 |
+
*
|
1006 |
+
* @since 2.6.3
|
1007 |
+
*/
|
1008 |
+
public function get_visitor_failed_login_limit() {
|
1009 |
+
return $this->_plugin->GetGlobalOption( 'log-visitor-failed-login-limit', 10 );
|
1010 |
+
}
|
1011 |
+
|
1012 |
/*============================== Support Archive Database ==============================*/
|
1013 |
|
1014 |
public function IsArchivingEnabled()
|
classes/Views/Settings.php
CHANGED
@@ -547,7 +547,11 @@ class WSAL_Views_Settings extends WSAL_AbstractView {
|
|
547 |
<?php foreach ($columns as $key => $value) { ?>
|
548 |
<label for="columns">
|
549 |
<input type="checkbox" name="Columns[<?php echo $key; ?>]" id="<?php echo $key; ?>" class="sel-columns" style="margin-top: 2px;" <?php if ($value == '1') echo 'checked="checked"'; ?> value="1">
|
550 |
-
|
|
|
|
|
|
|
|
|
551 |
</label>
|
552 |
<br/>
|
553 |
<?php } ?>
|
547 |
<?php foreach ($columns as $key => $value) { ?>
|
548 |
<label for="columns">
|
549 |
<input type="checkbox" name="Columns[<?php echo $key; ?>]" id="<?php echo $key; ?>" class="sel-columns" style="margin-top: 2px;" <?php if ($value == '1') echo 'checked="checked"'; ?> value="1">
|
550 |
+
<?php if ( 'alert_code' !== $key ) : ?>
|
551 |
+
<span><?php echo ucwords(str_replace("_", " ", $key)); ?></span>
|
552 |
+
<?php else : ?>
|
553 |
+
<span><?php echo ucwords(str_replace('_code', ' ID', $key)); ?></span>
|
554 |
+
<?php endif; ?>
|
555 |
</label>
|
556 |
<br/>
|
557 |
<?php } ?>
|
classes/Views/ToggleAlerts.php
CHANGED
@@ -59,12 +59,19 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView
|
|
59 |
}
|
60 |
$this->_plugin->SetGlobalOption('log-404', isset($_REQUEST['log_404']) ? 'on' : 'off');
|
61 |
$this->_plugin->SetGlobalOption('purge-404-log', isset($_REQUEST['purge_log']) ? 'on' : 'off');
|
|
|
62 |
|
63 |
$this->_plugin->SetGlobalOption( 'log-visitor-404', isset( $_REQUEST['log_visitor_404'] ) ? 'on' : 'off' );
|
64 |
$this->_plugin->SetGlobalOption( 'purge-visitor-404-log', isset( $_REQUEST['purge_visitor_log'] ) ? 'on' : 'off' );
|
|
|
65 |
|
66 |
$this->_plugin->settings->Set404LogLimit( $_REQUEST['user_404Limit'] );
|
67 |
$this->_plugin->settings->SetVisitor404LogLimit( $_REQUEST['visitor_404Limit'] );
|
|
|
|
|
|
|
|
|
|
|
68 |
}
|
69 |
?><h2 id="wsal-tabs" class="nav-tab-wrapper"><?php
|
70 |
foreach ($safeNames as $name => $safe) {
|
@@ -133,11 +140,14 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView
|
|
133 |
<td><?php echo str_pad($alert->type, 4, '0', STR_PAD_LEFT); ?></td>
|
134 |
<td><?php echo $this->_plugin->constants->GetConstantBy('value', $alert->code)->name; ?></td>
|
135 |
<td><?php echo esc_html($alert->desc); ?></td>
|
136 |
-
</tr
|
|
|
137 |
if ($alert->type == 6007) {
|
138 |
$log_404 = $this->_plugin->GetGlobalOption('log-404');
|
139 |
$purge_log = $this->_plugin->GetGlobalOption('purge-404-log');
|
140 |
-
|
|
|
|
|
141 |
<td></td>
|
142 |
<td><input name="log_404" type="checkbox" class="check_log" value="1" <?php if ($log_404 == 'on') echo 'checked="checked"'; ?>></td>
|
143 |
<td colspan="2"><?php _e('Capture 404 requests to file (the log file are created in the /wp-content/uploads/wp-security-audit-log/404s/ directory)', 'wp-security-audit-log'); ?></td>
|
@@ -150,21 +160,21 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView
|
|
150 |
<tr>
|
151 |
<td></td>
|
152 |
<td colspan="1"><input type="number" id="user_404Limit" name="user_404Limit" value="<?php echo $this->_plugin->settings->Get404LogLimit(); ?>" /></td>
|
153 |
-
<td colspan="2"><?php esc_html_e( 'Number of 404 Requests to Log', 'wp-security-audit-log' ); ?></td>
|
154 |
</tr>
|
155 |
<tr>
|
156 |
<td></td>
|
157 |
-
<td
|
158 |
-
<td colspan="2">
|
159 |
-
|
160 |
-
|
161 |
-
</td>
|
162 |
-
</tr><?php
|
163 |
}
|
164 |
if ( 6023 == $alert->type ) {
|
165 |
$log_visitor_404 = $this->_plugin->GetGlobalOption( 'log-visitor-404' );
|
166 |
$purge_visitor_log = $this->_plugin->GetGlobalOption( 'purge-visitor-404-log' );
|
167 |
-
|
|
|
|
|
168 |
<td></td>
|
169 |
<td><input name="log_visitor_404" type="checkbox" class="check_visitor_log" value="1" <?php if ( 'on' == $log_visitor_404 ) echo 'checked="checked"'; ?>></td>
|
170 |
<td colspan="2"><?php esc_html_e( 'Capture 404 requests to file (the log file are created in the /wp-content/uploads/wp-security-audit-log/404s/ directory)', 'wp-security-audit-log' ); ?></td>
|
@@ -177,16 +187,48 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView
|
|
177 |
<tr>
|
178 |
<td></td>
|
179 |
<td colspan="1"><input type="number" id="visitor_404Limit" name="visitor_404Limit" value="<?php echo esc_attr( $this->_plugin->settings->GetVisitor404LogLimit() ); ?>" /></td>
|
180 |
-
<td colspan="2"><?php esc_html_e( 'Number of 404 Requests to Log', 'wp-security-audit-log' ); ?></td>
|
181 |
</tr>
|
182 |
<tr>
|
183 |
<td></td>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
<td></td>
|
|
|
185 |
<td colspan="2">
|
186 |
-
|
187 |
-
<?php esc_html_e( 'Note that by increasing this value to a high number, should your website be scanned the plugin will consume more resources to log all the requests.', 'wp-security-audit-log' ); ?>
|
188 |
</td>
|
189 |
-
</tr
|
|
|
190 |
}
|
191 |
}
|
192 |
?>
|
@@ -220,9 +262,8 @@ class WSAL_Views_ToggleAlerts extends WSAL_AbstractView
|
|
220 |
background-color: #fff;
|
221 |
border-bottom: 1px solid #fff;
|
222 |
}
|
223 |
-
|
224 |
-
|
225 |
-
width: 100%;
|
226 |
}
|
227 |
</style><?php
|
228 |
}
|
59 |
}
|
60 |
$this->_plugin->SetGlobalOption('log-404', isset($_REQUEST['log_404']) ? 'on' : 'off');
|
61 |
$this->_plugin->SetGlobalOption('purge-404-log', isset($_REQUEST['purge_log']) ? 'on' : 'off');
|
62 |
+
$this->_plugin->SetGlobalOption( 'log-404-referrer', isset( $_REQUEST['log_404_referrer'] ) ? 'on' : 'off' );
|
63 |
|
64 |
$this->_plugin->SetGlobalOption( 'log-visitor-404', isset( $_REQUEST['log_visitor_404'] ) ? 'on' : 'off' );
|
65 |
$this->_plugin->SetGlobalOption( 'purge-visitor-404-log', isset( $_REQUEST['purge_visitor_log'] ) ? 'on' : 'off' );
|
66 |
+
$this->_plugin->SetGlobalOption( 'log-visitor-404-referrer', isset( $_REQUEST['log_visitor_404_referrer'] ) ? 'on' : 'off' );
|
67 |
|
68 |
$this->_plugin->settings->Set404LogLimit( $_REQUEST['user_404Limit'] );
|
69 |
$this->_plugin->settings->SetVisitor404LogLimit( $_REQUEST['visitor_404Limit'] );
|
70 |
+
|
71 |
+
$this->_plugin->SetGlobalOption( 'log-visitor-failed-login', isset( $_REQUEST['log_visitor_failed_login'] ) ? 'on' : 'off' );
|
72 |
+
|
73 |
+
$this->_plugin->settings->set_failed_login_limit( $_REQUEST['log_failed_login_limit'] );
|
74 |
+
$this->_plugin->settings->set_visitor_failed_login_limit( $_REQUEST['log_visitor_failed_login_limit'] );
|
75 |
}
|
76 |
?><h2 id="wsal-tabs" class="nav-tab-wrapper"><?php
|
77 |
foreach ($safeNames as $name => $safe) {
|
140 |
<td><?php echo str_pad($alert->type, 4, '0', STR_PAD_LEFT); ?></td>
|
141 |
<td><?php echo $this->_plugin->constants->GetConstantBy('value', $alert->code)->name; ?></td>
|
142 |
<td><?php echo esc_html($alert->desc); ?></td>
|
143 |
+
</tr>
|
144 |
+
<?php
|
145 |
if ($alert->type == 6007) {
|
146 |
$log_404 = $this->_plugin->GetGlobalOption('log-404');
|
147 |
$purge_log = $this->_plugin->GetGlobalOption('purge-404-log');
|
148 |
+
$log_404_referrer = $this->_plugin->GetGlobalOption( 'log-404-referrer', 'on' );
|
149 |
+
?>
|
150 |
+
<tr>
|
151 |
<td></td>
|
152 |
<td><input name="log_404" type="checkbox" class="check_log" value="1" <?php if ($log_404 == 'on') echo 'checked="checked"'; ?>></td>
|
153 |
<td colspan="2"><?php _e('Capture 404 requests to file (the log file are created in the /wp-content/uploads/wp-security-audit-log/404s/ directory)', 'wp-security-audit-log'); ?></td>
|
160 |
<tr>
|
161 |
<td></td>
|
162 |
<td colspan="1"><input type="number" id="user_404Limit" name="user_404Limit" value="<?php echo $this->_plugin->settings->Get404LogLimit(); ?>" /></td>
|
163 |
+
<td colspan="2"><?php esc_html_e( 'Number of 404 Requests to Log. By default the plugin keeps up to 99 requests to non-existing pages from the same IP address. Increase the value in this setting to the desired amount to keep a log of more or less requests.', 'wp-security-audit-log' ); ?></td>
|
164 |
</tr>
|
165 |
<tr>
|
166 |
<td></td>
|
167 |
+
<td><input name="log_404_referrer" type="checkbox" class="check_log" value="1" <?php checked( $log_404_referrer, 'on' ); ?>></td>
|
168 |
+
<td colspan="2"><?php esc_html_e( 'Record the referrer that generated the 404 error.', 'wp-security-audit-log' ); ?></td>
|
169 |
+
</tr>
|
170 |
+
<?php
|
|
|
|
|
171 |
}
|
172 |
if ( 6023 == $alert->type ) {
|
173 |
$log_visitor_404 = $this->_plugin->GetGlobalOption( 'log-visitor-404' );
|
174 |
$purge_visitor_log = $this->_plugin->GetGlobalOption( 'purge-visitor-404-log' );
|
175 |
+
$log_visitor_404_referrer = $this->_plugin->GetGlobalOption( 'log-visitor-404-referrer', 'on' );
|
176 |
+
?>
|
177 |
+
<tr>
|
178 |
<td></td>
|
179 |
<td><input name="log_visitor_404" type="checkbox" class="check_visitor_log" value="1" <?php if ( 'on' == $log_visitor_404 ) echo 'checked="checked"'; ?>></td>
|
180 |
<td colspan="2"><?php esc_html_e( 'Capture 404 requests to file (the log file are created in the /wp-content/uploads/wp-security-audit-log/404s/ directory)', 'wp-security-audit-log' ); ?></td>
|
187 |
<tr>
|
188 |
<td></td>
|
189 |
<td colspan="1"><input type="number" id="visitor_404Limit" name="visitor_404Limit" value="<?php echo esc_attr( $this->_plugin->settings->GetVisitor404LogLimit() ); ?>" /></td>
|
190 |
+
<td colspan="2"><?php esc_html_e( 'Number of 404 Requests to Log. By default the plugin keeps up to 99 requests to non-existing pages from the same IP address. Increase the value in this setting to the desired amount to keep a log of more or less requests. Note that by increasing this value to a high number, should your website be scanned the plugin will consume more resources to log all the requests.', 'wp-security-audit-log' ); ?></td>
|
191 |
</tr>
|
192 |
<tr>
|
193 |
<td></td>
|
194 |
+
<td><input name="log_visitor_404_referrer" type="checkbox" class="check_log" value="1" <?php checked( $log_visitor_404_referrer, 'on' ); ?>></td>
|
195 |
+
<td colspan="2"><?php esc_html_e( 'Record the referrer that generated the 404 error.', 'wp-security-audit-log' ); ?></td>
|
196 |
+
</tr>
|
197 |
+
<?php
|
198 |
+
}
|
199 |
+
if ( 1002 === $alert->type ) {
|
200 |
+
$log_failed_login_limit = (int) $this->_plugin->GetGlobalOption( 'log-failed-login-limit', 10 );
|
201 |
+
$log_failed_login_limit = ( -1 === $log_failed_login_limit ) ? '0' : $log_failed_login_limit;
|
202 |
+
?>
|
203 |
+
<tr>
|
204 |
+
<td></td>
|
205 |
+
<td><input name="log_failed_login_limit" type="number" class="check_visitor_log" value="<?php echo esc_attr( $log_failed_login_limit ); ?>"></td>
|
206 |
+
<td colspan="2">
|
207 |
+
<?php esc_html_e( 'Number of login attempts to log. Enter 0 to log all failed login attempts. (By default the plugin only logs up to 10 failed login because the process can be very resource intensive in case of a brute force attack)', 'wp-security-audit-log' ); ?>
|
208 |
+
</td>
|
209 |
+
</tr>
|
210 |
+
<?php
|
211 |
+
}
|
212 |
+
if ( 1003 === $alert->type ) {
|
213 |
+
$log_visitor_failed_login = $this->_plugin->GetGlobalOption( 'log-visitor-failed-login', 'on' );
|
214 |
+
$log_visitor_failed_login_limit = (int) $this->_plugin->GetGlobalOption( 'log-visitor-failed-login-limit', 10 );
|
215 |
+
$log_visitor_failed_login_limit = ( -1 === $log_visitor_failed_login_limit ) ? '0' : $log_visitor_failed_login_limit;
|
216 |
+
?>
|
217 |
+
<tr>
|
218 |
+
<td></td>
|
219 |
+
<td><input name="log_visitor_failed_login" type="checkbox" class="check_visitor_log" value="1" <?php checked( $log_visitor_failed_login, 'on' ); ?>></td>
|
220 |
+
<td colspan="2">
|
221 |
+
<p><?php esc_html_e( 'Keep a log of the usernames used in the failed logins in a log file. The log file is stored in /wp-content/uploads/wp-security-audit-log/failed-logins/', 'wp-security-audit-log' ); ?></p>
|
222 |
+
</td>
|
223 |
+
</tr>
|
224 |
+
<tr>
|
225 |
<td></td>
|
226 |
+
<td><input name="log_visitor_failed_login_limit" type="number" class="check_visitor_log" value="<?php echo esc_attr( $log_visitor_failed_login_limit ); ?>"></td>
|
227 |
<td colspan="2">
|
228 |
+
<p><?php esc_html_e( 'Number of login attempts to log. Enter 0 to log all failed login attempts. (By default the plugin only logs up to 10 failed login because the process can be very resource intensive in case of a brute force attack)', 'wp-security-audit-log' ); ?></p>
|
|
|
229 |
</td>
|
230 |
+
</tr>
|
231 |
+
<?php
|
232 |
}
|
233 |
}
|
234 |
?>
|
262 |
background-color: #fff;
|
263 |
border-bottom: 1px solid #fff;
|
264 |
}
|
265 |
+
.wsal-tab td input[type=number] {
|
266 |
+
width: 100%;
|
|
|
267 |
}
|
268 |
</style><?php
|
269 |
}
|
css/auditlog.css
CHANGED
@@ -20,10 +20,12 @@
|
|
20 |
|
21 |
.column-read,
|
22 |
.column-more,
|
23 |
-
.column-type,
|
24 |
.column-data {
|
25 |
width: 70px;
|
26 |
}
|
|
|
|
|
|
|
27 |
.column-code {
|
28 |
width: 50px;
|
29 |
}
|
@@ -234,5 +236,11 @@ td.column-user {
|
|
234 |
.dark-tooltip.dark ul.confirm li{ background-color:#0085ba;}
|
235 |
.dark-tooltip.dark ul.confirm li:hover{ background-color:#008ec2; cursor: pointer;}
|
236 |
.dark-tooltip.dark ul.confirm li:last-child {
|
237 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
}
|
20 |
|
21 |
.column-read,
|
22 |
.column-more,
|
|
|
23 |
.column-data {
|
24 |
width: 70px;
|
25 |
}
|
26 |
+
.column-type {
|
27 |
+
width: 85px;
|
28 |
+
}
|
29 |
.column-code {
|
30 |
width: 50px;
|
31 |
}
|
236 |
.dark-tooltip.dark ul.confirm li{ background-color:#0085ba;}
|
237 |
.dark-tooltip.dark ul.confirm li:hover{ background-color:#008ec2; cursor: pointer;}
|
238 |
.dark-tooltip.dark ul.confirm li:last-child {
|
239 |
+
padding: 0;
|
240 |
+
}
|
241 |
+
.dark-tooltip.dark ul.confirm li:last-child span {
|
242 |
+
display: inline-block;
|
243 |
+
line-height: 8px;
|
244 |
+
padding: 10px;
|
245 |
+
margin: 0;
|
246 |
}
|
defaults.php
CHANGED
@@ -67,7 +67,7 @@ function wsaldefaults_wsal_init(WpSecurityAuditLog $wsal)
|
|
67 |
array(2017, E_NOTICE, __('User changed blog post URL', 'wp-security-audit-log'), __('Changed the URL of the post %PostTitle% from %OldUrl% to %NewUrl%. %EditorLinkPost%.', 'wp-security-audit-log')),
|
68 |
array(2019, E_NOTICE, __('User changed blog post author', 'wp-security-audit-log'), __('Changed the author of %PostTitle% post from %OldAuthor% to %NewAuthor%. %EditorLinkPost%.', 'wp-security-audit-log')),
|
69 |
array(2021, E_NOTICE, __('User changed blog post status', 'wp-security-audit-log'), __('Changed the status of %PostTitle% post from %OldStatus% to %NewStatus%. %EditorLinkPost%.', 'wp-security-audit-log')),
|
70 |
-
array(2023, E_NOTICE, __('User created new category', 'wp-security-audit-log'), __('Created a new category called %CategoryName
|
71 |
array(2024, E_WARNING, __('User deleted category', 'wp-security-audit-log'), __('Deleted the category %CategoryName%. Category slug was %Slug%.', 'wp-security-audit-log')),
|
72 |
array(2025, E_WARNING, __('User changed the visibility of a blog post', 'wp-security-audit-log'), __('Changed the visibility of the post %PostTitle% from %OldVisibility% to %NewVisibility%. %EditorLinkPost%.', 'wp-security-audit-log')),
|
73 |
array(2027, E_NOTICE, __('User changed the date of a blog post', 'wp-security-audit-log'), __('Changed the date of the post %PostTitle% from %OldDate% to %NewDate%. %EditorLinkPost%.', 'wp-security-audit-log')),
|
@@ -89,7 +89,14 @@ function wsaldefaults_wsal_init(WpSecurityAuditLog $wsal)
|
|
89 |
array(2111, E_NOTICE, __('User disabled Comments/Trackbacks and Pingbacks on a published post', 'wp-security-audit-log'), __('Disabled %Type% on the published post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log')),
|
90 |
array(2112, E_NOTICE, __('User enabled Comments/Trackbacks and Pingbacks on a published post', 'wp-security-audit-log'), __('Enabled %Type% on the published post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log')),
|
91 |
array(2113, E_NOTICE, __('User disabled Comments/Trackbacks and Pingbacks on a draft post', 'wp-security-audit-log'), __('Disabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log')),
|
92 |
-
array(2114, E_NOTICE, __('User enabled Comments/Trackbacks and Pingbacks on a draft post', 'wp-security-audit-log'), __('Enabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log'))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
),
|
94 |
__('Comments', 'wp-security-audit-log') => array(
|
95 |
array(2090, E_NOTICE, __('User approved a comment', 'wp-security-audit-log'), __('Approved the comment posted in response to the post %PostTitle% by %Author% on %CommentLink%.', 'wp-security-audit-log')),
|
@@ -255,7 +262,11 @@ function wsaldefaults_wsal_init(WpSecurityAuditLog $wsal)
|
|
255 |
array(6015, E_CRITICAL, __('Enabled/Disabled the option for an author to have previously approved comments for the comments to appear', 'wp-security-audit-log'), __('%Status% the option for an author to have previously approved comments for the comments to appear.', 'wp-security-audit-log')),
|
256 |
array(6016, E_CRITICAL, __('Changed the number of links that a comment must have to be held in the queue', 'wp-security-audit-log'), __('Changed the number of links from %OldValue% to %NewValue% that a comment must have to be held in the queue.', 'wp-security-audit-log')),
|
257 |
array(6017, E_CRITICAL, __('Modified the list of keywords for comments moderation', 'wp-security-audit-log'), __('Modified the list of keywords for comments moderation.', 'wp-security-audit-log')),
|
258 |
-
array(6018, E_CRITICAL, __('Modified the list of keywords for comments blacklisting', 'wp-security-audit-log'), __('Modified the list of keywords for comments blacklisting.', 'wp-security-audit-log'))
|
|
|
|
|
|
|
|
|
259 |
)
|
260 |
),
|
261 |
__('Users Profiles & Activity', 'wp-security-audit-log') => array(
|
@@ -263,7 +274,7 @@ function wsaldefaults_wsal_init(WpSecurityAuditLog $wsal)
|
|
263 |
array(1000, E_NOTICE, __('User logged in', 'wp-security-audit-log'), __('Successfully logged in.', 'wp-security-audit-log')),
|
264 |
array(1001, E_NOTICE, __('User logged out', 'wp-security-audit-log'), __('Successfully logged out.', 'wp-security-audit-log')),
|
265 |
array(1002, E_WARNING, __('Login failed', 'wp-security-audit-log'), __('%Attempts% failed login(s) detected.', 'wp-security-audit-log')),
|
266 |
-
array(1003, E_WARNING, __('Login failed / non existing user', 'wp-security-audit-log'), __('%Attempts% failed login(s) detected using non existing user.', 'wp-security-audit-log')),
|
267 |
array(1004, E_WARNING, __('Login blocked', 'wp-security-audit-log'), __('Blocked from logging in because the same WordPress user is logged in from %ClientIP%.', 'wp-security-audit-log')),
|
268 |
array(1005, E_WARNING, __('User logged in with existing session(s)', 'wp-security-audit-log'), __('Successfully logged in. Another session from %IPAddress% for this user already exist.', 'wp-security-audit-log')),
|
269 |
array(1006, E_CRITICAL, __('User logged out all other sessions with the same username', 'wp-security-audit-log'), __('Logged out all other sessions with the same username.', 'wp-security-audit-log')),
|
@@ -283,6 +294,10 @@ function wsaldefaults_wsal_init(WpSecurityAuditLog $wsal)
|
|
283 |
array(4014, E_NOTICE, __('User opened the profile page of another user', 'wp-security-audit-log'), __('%UserChanger% opened the profile page of the user %TargetUsername%.', 'wp-security-audit-log')),
|
284 |
array( 4015, E_NOTICE, __( 'User updated a custom field value for a user', 'wp-security-audit-log' ), __( 'Changed the value of the custom field %custom_field_name% from %old_value% to %new_value% for the user %TargetUsername%.', 'wp-security-audit-log' ) ),
|
285 |
array( 4016, E_NOTICE, __( 'User created a custom field value for a user', 'wp-security-audit-log' ), __( 'Created the value of the custom field %custom_field_name% with %new_value% for the user %TargetUsername%.', 'wp-security-audit-log' ) ),
|
|
|
|
|
|
|
|
|
286 |
),
|
287 |
),
|
288 |
__('Third Party Support', 'wp-security-audit-log') => array(
|
67 |
array(2017, E_NOTICE, __('User changed blog post URL', 'wp-security-audit-log'), __('Changed the URL of the post %PostTitle% from %OldUrl% to %NewUrl%. %EditorLinkPost%.', 'wp-security-audit-log')),
|
68 |
array(2019, E_NOTICE, __('User changed blog post author', 'wp-security-audit-log'), __('Changed the author of %PostTitle% post from %OldAuthor% to %NewAuthor%. %EditorLinkPost%.', 'wp-security-audit-log')),
|
69 |
array(2021, E_NOTICE, __('User changed blog post status', 'wp-security-audit-log'), __('Changed the status of %PostTitle% post from %OldStatus% to %NewStatus%. %EditorLinkPost%.', 'wp-security-audit-log')),
|
70 |
+
array(2023, E_NOTICE, __('User created new category', 'wp-security-audit-log'), __('Created a new category called %CategoryName%. Category slug is %Slug%. %CategoryLink%.', 'wp-security-audit-log')),
|
71 |
array(2024, E_WARNING, __('User deleted category', 'wp-security-audit-log'), __('Deleted the category %CategoryName%. Category slug was %Slug%.', 'wp-security-audit-log')),
|
72 |
array(2025, E_WARNING, __('User changed the visibility of a blog post', 'wp-security-audit-log'), __('Changed the visibility of the post %PostTitle% from %OldVisibility% to %NewVisibility%. %EditorLinkPost%.', 'wp-security-audit-log')),
|
73 |
array(2027, E_NOTICE, __('User changed the date of a blog post', 'wp-security-audit-log'), __('Changed the date of the post %PostTitle% from %OldDate% to %NewDate%. %EditorLinkPost%.', 'wp-security-audit-log')),
|
89 |
array(2111, E_NOTICE, __('User disabled Comments/Trackbacks and Pingbacks on a published post', 'wp-security-audit-log'), __('Disabled %Type% on the published post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log')),
|
90 |
array(2112, E_NOTICE, __('User enabled Comments/Trackbacks and Pingbacks on a published post', 'wp-security-audit-log'), __('Enabled %Type% on the published post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log')),
|
91 |
array(2113, E_NOTICE, __('User disabled Comments/Trackbacks and Pingbacks on a draft post', 'wp-security-audit-log'), __('Disabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log')),
|
92 |
+
array(2114, E_NOTICE, __('User enabled Comments/Trackbacks and Pingbacks on a draft post', 'wp-security-audit-log'), __('Enabled %Type% on the draft post %PostTitle%. View the post: %PostUrl%.', 'wp-security-audit-log')),
|
93 |
+
array( 2119, E_NOTICE, __( 'User added blog post tag', 'wp-security-audit-log' ), __( 'Added the tag %tag% on the %status% post %post_title%. View the post: %EditorLinkPost%.', 'wp-security-audit-log' ) ),
|
94 |
+
array( 2120, E_NOTICE, __( 'User removed blog post tag', 'wp-security-audit-log' ), __( 'Removed the tag %tag% on the %status% post %post_title%. View the post: %EditorLinkPost%.', 'wp-security-audit-log' ) ),
|
95 |
+
array( 2121, E_NOTICE, __( 'User created new tag', 'wp-security-audit-log' ), __( 'Created a new tag called %TagName% .Tag slug is %Slug%. %TagLink%.', 'wp-security-audit-log' ) ),
|
96 |
+
array( 2122, E_NOTICE, __( 'User deleted tag', 'wp-security-audit-log' ), __( 'Deleted the tag %TagName%. Tag slug was %Slug%.', 'wp-security-audit-log' ) ),
|
97 |
+
array( 2123, E_NOTICE, __( 'User renamed tag', 'wp-security-audit-log' ), __( 'Renamed a tag from %old_name% to %new_name%', 'wp-security-audit-log' ) ),
|
98 |
+
array( 2124, E_NOTICE, __( 'User changed tag slug', 'wp-security-audit-log' ), __( 'Changed the slug of tag %tag% from %old_slug% to %new_slug%', 'wp-security-audit-log' ) ),
|
99 |
+
array( 2125, E_NOTICE, __( 'User changed tag description', 'wp-security-audit-log' ), __( 'Changed the description of tag %tag%.', 'wp-security-audit-log' ) ),
|
100 |
),
|
101 |
__('Comments', 'wp-security-audit-log') => array(
|
102 |
array(2090, E_NOTICE, __('User approved a comment', 'wp-security-audit-log'), __('Approved the comment posted in response to the post %PostTitle% by %Author% on %CommentLink%.', 'wp-security-audit-log')),
|
262 |
array(6015, E_CRITICAL, __('Enabled/Disabled the option for an author to have previously approved comments for the comments to appear', 'wp-security-audit-log'), __('%Status% the option for an author to have previously approved comments for the comments to appear.', 'wp-security-audit-log')),
|
263 |
array(6016, E_CRITICAL, __('Changed the number of links that a comment must have to be held in the queue', 'wp-security-audit-log'), __('Changed the number of links from %OldValue% to %NewValue% that a comment must have to be held in the queue.', 'wp-security-audit-log')),
|
264 |
array(6017, E_CRITICAL, __('Modified the list of keywords for comments moderation', 'wp-security-audit-log'), __('Modified the list of keywords for comments moderation.', 'wp-security-audit-log')),
|
265 |
+
array(6018, E_CRITICAL, __('Modified the list of keywords for comments blacklisting', 'wp-security-audit-log'), __('Modified the list of keywords for comments blacklisting.', 'wp-security-audit-log')),
|
266 |
+
array( 6019, E_CRITICAL, __( 'Created a New cron job', 'wp-security-audit-log' ), __( 'A new cron job called %name% was created and is scheduled to run %schedule%.', 'wp-security-audit-log' ) ),
|
267 |
+
array( 6020, E_CRITICAL, __( 'Changed status of the cron job', 'wp-security-audit-log' ), __( 'The cron job %name% was %status%.', 'wp-security-audit-log' ) ),
|
268 |
+
array( 6021, E_CRITICAL, __( 'Deleted the cron job', 'wp-security-audit-log' ), __( 'The cron job %name% was deleted.', 'wp-security-audit-log' ) ),
|
269 |
+
array( 6022, E_NOTICE, __( 'Started the cron job', 'wp-security-audit-log' ), __( 'The cron job %name% has just started.', 'wp-security-audit-log' ) ),
|
270 |
)
|
271 |
),
|
272 |
__('Users Profiles & Activity', 'wp-security-audit-log') => array(
|
274 |
array(1000, E_NOTICE, __('User logged in', 'wp-security-audit-log'), __('Successfully logged in.', 'wp-security-audit-log')),
|
275 |
array(1001, E_NOTICE, __('User logged out', 'wp-security-audit-log'), __('Successfully logged out.', 'wp-security-audit-log')),
|
276 |
array(1002, E_WARNING, __('Login failed', 'wp-security-audit-log'), __('%Attempts% failed login(s) detected.', 'wp-security-audit-log')),
|
277 |
+
array(1003, E_WARNING, __('Login failed / non existing user', 'wp-security-audit-log'), __('%Attempts% failed login(s) detected using non existing user. %LogFileLink% %LogFileText%.', 'wp-security-audit-log')),
|
278 |
array(1004, E_WARNING, __('Login blocked', 'wp-security-audit-log'), __('Blocked from logging in because the same WordPress user is logged in from %ClientIP%.', 'wp-security-audit-log')),
|
279 |
array(1005, E_WARNING, __('User logged in with existing session(s)', 'wp-security-audit-log'), __('Successfully logged in. Another session from %IPAddress% for this user already exist.', 'wp-security-audit-log')),
|
280 |
array(1006, E_CRITICAL, __('User logged out all other sessions with the same username', 'wp-security-audit-log'), __('Logged out all other sessions with the same username.', 'wp-security-audit-log')),
|
294 |
array(4014, E_NOTICE, __('User opened the profile page of another user', 'wp-security-audit-log'), __('%UserChanger% opened the profile page of the user %TargetUsername%.', 'wp-security-audit-log')),
|
295 |
array( 4015, E_NOTICE, __( 'User updated a custom field value for a user', 'wp-security-audit-log' ), __( 'Changed the value of the custom field %custom_field_name% from %old_value% to %new_value% for the user %TargetUsername%.', 'wp-security-audit-log' ) ),
|
296 |
array( 4016, E_NOTICE, __( 'User created a custom field value for a user', 'wp-security-audit-log' ), __( 'Created the value of the custom field %custom_field_name% with %new_value% for the user %TargetUsername%.', 'wp-security-audit-log' ) ),
|
297 |
+
array( 4017, E_NOTICE, __( 'User changed first name for a user', 'wp-security-audit-log' ), __( 'Changed the first name of the user %TargetUsername% from %old_firstname% to %new_firstname%', 'wp-security-audit-log' ) ),
|
298 |
+
array( 4018, E_NOTICE, __( 'User changed last name for a user', 'wp-security-audit-log' ), __( 'Changed the last name of the user %TargetUsername% from %old_lastname% to %new_lastname%', 'wp-security-audit-log' ) ),
|
299 |
+
array( 4019, E_NOTICE, __( 'User changed nickname for a user', 'wp-security-audit-log' ), __( 'Changed the nickname of the user %TargetUsername% from %old_nickname% to %new_nickname%', 'wp-security-audit-log' ) ),
|
300 |
+
array( 4020, E_WARNING, __( 'User changed the display name for a user', 'wp-security-audit-log' ), __( 'Changed the Display name publicly of user %TargetUsername% from %old_displayname% to %new_displayname%', 'wp-security-audit-log' ) ),
|
301 |
),
|
302 |
),
|
303 |
__('Third Party Support', 'wp-security-audit-log') => array(
|
js/auditlog.js
CHANGED
@@ -19,17 +19,42 @@ window['WsalAuditLogRefreshed'] = function(){
|
|
19 |
jQuery('<input type="hidden" name="paged"/>').val(paged)
|
20 |
).submit();
|
21 |
});
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
}
|
32 |
-
|
|
|
33 |
// tooltip severity type
|
34 |
jQuery('.tooltip').darkTooltip({
|
35 |
animation: 'fadeIn',
|
@@ -41,7 +66,7 @@ window['WsalAuditLogRefreshed'] = function(){
|
|
41 |
function WsalAuditLogInit(_WsalData){
|
42 |
WsalData = _WsalData;
|
43 |
var WsalTkn = WsalData.autorefresh.token;
|
44 |
-
|
45 |
// list refresher
|
46 |
var WsalAjx = null;
|
47 |
var WsalChk = function(){
|
@@ -65,7 +90,7 @@ function WsalAuditLogInit(_WsalData){
|
|
65 |
setInterval(WsalChk, 40000);
|
66 |
WsalChk();
|
67 |
}
|
68 |
-
|
69 |
WsalSsasInit();
|
70 |
}
|
71 |
|
@@ -76,10 +101,6 @@ function WsalIppsFocus(value){
|
|
76 |
}
|
77 |
|
78 |
function WsalIppsChange(value){
|
79 |
-
if(value === ''){
|
80 |
-
value = window.prompt(WsalData.tr8n.numofitems, WsalIppsPrev);
|
81 |
-
if(value === null || value === WsalIppsPrev)return this.value = WsalIppsPrev; // operation canceled
|
82 |
-
}
|
83 |
jQuery('select.wsal-ipps').attr('disabled', true);
|
84 |
jQuery.post(WsalData.ajaxurl, {
|
85 |
action: 'AjaxSetIpp',
|
@@ -103,7 +124,7 @@ function WsalSsasInit(){
|
|
103 |
var SsasVal = SsasInp.val();
|
104 |
if(SsasAjx)SsasAjx.abort();
|
105 |
SsasInp.removeClass('loading');
|
106 |
-
|
107 |
// do a new search
|
108 |
if(SsasInp.attr('data-oldvalue') !== SsasVal && SsasVal.length > 2){
|
109 |
SsasInp.addClass('loading');
|
@@ -131,7 +152,7 @@ function WsalSsasInit(){
|
|
131 |
}, 'json');
|
132 |
SsasInp.attr('data-oldvalue', SsasVal);
|
133 |
}
|
134 |
-
|
135 |
// handle keys
|
136 |
});
|
137 |
SsasInps.blur(function(){
|
@@ -171,9 +192,9 @@ function WsalDBChange(value){
|
|
171 |
type: 'POST',
|
172 |
url: ajaxurl,
|
173 |
async: true,
|
174 |
-
data: {
|
175 |
action: 'AjaxSwitchDB',
|
176 |
-
selected_db: value
|
177 |
},
|
178 |
success: function() {
|
179 |
location.reload();
|
19 |
jQuery('<input type="hidden" name="paged"/>').val(paged)
|
20 |
).submit();
|
21 |
});
|
22 |
+
|
23 |
+
var modification_alerts = [ '1002', '1003', '6007', '6023' ];
|
24 |
+
|
25 |
+
jQuery( '.log-disable' ).each( function() {
|
26 |
+
if ( -1 == modification_alerts.indexOf( this.innerText ) ) {
|
27 |
+
// Tooltip Confirm disable alert.
|
28 |
+
jQuery( this ).darkTooltip( {
|
29 |
+
animation: 'fadeIn',
|
30 |
+
size: 'small',
|
31 |
+
gravity: 'west',
|
32 |
+
confirm: true,
|
33 |
+
yes: 'Disable',
|
34 |
+
no: '',
|
35 |
+
onYes: function( elem ) {
|
36 |
+
WsalDisableByCode( elem.attr( 'data-alert-id' ) )
|
37 |
+
}
|
38 |
+
} );
|
39 |
+
} else {
|
40 |
+
// Tooltip Confirm disable alert.
|
41 |
+
jQuery( this ).darkTooltip( {
|
42 |
+
animation: 'fadeIn',
|
43 |
+
size: 'small',
|
44 |
+
gravity: 'west',
|
45 |
+
confirm: true,
|
46 |
+
yes: 'Disable',
|
47 |
+
no: '<span>Modify</span>',
|
48 |
+
onYes: function( elem ) {
|
49 |
+
WsalDisableByCode( elem.attr( 'data-alert-id' ) );
|
50 |
+
},
|
51 |
+
onNo: function( elem ) {
|
52 |
+
window.location.href = elem.attr( 'data-link' );
|
53 |
+
}
|
54 |
+
} );
|
55 |
}
|
56 |
+
} );
|
57 |
+
|
58 |
// tooltip severity type
|
59 |
jQuery('.tooltip').darkTooltip({
|
60 |
animation: 'fadeIn',
|
66 |
function WsalAuditLogInit(_WsalData){
|
67 |
WsalData = _WsalData;
|
68 |
var WsalTkn = WsalData.autorefresh.token;
|
69 |
+
|
70 |
// list refresher
|
71 |
var WsalAjx = null;
|
72 |
var WsalChk = function(){
|
90 |
setInterval(WsalChk, 40000);
|
91 |
WsalChk();
|
92 |
}
|
93 |
+
|
94 |
WsalSsasInit();
|
95 |
}
|
96 |
|
101 |
}
|
102 |
|
103 |
function WsalIppsChange(value){
|
|
|
|
|
|
|
|
|
104 |
jQuery('select.wsal-ipps').attr('disabled', true);
|
105 |
jQuery.post(WsalData.ajaxurl, {
|
106 |
action: 'AjaxSetIpp',
|
124 |
var SsasVal = SsasInp.val();
|
125 |
if(SsasAjx)SsasAjx.abort();
|
126 |
SsasInp.removeClass('loading');
|
127 |
+
|
128 |
// do a new search
|
129 |
if(SsasInp.attr('data-oldvalue') !== SsasVal && SsasVal.length > 2){
|
130 |
SsasInp.addClass('loading');
|
152 |
}, 'json');
|
153 |
SsasInp.attr('data-oldvalue', SsasVal);
|
154 |
}
|
155 |
+
|
156 |
// handle keys
|
157 |
});
|
158 |
SsasInps.blur(function(){
|
192 |
type: 'POST',
|
193 |
url: ajaxurl,
|
194 |
async: true,
|
195 |
+
data: {
|
196 |
action: 'AjaxSwitchDB',
|
197 |
+
selected_db: value
|
198 |
},
|
199 |
success: function() {
|
200 |
location.reload();
|
languages/wp-security-audit-log-de_DE.mo
ADDED
Binary file
|
languages/wp-security-audit-log-es_ES.mo
CHANGED
Binary file
|
languages/wp-security-audit-log-fr_FR.mo
ADDED
Binary file
|
languages/wp-security-audit-log-it_IT.mo
CHANGED
Binary file
|
languages/wp-security-audit-log-ro_RO.mo
ADDED
Binary file
|
readme.txt
CHANGED
@@ -6,8 +6,8 @@ License: GPLv3
|
|
6 |
License URI: http://www.gnu.org/licenses/gpl.html
|
7 |
Tags: wordpress security plugin, wordpress security audit log, audit log, wordpress log, event log wordpress, wordpress user tracking, wordpress activity log, wordpress audit, security event log, audit trail, security audit trail, wordpress security alerts, wordpress monitor, wordpress security monitor, wordpress admin, wordpress admin monitoring, analytics, activity, admin, multisite, wordpress multisite, actions, dashboard, log, notification, wordpress monitoring, email notification, wordpress email alerts, tracking, user tracking, user activity report, wordpress audit trail
|
8 |
Requires at least: 3.6
|
9 |
-
Tested up to: 4.8.
|
10 |
-
Stable tag: 2.6.
|
11 |
|
12 |
Keep an audit trail of all changes and under the hood WordPress activity to ensure productivity and thwart possible WordPress hacker attacks.
|
13 |
|
@@ -119,6 +119,7 @@ WP Security Audit Log plugin also has a number of features that make WordPress a
|
|
119 |
* [WPLift](http://wplift.com/audit-wordpress-security-logs) - Review by Ahmad Awais
|
120 |
* [WP SmackDown](https://wpsmackdown.com/wp-plugins/wp-security-audit-log/)
|
121 |
* [WPKube](http://www.wpkube.com/improve-wordpress-security-wp-security-audit-log/)
|
|
|
122 |
* [Cloudways](https://www.cloudways.com/blog/monitor-wordpress-with-wp-security-audit-log-plugin/)
|
123 |
* [ManageWP Plugins of the month](https://managewp.com/free-wordpress-plugins-june-2014)
|
124 |
* [MyWPExpert](http://www.mywpexpert.com/wp-security-audit-log/)
|
@@ -142,6 +143,7 @@ We need help translating the plugin and the WordPress Security Alerts. Please vi
|
|
142 |
* Italian translation by [Leonardo Musumeci](http://leonardomusumeci.net/)
|
143 |
* German translation by [Mourad Louha](http://excel-translator.de)
|
144 |
* Spanish translation by the [WP Body team](https://wpbody.com/)
|
|
|
145 |
|
146 |
= Related Links and Documentation =
|
147 |
For more information and to get started with WordPress Security, check out the following:
|
@@ -188,819 +190,32 @@ Please refer to the [FAQs page](https://www.wpsecurityauditlog.com/documentation
|
|
188 |
|
189 |
== Changelog ==
|
190 |
|
191 |
-
= 2.6.
|
192 |
|
193 |
-
* **
|
194 |
-
*
|
195 |
-
|
196 |
-
*
|
197 |
-
*
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
* **Improvements**
|
202 |
-
* Added a new property in WSAL main class to store the current plugin version.
|
203 |
-
* Added a new function in WSAL main class to define constants (to be used throughout the plugin)
|
204 |
-
* Improved the code formatting in AuditLog.php
|
205 |
-
|
206 |
-
= 2.6.6 (2017-08-30) =
|
207 |
-
|
208 |
-
* **New Audit Trail Alerts**
|
209 |
-
* Alert 4015 for when a user creates a custom field in a user profile.
|
210 |
-
* Alert 4016 for when a user updates a custom field value in a user profile.
|
211 |
-
|
212 |
-
* **New Feature**
|
213 |
-
* Logging of changes in custom fields (in posts, pages, custom post types, user profiles) created by Advanced Custom Fields (ACF) or similar plugins.
|
214 |
-
* New option to show either the Username or Firstname and Lastname of the user in the Audit Trail.
|
215 |
-
|
216 |
-
* **Improvements**
|
217 |
-
* 404 errors logfiles are now saved in /uploads/wp-security-audit-log/404s/ directory.
|
218 |
-
* Changed the 404 errors logfile name format to [alert]_[yyyymmdd].log. Thanks to [Enable Security](https://www.enablesecurity.com/) for PoC of vulnerability and advise.
|
219 |
-
* Removed link to view post from Alerts about permanently deleted posts (2008, 2009, 2033).
|
220 |
-
* Added tooltip for filter via IP address.
|
221 |
-
|
222 |
-
* **Bug Fix**
|
223 |
-
* Fixed an issue where the viewing of content was not being logged when Yoast SEO is installed.
|
224 |
-
|
225 |
-
= 2.6.5 (2017-07-18) =
|
226 |
-
|
227 |
-
* **New Audit Trail Alerts**
|
228 |
-
* Alert 1007 for when an administrator terminate's a logged in session using the Users Sessions Management Add-On
|
229 |
-
* Alert 6023 to log 404 HTTP errors (requests to non-existing pages) by website visitors (non WordPress users)
|
230 |
-
|
231 |
-
* **Improvements**
|
232 |
-
* Seggregated the logging of 404 HTTP Errors by who generates them. Alert 6007 for logged in users, 6023 for anonymous website visitors.
|
233 |
-
* Improved the logging of Alert 4014 so it is not reported every time a user's profile page is reloaded with a refresh or when a change is applied.
|
234 |
-
* Removed the wsal_wp_session cookie, which was used to store the selected database when [archiving of audit trail alerts is enabled](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-documentation/faq-archiving-wordpress-audit-trail/). Using LocalStorage instead.
|
235 |
-
* Replaced mcrypt (deprecated in PHP 7) with OpenSSL. Mcrypt still used temporarily to convert configured password. Will be removed completely in future updates. [Support Ticket](https://wordpress.org/support/topic/php-issues-9/)
|
236 |
-
|
237 |
-
= 2.6.4 (2017-06-01) =
|
238 |
-
|
239 |
-
* **New Features**
|
240 |
-
* Added a number of queries in the plugin to support the new version of the [Reports Add-On](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-releases/statistics-scheduled-wordpress-reports/)
|
241 |
-
|
242 |
-
= 2.6.3 (2017-05-03) =
|
243 |
-
|
244 |
-
* **Security Update**
|
245 |
-
* Updated third party session libraries to a more secure version
|
246 |
-
|
247 |
-
= 2.6.2 (2017-04-22) =
|
248 |
-
|
249 |
-
* **New alerts to record actions & profile changes**
|
250 |
-
* 1006: User logged out all other sessions with the same username
|
251 |
-
* 4014: User opened the profile page of another user
|
252 |
-
|
253 |
-
* **New alerts to record post and page specific settings changes**
|
254 |
-
* 2111: Disabled Comments / Trackbacks and Pingbacks on a published post
|
255 |
-
* 2112: Enabled Comments / Trackbacks and Pingbacks on a published post
|
256 |
-
* 2113: Disabled Comments / Trackbacks and Pingbacks on a draft post
|
257 |
-
* 2114: Enabled Comments / Trackbacks and Pingbacks on a draft post
|
258 |
-
* 2115: Disabled Comments / Trackbacks and Pingbacks on a published page
|
259 |
-
* 2116: Enabled Comments / Trackbacks and Pingbacks on a published page
|
260 |
-
* 2117: Disabled Comments / Trackbacks and Pingbacks on a draft page
|
261 |
-
* 2118: Enabled Comments / Trackbacks and Pingbacks on a draft page
|
262 |
-
|
263 |
-
* **New alerts to record WordPress site-wide settings changes**
|
264 |
-
* 6008: User enabled / disabled the option Discourage search engines from indexing this site
|
265 |
-
* 6009: User enabled / disabled comments on all the website
|
266 |
-
* 6010: User enabled / disabled the option Comment author must fill out name and email
|
267 |
-
* 6011: User enabled / disabled the option Users must be logged in and registered to comment
|
268 |
-
* 6012: User enabled / disabled the option to automatically close comments after [X] days
|
269 |
-
* 6013: User changed the value of the option Automatically close comments from [X] to [X] days
|
270 |
-
* 6014: User enabled / disabled the option for comments to be manually approved
|
271 |
-
* 6015: User enabled / disabled the option for an author to have previously approved comments for the comments to appear
|
272 |
-
* 6016: User changed the number of links from [X] to [X] that a comment must have to be held in the queue
|
273 |
-
* 6017: User modified the list of keywords for comments moderation
|
274 |
-
* 6018: User modified the list of keywords for comments blacklisting
|
275 |
-
|
276 |
-
* **Plugin Improvements**
|
277 |
-
* URL of content in alert is no longer truncated. Now it will be reported in full
|
278 |
-
* Organised the alerts in Enable/Disable Alerts section in categories and sub categories, thus they are easier to find
|
279 |
-
* Plugin no longer links to a non-existing log file when 404 logging is switched off
|
280 |
-
* Added additional checks for when using the function wp_Sessions_register_garbage_collection, which was causing a conflict with another plugin
|
281 |
-
|
282 |
-
* **Bug Fixes**
|
283 |
-
* Fixed an issue in which the plugin was changing the titles of WooCommerce product pages for logged in users [Ticket](https://wordpress.org/support/topic/woocommerce-product-name-missing-from-page-titles-after-v2-6/)
|
284 |
-
* Fixed an issue in which plugin was unable to handle automated generated content with author 0 [Ticket](https://github.com/WPWhiteSecurity/WP-Security-Audit-Log/issues/378)
|
285 |
-
|
286 |
-
= 2.6.1 (2017-03-09) =
|
287 |
-
|
288 |
-
* **Bug Fixes**
|
289 |
-
* Removed the PHP Session ID cookie created by mistake for non logged in users.
|
290 |
-
|
291 |
-
= 2.6 (2017-02-08) =
|
292 |
-
|
293 |
-
* **New Features**
|
294 |
-
* [Audit trail for WooCommerce Store and Products](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-releases/audit-trail-woocommerce-store-products).
|
295 |
-
* New Hover over functionality to disable alerts with a single click.
|
296 |
-
|
297 |
-
* **New WooCommerce Audit Trail Alerts**
|
298 |
-
* Refer to the [Audit trail WooCommerce Alerts List](https://www.wpsecurityauditlog.com/documentation/list-monitoring-wordpress-security-alerts-audit-log/#woocommerce) for a complete list of alerts the plugin uses to keep a record of changes in the WooCommerce store and products.
|
299 |
-
|
300 |
-
* **Plugin Improvements**
|
301 |
-
* Improved severity of alerts and added severity description on hover over.
|
302 |
-
* Removed all code related to PHP error monitoring, which is no longer used (code spring cleaning).
|
303 |
-
|
304 |
-
* **Bug Fixes**
|
305 |
-
* Fixed an issue in which 404 logs where still being generated when the logs option was disabled but alert 6007 was enabled.
|
306 |
-
|
307 |
-
= 2.5.9.2 (2017-01-11) =
|
308 |
-
|
309 |
-
* **Bug Fix**
|
310 |
-
* Updated store URL so [premium add-ons](https://www.wpsecurityauditlog.com/extensions/all-add-ons-60-off/) can be updated.
|
311 |
-
|
312 |
-
= 2.5.9 (2017-01-03) =
|
313 |
-
|
314 |
-
* **Support for new features in External DB Add-on:**
|
315 |
-
* [Mirroring of audit trail to Syslog](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-documentation/faq-mirroring-wordpress-audit-trail-syslog/)
|
316 |
-
* [Mirroring of audit trail to Papertrail](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-documentation/faq-mirroring-wordpress-audit-trail-papertrail/)
|
317 |
-
* Support for [archiving alerts from the audit trail in an external database](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-documentation/faq-archiving-wordpress-audit-trail/).
|
318 |
-
|
319 |
-
= 2.5.8 (2016-11-09) =
|
320 |
-
|
321 |
-
* **Plugin Improvement (Standardized all date & time formats and timezone)**
|
322 |
-
* Plugin now uses the time & date format configured in WordPress (removed the option from plugin that override this).
|
323 |
-
* Updated all the [Premium Add-Ons](https://www.wpsecurityauditlog.com/extensions/all-add-ons-60-off/) to use the time & date format configured in WordPress.
|
324 |
-
* Changed the Request Log file extension to php and disabled execution (before it was log, hence users could guess it)
|
325 |
-
|
326 |
-
* **Bug Fixes**
|
327 |
-
* Fixed a problem with restricting users' access to the plugin ([support ticket](https://wordpress.org/support/topic/sorry-you-are-not-allowed-to-access-this-page-9/)).
|
328 |
-
* Fixed a bug in the custom alerts - previously custom alerts were overwritten during upgrade. Updated [custom alerts documentation](https://www.wpsecurityauditlog.com/documentation/create-custom-alerts-wordpress-audit-trail/) as well.
|
329 |
-
|
330 |
-
= 2.5.7 (2016-10-05) =
|
331 |
-
|
332 |
-
* **Bug Fix**
|
333 |
-
* Fixed an issue where a page's title was not being returned [Support Ticket](https://wordpress.org/support/topic/browser-tab-titles-2/)
|
334 |
-
|
335 |
-
= 2.5.6 (2016-09-27) =
|
336 |
-
|
337 |
-
* **Bug Fix**
|
338 |
-
* Fixed an issue where previous 404 reports were not being correctly merged. [Support Ticket](https://wordpress.org/support/topic/database-error-with-version-2-5-5-column-occurrence_id-cannot-be-null/)
|
339 |
-
|
340 |
-
= 2.5.5 (2016-09-27) =
|
341 |
-
|
342 |
-
* **New WordPress Audit Trail Alerts**
|
343 |
-
* 2100: User opened a post in the editor
|
344 |
-
* 2101: User viewed the post
|
345 |
-
* 2102: User opened page in editor
|
346 |
-
* 2103: User viewed page
|
347 |
-
* 2104: User opened custom post type in editor
|
348 |
-
* 2105: User viewed the custom post type
|
349 |
|
350 |
-
* **New
|
351 |
-
*
|
352 |
-
*
|
353 |
-
*
|
|
|
354 |
|
355 |
-
* **
|
356 |
-
*
|
357 |
-
*
|
358 |
-
*
|
359 |
-
*
|
360 |
-
* The Add Functionality node is now automatically disabled when one or more premium add-ons are activated.
|
361 |
-
* Changed the location of request log to /wp-content/uploads/wp-security-audit-log/.
|
362 |
-
* Changed the extension of the request log file from php to log.
|
363 |
-
* Plugin won't keep a record of newly posted comments that are marked as spam by Akismet.
|
364 |
-
|
365 |
-
* **Bug Fixes**
|
366 |
-
* Fixed the data inspector that was not working in certain installations.
|
367 |
-
* Fixed an issue with custom alerts, which were overwritten during upgrade. Refer to the [custom alerts documentation](https://www.wpsecurityauditlog.com/documentation/create-custom-alerts-wordpress-audit-trail/) for more information.
|
368 |
-
|
369 |
-
|
370 |
-
= 2.5.4 (2016-09-14) =
|
371 |
-
|
372 |
-
* **Update**
|
373 |
-
* Updated the Italian translation file with the latest translations.
|
374 |
-
|
375 |
-
* **Bug Fix**
|
376 |
-
* Fixed a bug related to database collation which was affecting the generation of reports.
|
377 |
-
|
378 |
-
= 2.5.3 (2016-08-16) =
|
379 |
-
|
380 |
-
* **Bug Fix**
|
381 |
-
* Enabled the 404 logging by default during upgrade and new install. Read this [FAQ](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-documentation/logging-404-requests-urls-logfile/) for more information on this functionality.
|
382 |
|
383 |
-
= 2.5.2 (2016-08-12) =
|
384 |
-
|
385 |
-
Read the [WP Security Audit Log 2.5.2 release notes](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-releases/logging-404-requests-support-wordpress-4-6/) for more details on what is new.
|
386 |
-
|
387 |
-
* **New Feature**
|
388 |
-
* Logging of 404 Requests to a Log file. Read this [FAQ](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-documentation/logging-404-requests-urls-logfile/) for more information on this functionality.
|
389 |
-
|
390 |
* **Improvements**
|
391 |
-
*
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
* **Bug fixes**
|
396 |
-
* Fixed the disabling functionality of Alert 6007 because it was not working.
|
397 |
-
* Fixed the disabling functionality for Alerts 1000 and 10001.
|
398 |
-
* Merged bug fixes from version 2.4.4 (were not included in 2.5.0).
|
399 |
|
400 |
-
|
401 |
-
|
402 |
-
Read the [WP Security Audit Log 2.5.0 release notes](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-releases/log-wordpress-comments-activity-2-5) for a detailed overview of what is new.
|
403 |
-
|
404 |
-
* **New Features**
|
405 |
-
* Plugin now keeps a record in the audit trail of changes in WordPress comments. Refer to the list of alerts for WordPress comments for the complete list.
|
406 |
-
* Audit log alerts for 404 (page not found) requests.
|
407 |
-
* Audit log alerts for pages / posts / custom post types automatically created by plugins.
|
408 |
-
* Added wildcard (*) support for when excluding Custom Fields.
|
409 |
-
* New setting to customize From email address and display name (The [Reports](https://www.wpsecurityauditlog.com/extensions/compliance-reports-add-on-for-wordpress/), [Email Alerts](https://www.wpsecurityauditlog.com/extensions/wordpress-email-notifications-add-on/) and [Users Sessions Management](https://www.wpsecurityauditlog.com/extensions/user-sessions-management-wp-security-audit-log/) add-ons have been updated to use the configured email address).
|
410 |
-
|
411 |
-
* **New WordPress Audit Trail Alerts for Changes in Comments**
|
412 |
-
* 2090: User approved a comment
|
413 |
-
* 2091: User unapproved a comment
|
414 |
-
* 2092: User replied to a comment
|
415 |
-
* 2093: User edited a comment
|
416 |
-
* 2094: User marked a comment as Spam
|
417 |
-
* 2095: User marked a comment as not Spam
|
418 |
-
* 2096: User moved a comment to trash
|
419 |
-
* 2097: User moved a comment out from the trash
|
420 |
-
* 2098: User permanently deleted a comment
|
421 |
-
* 2099: Website visitor / User posted a comment (disabled by default. Enable it from the Enable/Disable Alerts node in the plugin menu)
|
422 |
-
|
423 |
-
* **New WordPress Audit Trail Alerts for Plugins Activity**
|
424 |
-
* 5019: Plugin automatically created a post
|
425 |
-
* 5020: Plugin automatically created a page
|
426 |
-
* 5021: Plugin automatically created a custom post type
|
427 |
-
* 5025: Plugin automatically deleted a post
|
428 |
-
* 5026: Plugin automatically deleted a page
|
429 |
-
* 5027: Plugin automatically deleted a custom post type
|
430 |
-
|
431 |
-
* **Other New WordPress Audit Trail Alerts**
|
432 |
-
* 5031: User updated a theme
|
433 |
-
* 2089: User moved an object as a sub-object in a menu
|
434 |
-
* 6007: User / website visitor requested a non-existing page (404 ERROR)
|
435 |
-
|
436 |
-
* **Improvements**
|
437 |
-
* Standardized all alerts messages / Improved the text of all of them. Each post / page / custom post type alert has a linkt to the Editor now
|
438 |
-
|
439 |
-
= 2.4.4 (2016-06-27) =
|
440 |
-
|
441 |
-
* **Security fix**
|
442 |
-
* Fixed a [cross-site scripting vulnerability](http://www.wpwhitesecurity.com/wordpress-security/wordpress-security-glossary-terms-keywords/#cross-site-scripting) in the function AjaxDisableCustomField()
|
443 |
-
|
444 |
-
* **Bug fix**
|
445 |
-
* Fixed the hide plugin setting which was not working in some scenarios. [Support Ticket](https://wordpress.org/support/topic/hide-plugin-in-plugins-page-not-working)
|
446 |
-
|
447 |
-
= 2.4.3 (2016-06-01) =
|
448 |
-
|
449 |
-
* **New Add-On Support**
|
450 |
-
* Included code to support the new [Users Sessions Management Add-On](http://www.wpsecurityauditlog.com/extensions/user-sessions-management-wp-security-audit-log/), which allows you to see who is logged in to your WordPress and WordPress multisite networks.
|
451 |
-
|
452 |
-
* **New Alerts in the WordPress Audit Trail**
|
453 |
-
* 1004: A login attempt was blocked because a session with the same username already exists
|
454 |
-
* 1005: Multiple logged-in sessions for the same WordPress username has been detected
|
455 |
-
|
456 |
-
* **Improvement**
|
457 |
-
* Plugin reports changes when an object is moved as a sub object in a menu.
|
458 |
-
|
459 |
-
* **Bug fixes**
|
460 |
-
* Fixed a problem where wrong permissions were assigned to the reports directory in the uploads directory for the [Reports Add-On](https://www.wpsecurityauditlog.com/extensions/compliance-reports-add-on-for-wordpress/).
|
461 |
-
* Fixed an issue where multiple incorrect changes were reported when changing the structure of a menu [Support ticket](https://wordpress.org/support/topic/multiple-entries-when-adding-menu-item).
|
462 |
-
* Fixed a bug in the settings sensor [support ticket](https://wordpress.org/support/topic/php-warning-missing-argument-2-for-wsal_sensors_systemwpupdate?replies=1).
|
463 |
-
|
464 |
-
= 2.4.2 (2016-04-26) =
|
465 |
-
|
466 |
-
* **Improvement**
|
467 |
-
* Removed hardcoded memory limit in database connector. Now all database connections are done via AJAX calls hence there is no need for such limits.
|
468 |
-
|
469 |
-
= 2.4.1 (2016-04-20) =
|
470 |
-
|
471 |
-
Read the [WP Security Audit Log 2.4 release notes](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-releases/wp-security-audit-log-2-4-1-released/) for a detailed overview of what is new in this version.
|
472 |
-
|
473 |
-
* **New Features**
|
474 |
-
* New setting allowing the users to configure the timestamp of the alerts. Read the FAQ [How to change the time zone in the WordPress Audit Trial](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-documentation/faq-change-time-zone-wordpress-audit-trail/) for more information.
|
475 |
-
|
476 |
-
* **New WordPress Security Alerts for Content title changes**
|
477 |
-
* 2086: User changed the title of a post
|
478 |
-
* 2087: User changed the title of a page
|
479 |
-
* 2088: User changed the title of a custom post type
|
480 |
-
|
481 |
-
* **Improvements**
|
482 |
-
* Implemented AJAX calls for when migrating the WordPress Audit Trail between databases with the [External DB add-on](https://www.wpsecurityauditlog.com/extensions/external-database-for-wp-security-audit-log/)
|
483 |
-
|
484 |
-
= 2.4 (2016-03-28) =
|
485 |
-
|
486 |
-
Read the [WP Security Audit Log 2.4 release notes](https://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-releases/integration-hooks-custom-alerts-monitoring-wordpress-menus-2-4) for a detailed overview of what is new.
|
487 |
-
|
488 |
-
* **New Features**
|
489 |
-
* Monitoring of WordPress menus changes from both admin pages and theme customizer.
|
490 |
-
* New hook that allows users to create their own custom alerts. Read the [WP Security Audit Log Custom Alerts documentation](https://www.wpsecurityauditlog.com/documentation/create-custom-alerts-wordpress-audit-trail/) for more information.
|
491 |
-
* New alerts for when a either a post, a post or a custom post type is scheduled.
|
492 |
-
|
493 |
-
* **New WordPress Security Alerts for Menus**
|
494 |
-
* 2078: User created a new menu
|
495 |
-
* 2079: User added objects to menu
|
496 |
-
* 2080: User removed object from menu
|
497 |
-
* 2081: User deleted a menu
|
498 |
-
* 2082: User changed menu settings
|
499 |
-
* 2083: USer modified an object in menu
|
500 |
-
* 2084: User renamed a menu
|
501 |
-
* 2085: User changed the order of the objects in menu
|
502 |
-
|
503 |
-
* **New WordPress Security Alerts for Scheduled Items**
|
504 |
-
* 2074: User scheduled a post for publishing
|
505 |
-
* 2075: User scheduled a page for publishing
|
506 |
-
* 2076: User scheduled a custom post type for publishing
|
507 |
-
|
508 |
-
* **Bug Fixes**
|
509 |
-
* Fixed an issue where WordPress updated alerts were begin generated repeatedly upon accessing the updates page. [Support Ticket](https://wordpress.org/support/topic/weird-update-message-in-logs)
|
510 |
-
* Fixed an issue where WordPress pruning was not working in an out of the box installation. [Support Ticket](https://wordpress.org/support/topic/huge-wsal-metadata-table-not-being-cleanedfixed)
|
511 |
-
* Fixed a conflict with Migrate DB. [Support Ticket](https://wordpress.org/support/topic/wp-migrate-db-pro)
|
512 |
-
|
513 |
-
= 2.3.3 (2016-02-16) =
|
514 |
-
* **Bug Fixes**
|
515 |
-
* Fixed an issue where automated WordPress updates were not being reported.
|
516 |
-
* Improved error handling in database queries.
|
517 |
-
|
518 |
-
= 2.3.2 (2016-01-21) =
|
519 |
-
* **Bug Fix**
|
520 |
-
* Fixed an issue with the login/logout sensor reported in this [ticket](https://wordpress.org/support/topic/undefined-index-log).
|
521 |
-
|
522 |
-
= 2.3.1 (2016-01-16) =
|
523 |
-
* **Improvement**
|
524 |
-
* Improved the SQL queries used by the [Reports Add-On](http://www.wpsecurityauditlog.com/extensions/compliance-reports-add-on-for-wordpress/)
|
525 |
-
|
526 |
-
= 2.3 (2016-01-12) =
|
527 |
-
* **New Features**
|
528 |
-
* Keep track of changes on bbPress forums. For more detailed information read the [WP Security Audit Log 2.3 Release Notes](http://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-releases/track-bbpress-forums-changes-with-wp-security-audit-log/)
|
529 |
-
|
530 |
-
* **New WordPress Security Alerts**
|
531 |
-
* 8000: User published a new forum
|
532 |
-
* 8001: User changed the status of a forum
|
533 |
-
* 8002: User changed the visibility of a forum
|
534 |
-
* 8003: User changed the URL of a forum
|
535 |
-
* 8004: User changed the order of a forum
|
536 |
-
* 8005: User moved forum to trash
|
537 |
-
* 8006: User permanently deleted a fourm
|
538 |
-
* 8007: User restored a forum from trash
|
539 |
-
* 8008: User changed the parent of a forum
|
540 |
-
* 8009: User changed the role of forum auto user role
|
541 |
-
* 8010: User changed the option for anonymous posting on forum
|
542 |
-
* 8011: User changed the forum type
|
543 |
-
* 8012: User changed the time setting to disallow editing of posts
|
544 |
-
* 8013: User changed the time setting for post throttling
|
545 |
-
* 8014: User created new forum topic
|
546 |
-
* 8015: User changed the status of a forum topic
|
547 |
-
* 8016: User changed the type of a forum topic
|
548 |
-
* 8017: User changed the URL of a forum topic
|
549 |
-
* 8018: User changed the forum for a topic
|
550 |
-
* 8019: User moved a forum topic to trash
|
551 |
-
* 8020: User permanently deleted a forum topic
|
552 |
-
* 8021: User restored a forum topic from trash
|
553 |
-
* 8022: User changed the visibility of a forum topic
|
554 |
-
|
555 |
-
* **Improvements**
|
556 |
-
* Improved the performance / queries of the Audit Log Viewer, hence now it is faster when retrieving alerts from bigger databases
|
557 |
-
* Rewritten and improved the reporting engine for the [Reports Add-On](http://www.wpsecurityauditlog.com/extensions/compliance-reports-add-on-for-wordpress/)
|
558 |
-
|
559 |
-
* **Bug Fix**
|
560 |
-
* Fixed an issue where administrators of sub domain websites could see the alerts of other websites from the dashboard widget in a multisite installation. [Ticket](https://wordpress.org/support/topic/in-wordpress-mu-all-users-can-view-the-widget-log-bug)
|
561 |
-
* Fixed a SQL query error where a NULL value was being saved and it wasn't accepted. [Ticket](https://wordpress.org/support/topic/sql-error-using-wordpress-44)
|
562 |
-
|
563 |
-
= 2.2 (2015-11-10) =
|
564 |
-
* **New Features**
|
565 |
-
* Aded the revision link in content change security alerts allowing you to see the actual content changes that took place on posts, pages and custom post types. [Learn More](http://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-releases/record-all-wordpress-content-changes-wp-security-audit-log-plugin/)
|
566 |
-
|
567 |
-
* **Bug Fixes**
|
568 |
-
* Fixed an issue where user was allowed to disable all columns in Audit Log Viewer [Support ticket](https://wordpress.org/support/topic/audit-log-columns-selection-is-empty). Fix recommendation by Bates College.
|
569 |
-
|
570 |
-
= 2.1.1 (2015-10-08) =
|
571 |
-
* **New WordPress Security Alerts**
|
572 |
-
* 2072: User modifies a post that is submitted for review
|
573 |
-
* 2073: Contributor submits a post for review
|
574 |
-
|
575 |
-
* **Improvements**
|
576 |
-
* Added the functionality to search by Alert ID in [Search add-on](http://www.wpsecurityauditlog.com/extensions/search-add-on-for-wordpress-security-audit-log/)
|
577 |
-
* When a background process is reports, plugin now reports "System" as username and not "unkown"
|
578 |
-
* Improved the connection checks of the [External DB add-on](http://www.wpsecurityauditlog.com/extensions/external-database-for-wp-security-audit-log/) (now it also has a timeout for when incorrect IP / Host is specified)
|
579 |
-
|
580 |
-
* **Bug Fixes**
|
581 |
-
* Fixed an issue in the [Reports add-on](http://www.wpsecurityauditlog.com/extensions/compliance-reports-add-on-for-wordpress/) where not all available users were being listed to generate a report
|
582 |
-
* Fixed an issue with licensing notifications - now all licensing notifications will be automatically dismissed upon activating a key.
|
583 |
-
* Fixed an issue where the user reset passwords were not being recorded (since 4.3). [Ticket](https://wordpress.org/support/topic/wp-43-password-reset?replies=3)
|
584 |
-
|
585 |
-
= 2.1.0 (2015-09-09) =
|
586 |
-
* **New Features**
|
587 |
-
* Support for the [External DB Add-on](http://www.wpsecurityauditlog.com/extensions/external-database-for-wp-security-audit-log/).
|
588 |
-
* Integration with WhatIsMyIPAddress.com (Click an IP addresses in Audit Log viewer to get all information about it).
|
589 |
-
* Settings to Incude or exclude specific columns from the Audit Log viewer.
|
590 |
-
* Ability to exclude an IP address from monitoring
|
591 |
-
* New option to disable the reporting of WordPress background tasks (such as deletion of auto draft posts)
|
592 |
-
|
593 |
-
* **Bug Fixes**
|
594 |
-
* Fixed a problem when trying to customize a widget via the theme customizer [support ticket](https://wordpress.org/support/topic/customizer-issues?replies=2).
|
595 |
-
* Handling an error that was generated when someone logged in to a WordPress via social media channels.
|
596 |
-
* Fixed: incorrect alert generated when a widget is moved from the bottom of a container to another.
|
597 |
-
* Fixed: incorrect alert generated when a custom filed is deleted from a page.
|
598 |
-
* Fixed an issue where post related actions were not reported for users with author and contributor roles.
|
599 |
-
* Fixed an issue where in a specific scenario the settings in the options tabel were duplicate.
|
600 |
-
|
601 |
-
= 2.0.1 (2015-08-05) =
|
602 |
-
* **Minor Change**
|
603 |
-
* Launched a new [WP Security Audit Log website](http://www.wpsecurityauditlog.com) and updated all relevant links.
|
604 |
-
|
605 |
-
= 2.0.0 (2015-07-16) =
|
606 |
-
* **New Features**
|
607 |
-
* New database connector allowing faster and more efficient plugin to WordPress database communication
|
608 |
-
* Added new option to switch the display time of alerts between 24 hour or 12 hour format
|
609 |
-
* Sorting functionality in Audit Log Viewer (sort WordPress security alerts by date & time, code or username)
|
610 |
-
|
611 |
-
* **Bug Fixes**
|
612 |
-
* Fixed issue where super admin roles was not reported when logging in to "sub sites" in WordPress multisite
|
613 |
-
* Fixed several formatting issues in the Audit Log Viewer (UI)
|
614 |
-
* Fixed issue where multiple plugins were upgraded via the drop down menu and no alerts were being reported
|
615 |
-
* Fixed: When unrestricting plugin access from a single admin was not working properly
|
616 |
-
|
617 |
-
= 1.6.1 (2015-05-04) =
|
618 |
-
* **Bug Fixes**
|
619 |
-
* Fixed the monitoring of plugin updates for WordPress 4.2 [Support Ticket](https://wordpress.org/support/topic/not-logging-plugin-updates-in-42)
|
620 |
-
* Fixed an issue where multiple plugin updates triggered by drop down menu were not being reported
|
621 |
-
* Fixed a conflict with Magic Fields 2 plugin [Support Ticket](https://wordpress.org/support/topic/major-conflict-with-magic-fields-2)
|
622 |
-
* Updated the escaping of add_query_arg() function which could result in a potential XSS
|
623 |
-
|
624 |
-
= 1.6.0 (2015-04-16) =
|
625 |
-
* **New Security Alerts**
|
626 |
-
* 5010: plugin created new tables in the WordPress database
|
627 |
-
* 5011: plugin modified the structure of a number of tables in the WordPress database
|
628 |
-
* 5012: plugin deleted tables from the WordPress database
|
629 |
-
* 5013: theme created new tables in the WordPress database
|
630 |
-
* 5014: theme modified the structure of a number of tables in the WordPress database
|
631 |
-
* 5015: theme deleted tables from the WordPress database
|
632 |
-
* 5016: an unknown component created new tables in the WordPress database
|
633 |
-
* 5017: an unknown component theme modified the structure of a number of tables in the WordPress database
|
634 |
-
* 5018: an unknown component theme deleted tables from the WordPress database
|
635 |
-
* 2052: a user changed the parent of a category
|
636 |
-
|
637 |
-
= 1.5.2 (2015-04-07) =
|
638 |
-
* **Bug Fix**
|
639 |
-
* Removed a clause which changed the debug log path (used for testing) [Support Ticket](https://wordpress.org/support/topic/plugin-is-changing-error-log-location)
|
640 |
-
|
641 |
-
= 1.5.1 (2015-03-26) =
|
642 |
-
* **Improvements**
|
643 |
-
* Completely removed the user of the is_admin() function to follow better security practises
|
644 |
-
|
645 |
-
* **Bug Fixes**
|
646 |
-
* Updated the licensing mechanism to correct problem where [WP Security Audit Log premium add-ons](http://www.wpsecurityauditlog.com/plugin-extensions/) could not be activated.
|
647 |
-
* Fixed several issues where the database tables were not being created during install or upgrade. [Support ticket](https://wordpress.org/support/topic/wp_wsal_options-not-created-with-plugin-update?replies=8) and [Support ticket 2](https://wordpress.org/support/topic/missing-database-tables-1?replies=9)
|
648 |
-
* Fixed an issue where the plugin did not monitor any activity in specific scenarios. [Support ticket](https://wordpress.org/support/topic/clean-install-not-reporting-when-posts-or-pages-are-creatededited?replies=4) and [Support ticket 2](https://wordpress.org/support/topic/blank-audit-log-page?replies=2)
|
649 |
-
* Removed duplicate options in the settings page. [Support ticket](https://wordpress.org/support/topic/refresh-audit-view-refresh-audit-log-viewer?replies=5)
|
650 |
-
|
651 |
-
= 1.5.0 (2015-03-18) =
|
652 |
-
* **New Features**
|
653 |
-
* Ability to exclude custom fields from monitoring (custom fields can be excluded from the Audit Log Viewer with a simple click or you can specify them in the settings)
|
654 |
-
* Ability to exclude WordPress users and roles from monitoring
|
655 |
-
|
656 |
-
* **Improvements**
|
657 |
-
* WP Security Audit Log now has its own settings table in WordPress database. This will provide us with more flexibility and have more centralization of data
|
658 |
-
* Updated the code where is_admin() function was being used to follow better security practises
|
659 |
-
|
660 |
-
* **Bug Fixes**
|
661 |
-
* Fixed a problem where a PHP exception was being thrown during the activation of the plugin [support ticket](https://wordpress.org/support/topic/php-error-alert-with-code-5001-has-not-be-registered?replies=11)
|
662 |
-
|
663 |
-
= 1.4.1 (2015-03-12) =
|
664 |
-
* **Bug Fix**
|
665 |
-
* Fixed an issue where the IP address was not being reported for anyone using PHP version 5.3.3 or earlier [support ticket](https://wordpress.org/support/topic/invalid-ip-address-error?replies=4)
|
666 |
-
|
667 |
-
= 1.4 (2015-02-24) =
|
668 |
-
* **New Features**
|
669 |
-
* WordPress username is now reported when a failed login is recorded - [More Details](http://www.wpsecurityauditlog.com/wordpress-user-monitoring-plugin-releases/wordpress-failed-logins-monitoring-improved/)
|
670 |
-
* Plugin is now available in Romanian thanks to [Artmotion](http://www.artmotion.eu)
|
671 |
-
|
672 |
-
* **Improvements**
|
673 |
-
* Improved IP Address validation checks - if IP address format is incorrect the plugin reports "incorrect format" and not "unknown" - This will help us improve troubleshooting
|
674 |
-
* Alerts pruning options are now added during activation of the plugin, making pruning options more reliable - existing pruning options will be retained
|
675 |
-
|
676 |
-
* **Bug Fixes**
|
677 |
-
* Fixed issue with the option "auto / manual" refresh of Audit Log Viewer
|
678 |
-
* Fixed plugin uninstallation process (added new option to purge all plugin data from WordPress database upon uninstall)
|
679 |
-
|
680 |
-
= 1.3.3 (2015-01-21) =
|
681 |
-
* **New Features**
|
682 |
-
* [Premium Add-Ons](http://www.wpsecurityauditlog.com/plugin-extensions/) will be hidden from the WordPress plugins page when the Hide plugin option is enabled.
|
683 |
-
|
684 |
-
* **Improvements**
|
685 |
-
* Updated some of the help text in plugin's settings page
|
686 |
-
* Updated the text of some WordPress security alerts
|
687 |
-
|
688 |
-
* **Bug Fixes**
|
689 |
-
* Fixed a bug related to the reverse proxy / IP retrieval functionality
|
690 |
-
* Fixed an issue related to Sandbox removal and upgrades [Support Ticket](https://wordpress.org/support/topic/fatal-error-undefined-method-on-upgrade)
|
691 |
-
|
692 |
-
= 1.3.2 (2014-12-16) =
|
693 |
-
* **New Features and Options**
|
694 |
-
* Plugin automatically retrieves user's originating IP address even if WordPress is installed behind a reverse proxy, web application firewall or load balancer. For more information refer to [WP Security Audit Log, Reverse Proxies and WAFs](http://www.wpsecurityauditlog.com/documentation/automatically-retrieve-originating-wordpress-user-ip-address/)
|
695 |
-
* New option to omit internal IP addresses from being reported in the WordPress security audit log
|
696 |
-
|
697 |
-
* **Removed Functionality**
|
698 |
-
* The sandbox was removed from the plugin. If you need to use the sandbox for troubleshooting and tested contact us since we migrated it to a standalone extension.
|
699 |
-
|
700 |
-
* **Bug Fixes**
|
701 |
-
* Fixed a bug where site administrators where not able to view the WordPress security alerts for their sites in a WordPress multisite installation
|
702 |
-
* Improved some SQL queries as reported in this [support ticket](https://wordpress.org/support/topic/syntax-error-d-not-replaced?replies=10#post-6278773)
|
703 |
-
* Fixed an issue with alerts pruning (when pruning was set by number of alerts the plugin was pruning all alerts)
|
704 |
-
|
705 |
-
= 1.3.1 (2014-11-27) =
|
706 |
-
* **New WordPress Security Alerts**
|
707 |
-
* Alert 2065: The content of published post has been modified
|
708 |
-
* Alert 2066: The content of published page has been modified
|
709 |
-
* Alert 2067: The content of published custom post type has been modified
|
710 |
-
* Alert 2068: The content of a draft post has been modified
|
711 |
-
* Alert 2069: The content of a draft page has been modified
|
712 |
-
* Alert 2070: The content of a draft custom post type has been modified
|
713 |
-
* Alert 2071: Changed the position of a widget in the same container
|
714 |
-
|
715 |
-
* **WordPress Security Audit Log Viewer Improvement**
|
716 |
-
* Removed fixed width from columns, hence now they are dynamically resized depending on your resolution
|
717 |
-
|
718 |
-
* **Bug Fixes**
|
719 |
-
* Fixed an issue where alert 1001 (logout) was generated without a login [support ticket](https://wordpress.org/support/topic/too-many-records-with-1001-code?replies=2)
|
720 |
-
* Fixed a PHP coding problem / invalid argument issue [support ticket](https://wordpress.org/support/topic/php-warning-invalid-argument-2?replies=4#post-6229565)
|
721 |
-
|
722 |
-
= 1.3.0 (2014-10-30) =
|
723 |
-
* **New WordPress Security Alerts**
|
724 |
-
* Alert 2065: User modified the content of a blog post
|
725 |
-
* Alert 2066: User modified the content of a WordPress page
|
726 |
-
* Alert 2067: User modified the content of a custom post type
|
727 |
-
|
728 |
-
* **Improvements**
|
729 |
-
* We have also improved the code of some of the sensors which monitor the WordPress activity
|
730 |
-
|
731 |
-
= 1.2.9 (2014-10-21) =
|
732 |
-
* **Bug Fix**
|
733 |
-
* Fixed an issue with the queries used for the alerts pruning as reported in this [support ticket](https://wordpress.org/support/topic/this-version-of-mysql-doesnt-yet-support).
|
734 |
-
|
735 |
-
= 1.2.8 (2014-10-14) =
|
736 |
-
* **New Feature**
|
737 |
-
* Added new Extensions page to allow users to see which extensions they can use to increase the functionality of the plugin
|
738 |
-
* Included licensing mechanism to support premium extensions
|
739 |
-
|
740 |
-
* **Improvements**
|
741 |
-
* Updated latest language files for German and Italian translations (also include corrections for some old translations)
|
742 |
-
|
743 |
-
* **Bug Fixes**
|
744 |
-
* Fixed a problem with the pruning of WordPress Security Alerts [support ticket](https://wordpress.org/support/topic/security-alerts-pruning-not-working-as-intended)
|
745 |
-
* Fixed pagination issue in the Audit Log Viewer when running on WordPress multisite
|
746 |
-
|
747 |
-
= 1.2.7 (2014-09-26) =
|
748 |
-
* **New Feature**
|
749 |
-
* New option "Restrict Plugin Access" that allows WordPress administrators to further restrict access to the plugin and the WordPress security alerts
|
750 |
-
|
751 |
-
* **Improvements**
|
752 |
-
* Updated the Audit Log Viewer backend to retriev WordPress security alerts much faster and consume less resources on large websites
|
753 |
-
* Moved the Audit Log plugin menu entry underneath the dashboard entry for better access
|
754 |
-
* Several minor enhancements to the plugin to perform better on large WordPress installations
|
755 |
-
|
756 |
-
* **Bug Fixes**
|
757 |
-
* Fixed an uncaught exception with Logout Alert 1001 [support ticket](https://wordpress.org/support/topic/uncaught-exception-2)
|
758 |
-
|
759 |
-
= 1.2.6 (2014-08-20) =
|
760 |
-
* **Improvements**
|
761 |
-
* Several performance improvements and tweaks applied
|
762 |
-
* Updated Italian translations
|
763 |
-
|
764 |
-
* **Bug Fixes**
|
765 |
-
* Fixed an issue with URLs of plugin pages [support ticket](http://wordpress.org/support/topic/admin-cannot-access-settings)
|
766 |
-
* Fixed an uncaught exception with Logout Alert 1001 [support ticket](http://wordpress.org/support/topic/fatal-error-1311)
|
767 |
-
* Fixed error on logout issue [support ticket](http://wordpress.org/support/topic/error-at-logou)
|
768 |
-
* Fixed uncaught exception with specific Alert Codes [support ticket](http://wordpress.org/support/topic/uncaught-exception-2)
|
769 |
-
|
770 |
-
= 1.2.5 (2014-08-12) =
|
771 |
-
* **New Feature**
|
772 |
-
* Monitoring of custom fields in WordPress posts, pages and custom post types.
|
773 |
-
|
774 |
-
* **New WordPress Security Alerts**
|
775 |
-
* Alert 2053: User created new custom field in blog post
|
776 |
-
* Alert 2054: User modified the value of custom field in blog post
|
777 |
-
* Alert 2055: User deleted a custom field in blog post
|
778 |
-
* Alert 2062: User renamed custom field in blog post
|
779 |
-
* Alert 2059: User created new custom field in page
|
780 |
-
* Alert 2060: User modified the value of custom field in page
|
781 |
-
* Alert 2061: User deleted custom field from page
|
782 |
-
* Alert 2063: User renamed custom field in
|
783 |
-
* Alert 2056: User created new custom field in custom post type
|
784 |
-
* Alert 2057: User modified the value of custom field in custom post type
|
785 |
-
* Alert 2058: User deleted a custom field from custom post type
|
786 |
-
* Alert 2064: User renamed custom field in custom post type
|
787 |
-
|
788 |
-
* **Improvements**
|
789 |
-
* Improved the writing and reading of WordPress alerts from the WordPress database (plugin runs more efficiently on high traffic WordPress and WordPress multisite installations)
|
790 |
-
* Improved the monitoring of WordPress login and logout actions
|
791 |
-
* Applied various plugin performance tweaks
|
792 |
-
|
793 |
-
* **Bug Fixes**
|
794 |
-
* Fixed a specific issue where user and user role where not being reported ([ticket](http://wordpress.org/support/topic/showing-unknown-user-logged-out-but-never-logged-in?replies=11))
|
795 |
-
* Fixed an error which was being reported during user logout in specific scenarios ([ticket](http://wordpress.org/support/topic/error-at-logou?replies=3))
|
796 |
-
* Fixed a CSRF vulnerability reported by Kévin FALCOZ aka 0pc0deFR
|
797 |
-
|
798 |
-
= 1.2.4 (2014-07-27) =
|
799 |
-
* **Improvements**
|
800 |
-
* Improved monitoring of failed logins, addressed issues reported [here](http://wordpress.org/support/topic/horrible-performance#post-), [here](http://wordpress.org/support/topic/much-too-much-sql-load#post-), [here](http://wordpress.org/support/topic/overload-due-to-this-plugin#post-) and [here](http://wordpress.org/support/topic/mysql-200-cpu-time-copying-to-tmp-table)
|
801 |
-
|
802 |
-
= 1.2.3 (2014-07-23) =
|
803 |
-
* **Improvements**
|
804 |
-
* Improved database structure for better support of high-traffic WordPress and WordPress multisite installations
|
805 |
-
* Developer options are reset during updates for improved performance
|
806 |
-
* Added a warning / note to the developer options (such options should NEVER be enabled on live websites but only on testing, staging and development websites)
|
807 |
-
|
808 |
-
* **Bug Fixes**
|
809 |
-
* Fixed database issue with primary key constraint
|
810 |
-
|
811 |
-
= 1.2.2 (2014-07-16) =
|
812 |
-
* **New Features**
|
813 |
-
* Italian translation available thanks to [Leonardo Musumeci](http://leonardomusumeci.net/)
|
814 |
-
|
815 |
-
* **Improvements**
|
816 |
-
* Added a warning for developer options
|
817 |
-
* "Hidden" developer options from default settings; user has to click link to access developer settings
|
818 |
-
* Backtrace logging now made optional from a developer setting
|
819 |
-
|
820 |
-
* **Bug Fixes**
|
821 |
-
* Solved several issues related to translations. Now everything in the plugin is translatable
|
822 |
-
* Fixed several other issues reported by email
|
823 |
-
|
824 |
-
= 1.2.1 (2014-07-2) =
|
825 |
-
* **Bug Fix**
|
826 |
-
* Fixed reported issue with upgrade (more info [here](http://wordpress.org/support/topic/errors-showing-since-120-upgrade-on-multisite-install?replies=4))
|
827 |
-
|
828 |
-
= 1.2.0 (2014-07-2) =
|
829 |
-
* **New Features**
|
830 |
-
* Unlimited Alerts can be stored (removed the 5000 alerts limit)
|
831 |
-
* Alert time now includes milliseconds for more precision (ideal for auditing and compliance)
|
832 |
-
* Reported alert time is now relative to user's configured timezone
|
833 |
-
* Alerts automatic pruning procedures can now be enabled / disabled
|
834 |
-
* Option to hide WP Security Audit Log from Plugins page in WordPress
|
835 |
-
* If there are more than 15 websites in a multisite installation, an auto complete site search box is shown instead of the drop down menu
|
836 |
-
|
837 |
-
* **New WordPress Security Alerts**
|
838 |
-
* Alert 5007: User has uninstalled / deleted a theme
|
839 |
-
* Alert 5008: Super administrator network activated a theme on multisite
|
840 |
-
* Alert 5009: Super administrator network deactivated a theme on multisite
|
841 |
-
|
842 |
-
= 1.1.0 (2014-05-27) =
|
843 |
-
* **New Features**
|
844 |
-
* User avatar is shown in the alert to allow administrators to easily recognize users and their activity
|
845 |
-
* Clickable username in alerts allow administrators to access user's profile instantly
|
846 |
-
* User role is reported in alert so administrators can easily track any suspicious behaviour
|
847 |
-
* PHP Version checker; upon installation the plugin will check what version of PHP is installed on the system
|
848 |
-
|
849 |
-
* **New WordPress Security Alert for monitoring plugin files**
|
850 |
-
* Alert 2051: User changed a plugin file using the plugin editor (note: filename and location will also be reported in the alert)
|
851 |
-
|
852 |
-
* **Bug fixes**
|
853 |
-
* Fixed wrapping problem in alerts dashboard widget
|
854 |
-
* Fixed upgrade script to properly create the new tables in the WordPress database
|
855 |
-
|
856 |
-
= 1.0 (2014-05-20) =
|
857 |
-
* Complete plugin rewrite making the new version more stable and scalable
|
858 |
-
|
859 |
-
* **New Features**
|
860 |
-
* New Audit Log viewer
|
861 |
-
* Auto refresh of security alerts - WordPress administrators do not need to refresh the Audit Log Viewer page to see new alerts
|
862 |
-
* Data Inspector reports more insider information about each alert (can be enabled from settings)
|
863 |
-
* Sandbox allows developers to execute PHP code for troubleshooting (can be enabled from settings)
|
864 |
-
* Request Log that logs all HTTP GET and POST requests done on WordPress (can be enabled from settings)
|
865 |
-
* Logging of PHP Errors; ideal for developers who want to monitor WordPress for any errors (can be enabled from settings)
|
866 |
-
* New Support and About Us page that you should check out!
|
867 |
-
|
868 |
-
* **New WordPress Security Alerts for monitoring themes, WordPress settings, files and much more**
|
869 |
-
* Alert 2046: User modified a file using the editor
|
870 |
-
* Alert 2047: User changed parent of page
|
871 |
-
* Alert 2048: User changed template of page
|
872 |
-
* Alert 2049: User set post as sticky
|
873 |
-
* Alert 2050: User removed post from Sticky
|
874 |
-
* Alert 5005: User installed a new theme
|
875 |
-
* Alert 5006: User activated a theme
|
876 |
-
* Alert 6004: User upgraded WordPress
|
877 |
-
* Alert 6005: User changed the WordPress permalinks
|
878 |
-
|
879 |
-
* **New WordPress Developer Alerts**
|
880 |
-
* Alert 0000: Unknown error
|
881 |
-
* Alert 0001: PHP Error
|
882 |
-
* Alert 0002: PHP Warning
|
883 |
-
* Alert 0003: PHP Notice
|
884 |
-
* Alert 0004: PHP Exception
|
885 |
-
* Alert 0005: PHP Shutdown Error
|
886 |
-
|
887 |
-
= 0.6.3 (2014-02-18) =
|
888 |
-
* **Bug Fix**
|
889 |
-
* Disabled debugging by default (left enabled by mistake)
|
890 |
-
|
891 |
-
= 0.6.2 (2014-02-03) =
|
892 |
-
* **Bug Fix**
|
893 |
-
* Fixed a number of database issues introduced with the WordPress Multisite Support
|
894 |
-
* Fixed issue with supporting pre WordPress 3.0 multisite installations (support tickets [here](http://wordpress.org/support/topic/errors-on-06-fresh-installation?replies=9) and [here](http://wordpress.org/support/topic/upgrade-to-06-infinite-do-loop-in-refresh-alerts-list?replies=3))
|
895 |
-
|
896 |
-
= 0.6.1 (2014-01-16) =
|
897 |
-
* **Bug Fix**
|
898 |
-
* Fixed errors in debug code (used for when debugging is enabled in plugin)
|
899 |
-
|
900 |
-
= 0.6 (2014-01-15) =
|
901 |
-
* **New Plugin Feature**
|
902 |
-
* WordPress Multisite Support [Read More](http://www.wpsecurityauditlog.com/documentation/wordpress-multisite-plugin-features-support/)
|
903 |
-
|
904 |
-
* **New WordPress Security Alerts for monitoring specific multisite activity on a WordPress multisite network installation**
|
905 |
-
* Alert 4008: User is granted super admin privileges (network)
|
906 |
-
* Alert 4009: Super admin privileges (network) are revoked from a user
|
907 |
-
* Alert 4010: Added an existing user to a site and assigned a specific role
|
908 |
-
* Alert 4011: Removed user with a specific role from a site
|
909 |
-
* Alert 4012: New user created on the network
|
910 |
-
* Alert 7000: Added a new site to network
|
911 |
-
* Alert 7001: A site was archived
|
912 |
-
* Alert 7002: A site was unarchived
|
913 |
-
* Alert 7003: A site was activated
|
914 |
-
* Alert 7004: A site was deactivated
|
915 |
-
* Alert 7005: A site was deleted
|
916 |
-
|
917 |
-
* **Plugin Improvements**
|
918 |
-
* Plugin settings page to have the same look and feel of the new WordPress dashboard (3.8)
|
919 |
-
|
920 |
-
= 0.5.1 (2013-12-11) =
|
921 |
-
* **Bug Fix**
|
922 |
-
* Fixed an issue with Edit Post function (in very specific cases) (http://wordpress.org/support/topic/was-working-great-no-post-edit-function-now)
|
923 |
-
|
924 |
-
= 0.5 (2013-11-06) =
|
925 |
-
* **New WordPress Security Alerts for monitoring of Widgets**
|
926 |
-
* Alert 2042: New widget was added
|
927 |
-
* Alert 2043: A widget was modified
|
928 |
-
* Alert 2044: A widget was deleted
|
929 |
-
* Alert 2045: A widget was moved
|
930 |
-
|
931 |
-
* **New Plugin Features**
|
932 |
-
* New setting to allow specific user(s) and role(s) to view the Audit Log Viewer (read only)
|
933 |
-
* New setting to allow specific user(s) and role(s) to manage the WP Security Audit Log plugin (can change plugin settings, enable disable WordPress security alerts etc)
|
934 |
-
|
935 |
-
* **Plugin Improvements**
|
936 |
-
* Renamed "login/logout" tab in "Enable/Disable Alerts" section to plugins to "Other User Activity"
|
937 |
-
* Added the files alerts (uploaded / delete files) to the "Enable/Disable Alerts" (previously unavailable)
|
938 |
-
|
939 |
-
* **Bug Fixes**
|
940 |
-
* Fixed issue where all users were able to see the Dashboard widgets with security alerts - now restricted only to users who have access to the plugin
|
941 |
-
* Fixed user reported issue (http://wordpress.org/support/topic/errors-on-enabledisable-alerts-page)
|
942 |
-
|
943 |
-
= 0.4 (2013-10-09) =
|
944 |
-
* **New WordPress Security Alerts for Custom Post Types**
|
945 |
-
* Alert 2029: New post with custom post type created and saved as draft
|
946 |
-
* Alert 2030: Post with custom post type is publishes
|
947 |
-
* Alert 2031: A published post with custom post type is modified
|
948 |
-
* Alert 2032: A draft post with custom post type is modified
|
949 |
-
* Alert 2033: A post with custom post type was permanently deleted
|
950 |
-
* Alert 2034: A post with custom post type was moved to trash
|
951 |
-
* Alert 2035: A post with custom post type was restored from trash
|
952 |
-
* Alert 2036: The category of a post with custom post type was changed
|
953 |
-
* Alert 2037: The URL of a post with custom post type was changed
|
954 |
-
* Alert 2038: The author of a post with custom post type was changed
|
955 |
-
* Alert 2039: The status of a post with custom post type was changed
|
956 |
-
* Alert 2040: The visibility of a post with custom post type was changed
|
957 |
-
* Alert 2041: The date of a post with custom post type was changed
|
958 |
-
|
959 |
-
* **New Plugin Features**
|
960 |
-
* Enable/Disable Alerts node that allows WordPress administrators to switch on or off specific WordPress security alerts
|
961 |
-
* Dashboard widget that shows the latest 5 WordPress security alerts (widget can be switched on or off from the plugin settings)
|
962 |
-
* Plugin is now language aware and we can accept translations
|
963 |
-
|
964 |
-
* **Plugin Improvements**
|
965 |
-
* Updated settings page to have the same look and feel of WordPress
|
966 |
-
* Improved the upgrade procedure of the plugin
|
967 |
-
* Updated the Audit Log Viewer display to support more resultions such as those of tables and smartphones
|
968 |
-
|
969 |
-
= 0.3 (2019-09-19) =
|
970 |
-
|
971 |
-
* **New WordPress Security Alerts**
|
972 |
-
* Alert 6001: Anyone can Register option in WordPress settings was changed
|
973 |
-
* Alert 6002: Default use role in WordPress settings was changed
|
974 |
-
* Alert 6003: Administrator notification email in WordPress settings was changed
|
975 |
-
* Alert 2025: Visibility of a blog post was changed
|
976 |
-
* Alert 2026: Visibility of a page was changed
|
977 |
-
* Alert 2027: Date of a blog post was changed
|
978 |
-
* Alert 2028: Date of a page was changed
|
979 |
-
|
980 |
-
* **Plugin Improvements**
|
981 |
-
* Links to the Audit Log Viewer and Settings in the plugin summary page
|
982 |
-
* Time of Failed Login alerts now reflects the time of last failed login attempt
|
983 |
-
|
984 |
-
* **Bug Fixes**
|
985 |
-
* Fixed: Incorrect alerts generated when author of page was changed from quick edit mode
|
986 |
-
* Fixed: Conflict with WP Mandrill and other plugins using pluggable.php
|
987 |
-
* Fixed: Incorrect alerts generated when plugin is installed via a zip file / upload method
|
988 |
-
|
989 |
-
= 0.2 (2013-08-12) =
|
990 |
-
|
991 |
-
* Restricted plugin options and WordPress Audit Log Event Viewer only to WordPress administrators
|
992 |
-
* Improved failed logins events (events generated from the same IP, or same username will be grouped to avoid mass flooding of security events)
|
993 |
-
* Security Events pruning now uses wp-cron functionality (improved stability and reliability of events pruning)
|
994 |
-
* Applied several performance improvements (faster loading of events etc)
|
995 |
-
* Added support for permalinks; now events will include page or blog post URL rather than ID
|
996 |
-
* Added new alerts for when a page or blog post status is changed from draft, pending review or published
|
997 |
-
* Added new alert for when a page or blog post URL or author is changed
|
998 |
-
* Added new alert for when a blog post category is changed
|
999 |
-
* Added new alerts for when a user creates or deletes a category
|
1000 |
-
* Added new alert for when the author of a blog post or page is changed
|
1001 |
-
* Added new plugin alerts for when a plugin is installed, uninstalled or upgraded
|
1002 |
-
* Updated navigation menu to use standard WordPress dashboard icons etc
|
1003 |
-
|
1004 |
-
= 0.1 (2013-05-24) =
|
1005 |
-
|
1006 |
-
* Initial beta release of WP Security Audit Log.
|
6 |
License URI: http://www.gnu.org/licenses/gpl.html
|
7 |
Tags: wordpress security plugin, wordpress security audit log, audit log, wordpress log, event log wordpress, wordpress user tracking, wordpress activity log, wordpress audit, security event log, audit trail, security audit trail, wordpress security alerts, wordpress monitor, wordpress security monitor, wordpress admin, wordpress admin monitoring, analytics, activity, admin, multisite, wordpress multisite, actions, dashboard, log, notification, wordpress monitoring, email notification, wordpress email alerts, tracking, user tracking, user activity report, wordpress audit trail
|
8 |
Requires at least: 3.6
|
9 |
+
Tested up to: 4.8.2
|
10 |
+
Stable tag: 2.6.9
|
11 |
|
12 |
Keep an audit trail of all changes and under the hood WordPress activity to ensure productivity and thwart possible WordPress hacker attacks.
|
13 |
|
119 |
* [WPLift](http://wplift.com/audit-wordpress-security-logs) - Review by Ahmad Awais
|
120 |
* [WP SmackDown](https://wpsmackdown.com/wp-plugins/wp-security-audit-log/)
|
121 |
* [WPKube](http://www.wpkube.com/improve-wordpress-security-wp-security-audit-log/)
|
122 |
+
* [KevinMuldoon.com](https://www.kevinmuldoon.com/wp-security-audit-log-review/)
|
123 |
* [Cloudways](https://www.cloudways.com/blog/monitor-wordpress-with-wp-security-audit-log-plugin/)
|
124 |
* [ManageWP Plugins of the month](https://managewp.com/free-wordpress-plugins-june-2014)
|
125 |
* [MyWPExpert](http://www.mywpexpert.com/wp-security-audit-log/)
|
143 |
* Italian translation by [Leonardo Musumeci](http://leonardomusumeci.net/)
|
144 |
* German translation by [Mourad Louha](http://excel-translator.de)
|
145 |
* Spanish translation by the [WP Body team](https://wpbody.com/)
|
146 |
+
* French translations by Denis Moscato
|
147 |
|
148 |
= Related Links and Documentation =
|
149 |
For more information and to get started with WordPress Security, check out the following:
|
190 |
|
191 |
== Changelog ==
|
192 |
|
193 |
+
= 2.6.9 (2017-10-24) =
|
194 |
|
195 |
+
* **New Audit Trail Alerts for logging of Tag changes**
|
196 |
+
* Alert 2119: User added tag to a post
|
197 |
+
* Alert 2120: User removed a tag from a post
|
198 |
+
* Alert 2121: User added new tag on WordPress
|
199 |
+
* Alert 2122: User deleted a tag from WordPress
|
200 |
+
* Alert 2123: User renamed a tag
|
201 |
+
* Alert 2124: User changed the slug of a tag
|
202 |
+
* Alert 2125: User changed the description of a tag
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
|
204 |
+
* **New Audit Trail Alerts for logging of User Profile Changes**
|
205 |
+
* Alert 4017: Changed the first name of a user
|
206 |
+
* Alert 4018: Changed the last name of a user
|
207 |
+
* Alert 4019: Changed the nickname of a user
|
208 |
+
* Alert 4020: Changed the display name of a user
|
209 |
|
210 |
+
* **New Functionality**
|
211 |
+
* New hover over option to modify alerts' behaviour. This applies to alerts that have configuration such as 1002, 1003, 6007 and 6023.
|
212 |
+
* Option to record referrer URL in log file when logging 404 errors to a log file.
|
213 |
+
* Option to specify how many failed logins the plugin should log.
|
214 |
+
* Option to capture the usernames used during failed login attempts with non WordPress users.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
215 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
216 |
* **Improvements**
|
217 |
+
* Drop down menu to select number of alerts to display in Audit Log Viewer now has only fixed numbers.
|
218 |
+
* Renamed first column to Alert ID (standardising text in plugin)
|
219 |
+
* New French translation by Denis Moscato
|
|
|
|
|
|
|
|
|
|
|
220 |
|
221 |
+
Refer to the [WP Security Audit Log change log on the plugin page](https://www.wpsecurityauditlog.com/plugin-change-log/) for a complete changelog.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wp-security-audit-log.php
CHANGED
@@ -4,7 +4,7 @@ Plugin Name: WP Security Audit Log
|
|
4 |
Plugin URI: http://www.wpsecurityauditlog.com/
|
5 |
Description: Identify WordPress security issues before they become a problem. Keep track of everything happening on your WordPress including WordPress users activity. Similar to Windows Event Log and Linux Syslog, WP Security Audit Log generates a security alert for everything that happens on your WordPress blogs and websites. Use the Audit Log Viewer included in the plugin to see all the security alerts.
|
6 |
Author: WP White Security
|
7 |
-
Version: 2.6.
|
8 |
Text Domain: wp-security-audit-log
|
9 |
Author URI: http://www.wpsecurityauditlog.com/
|
10 |
License: GPL2
|
@@ -36,7 +36,7 @@ class WpSecurityAuditLog {
|
|
36 |
*
|
37 |
* @var string
|
38 |
*/
|
39 |
-
public $version = '2.6.
|
40 |
|
41 |
// Plugin constants.
|
42 |
const PLG_CLS_PRFX = 'WSAL_';
|
4 |
Plugin URI: http://www.wpsecurityauditlog.com/
|
5 |
Description: Identify WordPress security issues before they become a problem. Keep track of everything happening on your WordPress including WordPress users activity. Similar to Windows Event Log and Linux Syslog, WP Security Audit Log generates a security alert for everything that happens on your WordPress blogs and websites. Use the Audit Log Viewer included in the plugin to see all the security alerts.
|
6 |
Author: WP White Security
|
7 |
+
Version: 2.6.9
|
8 |
Text Domain: wp-security-audit-log
|
9 |
Author URI: http://www.wpsecurityauditlog.com/
|
10 |
License: GPL2
|
36 |
*
|
37 |
* @var string
|
38 |
*/
|
39 |
+
public $version = '2.6.9';
|
40 |
|
41 |
// Plugin constants.
|
42 |
const PLG_CLS_PRFX = 'WSAL_';
|