Version Description
(2016-11-09) =
-
Plugin Improvement (Standardized all date & time formats and timezone)
- Plugin now uses the time & date format configured in WordPress (removed the option from plugin that override this).
- Updated all the Premium Add-Ons to use the time & date format configured in WordPress.
- Changed the Request Log file extension to php and disabled execution (before it was log, hence users could guess it)
-
Bug Fixes
- Fixed a problem with restricting users' access to the plugin (support ticket).
- Fixed a bug in the custom alerts - previously custom alerts were overwritten during upgrade. Updated custom alerts documentation as well.
Download this release
Release Info
Developer | WPWhiteSecurity |
Plugin | WP Security Audit Log |
Version | 2.5.8 |
Comparing to | |
See all releases |
Code changes from version 2.5.7 to 2.5.8
- classes/AuditLogListView.php +3 -4
- classes/Autoloader.php +65 -65
- classes/Connector/MySQLDB.php +2 -2
- classes/Connector/MySQLDBConnector.php +0 -337
- classes/SensorManager.php +62 -47
- classes/Sensors/CustomHooks.php +0 -49
- classes/Sensors/Request.php +2 -2
- classes/Settings.php +48 -22
- classes/Views/Settings.php +16 -30
- css/settings.css +1 -1
- js/settings.js +16 -13
- languages/wp-security-audit-log.pot +90 -97
- readme.txt +15 -2
- wp-security-audit-log.php +1 -2
classes/AuditLogListView.php
CHANGED
@@ -187,9 +187,8 @@ class WSAL_AuditLogListView extends WP_List_Table
|
|
187 |
public function column_default($item, $column_name)
|
188 |
{
|
189 |
//example: $item->getMetaValue('CurrentUserID')
|
190 |
-
|
191 |
-
|
192 |
-
else $datetimeFormat = 'H:i:s.$$$';
|
193 |
switch ($column_name) {
|
194 |
case 'read':
|
195 |
return '<span class="log-read log-read-'
|
@@ -209,7 +208,7 @@ class WSAL_AuditLogListView extends WP_List_Table
|
|
209 |
str_replace(
|
210 |
'$$$',
|
211 |
substr(number_format(fmod($item->created_on + $this->_gmt_offset_sec, 1), 3), 2),
|
212 |
-
date(
|
213 |
)
|
214 |
) : '<i>unknown</i>';
|
215 |
case 'user':
|
187 |
public function column_default($item, $column_name)
|
188 |
{
|
189 |
//example: $item->getMetaValue('CurrentUserID')
|
190 |
+
$datetimeFormat = $this->_plugin->settings->GetDatetimeFormat();
|
191 |
+
|
|
|
192 |
switch ($column_name) {
|
193 |
case 'read':
|
194 |
return '<span class="log-read log-read-'
|
208 |
str_replace(
|
209 |
'$$$',
|
210 |
substr(number_format(fmod($item->created_on + $this->_gmt_offset_sec, 1), 3), 2),
|
211 |
+
date($datetimeFormat, $item->created_on + $this->_gmt_offset_sec)
|
212 |
)
|
213 |
) : '<i>unknown</i>';
|
214 |
case 'user':
|
classes/Autoloader.php
CHANGED
@@ -1,69 +1,69 @@
|
|
1 |
<?php
|
2 |
|
3 |
class WSAL_Autoloader {
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
}
|
1 |
<?php
|
2 |
|
3 |
class WSAL_Autoloader {
|
4 |
+
/**
|
5 |
+
* @var WpSecurityAuditLog
|
6 |
+
*/
|
7 |
+
protected $plugin;
|
8 |
+
|
9 |
+
protected $paths = array();
|
10 |
+
|
11 |
+
public function __construct(WpSecurityAuditLog $plugin){
|
12 |
+
$this->plugin = $plugin;
|
13 |
+
|
14 |
+
// register autoloader
|
15 |
+
spl_autoload_register(array($this, 'LoadClass'));
|
16 |
+
}
|
17 |
+
|
18 |
+
public function Register($prefix, $path){
|
19 |
+
if(!isset($this->paths[$prefix]))
|
20 |
+
$this->paths[$prefix] = array();
|
21 |
+
$this->paths[$prefix][] = rtrim(str_replace('\\', '/', $path), '/') . '/';
|
22 |
+
}
|
23 |
+
|
24 |
+
/**
|
25 |
+
* This is the class autoloader. You should not call this directly.
|
26 |
+
* @param string $class Class name.
|
27 |
+
* @return boolean True if class is found and loaded, false otherwise.
|
28 |
+
*/
|
29 |
+
public function LoadClass($class){
|
30 |
+
foreach($this->paths as $prefix => $paths){
|
31 |
+
foreach($paths as $path){
|
32 |
+
if(strstr($class, $prefix) !== false){
|
33 |
+
$file = $path . str_replace('_', DIRECTORY_SEPARATOR, substr($class, strlen($prefix))) . '.php';
|
34 |
+
if(file_exists($file)){
|
35 |
+
$s = $this->plugin->profiler->Start('Autoload ' . basename($file));
|
36 |
+
require_once($file);
|
37 |
+
$s->Stop();
|
38 |
+
return class_exists($class, false) || interface_exists($class, false);
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
return false;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Returns the class name of a particular file that contains the class.
|
49 |
+
* @param string $file File name.
|
50 |
+
* @return string|false Class name or false on error.
|
51 |
+
*/
|
52 |
+
public function GetClassFileClassName($file){
|
53 |
+
$file = str_replace('\\', '/', $file); // win/dos hotfix
|
54 |
+
|
55 |
+
foreach($this->paths as $prefix => $paths){
|
56 |
+
foreach($paths as $path){
|
57 |
+
if(strstr($file, $path) !== false){
|
58 |
+
return str_replace(
|
59 |
+
array($path, '/'),
|
60 |
+
array($prefix, '_'),
|
61 |
+
substr($file, 0, -4) // remove '.php'
|
62 |
+
);
|
63 |
+
}
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
return false;
|
68 |
+
}
|
69 |
}
|
classes/Connector/MySQLDB.php
CHANGED
@@ -13,7 +13,7 @@ class WSAL_Connector_MySQLDB extends WSAL_Connector_AbstractConnector implements
|
|
13 |
|
14 |
public function TestConnection()
|
15 |
{
|
16 |
-
error_reporting(E_ALL ^ E_WARNING);
|
17 |
$connectionConfig = $this->connectionConfig;
|
18 |
$password = $this->decryptString($connectionConfig['password']);
|
19 |
$newWpdb = new wpdbCustom($connectionConfig['user'], $password, $connectionConfig['name'], $connectionConfig['hostname']);
|
@@ -306,7 +306,7 @@ class WSAL_Connector_MySQLDB extends WSAL_Connector_AbstractConnector implements
|
|
306 |
return $ciphertext_base64;
|
307 |
}
|
308 |
|
309 |
-
|
310 |
{
|
311 |
$ciphertext_dec = base64_decode($ciphertext_base64);
|
312 |
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
|
13 |
|
14 |
public function TestConnection()
|
15 |
{
|
16 |
+
error_reporting(E_ALL ^ (E_NOTICE | E_WARNING | E_DEPRECATED));
|
17 |
$connectionConfig = $this->connectionConfig;
|
18 |
$password = $this->decryptString($connectionConfig['password']);
|
19 |
$newWpdb = new wpdbCustom($connectionConfig['user'], $password, $connectionConfig['name'], $connectionConfig['hostname']);
|
306 |
return $ciphertext_base64;
|
307 |
}
|
308 |
|
309 |
+
public function decryptString($ciphertext_base64)
|
310 |
{
|
311 |
$ciphertext_dec = base64_decode($ciphertext_base64);
|
312 |
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
|
classes/Connector/MySQLDBConnector.php
DELETED
@@ -1,337 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
//require_once('ConnectorInterface.php');
|
3 |
-
//require_once('AbstractConnector.php');
|
4 |
-
//require_once('wp-db-custom.php');
|
5 |
-
|
6 |
-
class WSAL_Connector_MySQLDB extends WSAL_Connector_AbstractConnector implements WSAL_Connector_ConnectorInterface
|
7 |
-
{
|
8 |
-
protected $connectionConfig = null;
|
9 |
-
|
10 |
-
public function __construct($connectionConfig = null)
|
11 |
-
{
|
12 |
-
$this->connectionConfig = $connectionConfig;
|
13 |
-
parent::__construct("MySQL");
|
14 |
-
require_once($this->getAdaptersDirectory() . '/OptionAdapter.php');
|
15 |
-
}
|
16 |
-
|
17 |
-
public function TestConnection()
|
18 |
-
{
|
19 |
-
error_reporting(E_ALL ^ E_WARNING);
|
20 |
-
$connectionConfig = $this->connectionConfig;
|
21 |
-
$password = $this->decryptString($connectionConfig['password']);
|
22 |
-
$newWpdb = new wpdbCustom($connectionConfig['user'], $password, $connectionConfig['name'], $connectionConfig['hostname']);
|
23 |
-
if (!$newWpdb->has_connected) { // Database Error
|
24 |
-
throw new Exception("Connection failed. Please check your connection details.");
|
25 |
-
}
|
26 |
-
}
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Creates a connection and returns it
|
30 |
-
* @return Instance of WPDB
|
31 |
-
*/
|
32 |
-
private function createConnection()
|
33 |
-
{
|
34 |
-
if (!empty($this->connectionConfig)) {
|
35 |
-
//TO DO: Use the provided connection config
|
36 |
-
$connectionConfig = $this->connectionConfig;
|
37 |
-
$password = $this->decryptString($connectionConfig['password']);
|
38 |
-
$newWpdb = new wpdb($connectionConfig['user'], $password, $connectionConfig['name'], $connectionConfig['hostname']);
|
39 |
-
$newWpdb->set_prefix($connectionConfig['base_prefix']);
|
40 |
-
return $newWpdb;
|
41 |
-
} else {
|
42 |
-
global $wpdb;
|
43 |
-
return $wpdb;
|
44 |
-
}
|
45 |
-
}
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Returns a wpdb instance
|
49 |
-
*/
|
50 |
-
public function getConnection()
|
51 |
-
{
|
52 |
-
if (!empty($this->connection)) {
|
53 |
-
return $this->connection;
|
54 |
-
} else {
|
55 |
-
$this->connection = $this->createConnection();
|
56 |
-
return $this->connection;
|
57 |
-
}
|
58 |
-
}
|
59 |
-
|
60 |
-
/**
|
61 |
-
* Gets an adapter for the specified model
|
62 |
-
*/
|
63 |
-
public function getAdapter($class_name)
|
64 |
-
{
|
65 |
-
$objName = $this->getAdapterClassName($class_name);
|
66 |
-
return new $objName($this->getConnection());
|
67 |
-
}
|
68 |
-
|
69 |
-
protected function getAdapterClassName($class_name)
|
70 |
-
{
|
71 |
-
return 'WSAL_Adapters_MySQL_'.$class_name;
|
72 |
-
}
|
73 |
-
|
74 |
-
/**
|
75 |
-
* Checks if the necessary tables are available
|
76 |
-
*/
|
77 |
-
public function isInstalled()
|
78 |
-
{
|
79 |
-
global $wpdb;
|
80 |
-
$table = $wpdb->base_prefix . 'wsal_occurrences';
|
81 |
-
return ($wpdb->get_var('SHOW TABLES LIKE "'.$table.'"') == $table);
|
82 |
-
}
|
83 |
-
|
84 |
-
/**
|
85 |
-
* Checks if old version tables are available
|
86 |
-
*/
|
87 |
-
public function canMigrate()
|
88 |
-
{
|
89 |
-
$wpdb = $this->getConnection();
|
90 |
-
$table = $wpdb->base_prefix . 'wordpress_auditlog_events';
|
91 |
-
return ($wpdb->get_var('SHOW TABLES LIKE "'.$table.'"') == $table);
|
92 |
-
}
|
93 |
-
|
94 |
-
/**
|
95 |
-
* Install all DB tables.
|
96 |
-
*/
|
97 |
-
public function installAll($excludeOptions = false)
|
98 |
-
{
|
99 |
-
$plugin = WpSecurityAuditLog::GetInstance();
|
100 |
-
|
101 |
-
foreach (glob($this->getAdaptersDirectory() . DIRECTORY_SEPARATOR . '*.php') as $file) {
|
102 |
-
$filePath = explode(DIRECTORY_SEPARATOR, $file);
|
103 |
-
$fileName = $filePath[count($filePath) - 1];
|
104 |
-
$className = $this->getAdapterClassName(str_replace("Adapter.php", "", $fileName));
|
105 |
-
|
106 |
-
$class = new $className($this->getConnection());
|
107 |
-
if ($excludeOptions && $class instanceof WSAL_Adapters_MySQL_Option) {
|
108 |
-
continue;
|
109 |
-
}
|
110 |
-
|
111 |
-
if (is_subclass_of($class, "WSAL_Adapters_MySQL_ActiveRecord")) {
|
112 |
-
$class->Install();
|
113 |
-
}
|
114 |
-
}
|
115 |
-
}
|
116 |
-
|
117 |
-
/**
|
118 |
-
* Uninstall all DB tables.
|
119 |
-
*/
|
120 |
-
public function uninstallAll()
|
121 |
-
{
|
122 |
-
$plugin = WpSecurityAuditLog::GetInstance();
|
123 |
-
|
124 |
-
foreach (glob($this->getAdaptersDirectory() . DIRECTORY_SEPARATOR . '*.php') as $file) {
|
125 |
-
$filePath = explode(DIRECTORY_SEPARATOR, $file);
|
126 |
-
$fileName = $filePath[count($filePath) - 1];
|
127 |
-
$className = $this->getAdapterClassName(str_replace("Adapter.php", "", $fileName));
|
128 |
-
|
129 |
-
$class = new $className($this->getConnection());
|
130 |
-
if (is_subclass_of($class, "WSAL_Adapters_MySQL_ActiveRecord")) {
|
131 |
-
$class->Uninstall();
|
132 |
-
}
|
133 |
-
}
|
134 |
-
}
|
135 |
-
|
136 |
-
private function GetIncreaseOccurrence()
|
137 |
-
{
|
138 |
-
$_wpdb = $this->getConnection();
|
139 |
-
$occurrenceNew = new WSAL_Adapters_MySQL_Occurrence($_wpdb);
|
140 |
-
$sql = 'SELECT MAX(id) FROM ' . $occurrenceNew->GetTable();
|
141 |
-
return (int)$_wpdb->get_var($sql);
|
142 |
-
}
|
143 |
-
|
144 |
-
public function MigrateMeta($index, $limit)
|
145 |
-
{
|
146 |
-
$result = null;
|
147 |
-
$offset = ($index * $limit);
|
148 |
-
global $wpdb;
|
149 |
-
$_wpdb = $this->getConnection();
|
150 |
-
// Add +1 because an alert is generated after delete the metadata table
|
151 |
-
$increase_occurrence_id = $this->GetIncreaseOccurrence() + 1;
|
152 |
-
|
153 |
-
// Load data Meta from WP
|
154 |
-
$meta = new WSAL_Adapters_MySQL_Meta($wpdb);
|
155 |
-
if (!$meta->IsInstalled()) {
|
156 |
-
$result['empty'] = true;
|
157 |
-
return $result;
|
158 |
-
}
|
159 |
-
$sql = 'SELECT * FROM ' . $meta->GetWPTable() . ' LIMIT ' . $limit . ' OFFSET '. $offset;
|
160 |
-
$metadata = $wpdb->get_results($sql, ARRAY_A);
|
161 |
-
|
162 |
-
// Insert data to External DB
|
163 |
-
if (!empty($metadata)) {
|
164 |
-
$metaNew = new WSAL_Adapters_MySQL_Meta($_wpdb);
|
165 |
-
|
166 |
-
$index++;
|
167 |
-
$sql = 'INSERT INTO ' . $metaNew->GetTable() . ' (occurrence_id, name, value) VALUES ' ;
|
168 |
-
foreach ($metadata as $entry) {
|
169 |
-
$occurrence_id = intval($entry['occurrence_id']) + $increase_occurrence_id;
|
170 |
-
$sql .= '('.$occurrence_id.', \''.$entry['name'].'\', \''.str_replace("'", "\'", $entry['value']).'\'), ';
|
171 |
-
}
|
172 |
-
$sql = rtrim($sql, ", ");
|
173 |
-
$_wpdb->query($sql);
|
174 |
-
|
175 |
-
$result['complete'] = false;
|
176 |
-
} else {
|
177 |
-
$result['complete'] = true;
|
178 |
-
$this->DeleteAfterMigrate($meta);
|
179 |
-
}
|
180 |
-
$result['index'] = $index;
|
181 |
-
return $result;
|
182 |
-
}
|
183 |
-
|
184 |
-
public function MigrateOccurrence($index, $limit)
|
185 |
-
{
|
186 |
-
$result = null;
|
187 |
-
$offset = ($index * $limit);
|
188 |
-
global $wpdb;
|
189 |
-
$_wpdb = $this->getConnection();
|
190 |
-
|
191 |
-
// Load data Occurrences from WP
|
192 |
-
$occurrence = new WSAL_Adapters_MySQL_Occurrence($wpdb);
|
193 |
-
if (!$occurrence->IsInstalled()) {
|
194 |
-
$result['empty'] = true;
|
195 |
-
return $result;
|
196 |
-
}
|
197 |
-
$sql = 'SELECT * FROM ' . $occurrence->GetWPTable() . ' LIMIT ' . $limit . ' OFFSET '. $offset;
|
198 |
-
$occurrences = $wpdb->get_results($sql, ARRAY_A);
|
199 |
-
|
200 |
-
// Insert data to External DB
|
201 |
-
if (!empty($occurrences)) {
|
202 |
-
$occurrenceNew = new WSAL_Adapters_MySQL_Occurrence($_wpdb);
|
203 |
-
|
204 |
-
$index++;
|
205 |
-
$sql = 'INSERT INTO ' . $occurrenceNew->GetTable() . ' (site_id, alert_id, created_on, is_read) VALUES ' ;
|
206 |
-
foreach ($occurrences as $entry) {
|
207 |
-
$sql .= '('.$entry['site_id'].', '.$entry['alert_id'].', '.$entry['created_on'].', '.$entry['is_read'].'), ';
|
208 |
-
}
|
209 |
-
$sql = rtrim($sql, ", ");
|
210 |
-
$_wpdb->query($sql);
|
211 |
-
|
212 |
-
$result['complete'] = false;
|
213 |
-
} else {
|
214 |
-
$result['complete'] = true;
|
215 |
-
$this->DeleteAfterMigrate($occurrence);
|
216 |
-
}
|
217 |
-
$result['index'] = $index;
|
218 |
-
return $result;
|
219 |
-
}
|
220 |
-
|
221 |
-
public function MigrateBackOccurrence($index, $limit)
|
222 |
-
{
|
223 |
-
$result = null;
|
224 |
-
$offset = ($index * $limit);
|
225 |
-
global $wpdb;
|
226 |
-
$_wpdb = $this->getConnection();
|
227 |
-
|
228 |
-
// Load data Occurrences from External DB
|
229 |
-
$occurrence = new WSAL_Adapters_MySQL_Occurrence($_wpdb);
|
230 |
-
if (!$occurrence->IsInstalled()) {
|
231 |
-
$result['empty'] = true;
|
232 |
-
return $result;
|
233 |
-
}
|
234 |
-
$sql = 'SELECT * FROM ' . $occurrence->GetTable() . ' LIMIT ' . $limit . ' OFFSET '. $offset;
|
235 |
-
$occurrences = $_wpdb->get_results($sql, ARRAY_A);
|
236 |
-
|
237 |
-
// Insert data to WP
|
238 |
-
if (!empty($occurrences)) {
|
239 |
-
$occurrenceWP = new WSAL_Adapters_MySQL_Occurrence($wpdb);
|
240 |
-
|
241 |
-
$index++;
|
242 |
-
$sql = 'INSERT INTO ' . $occurrenceWP->GetWPTable() . ' (id, site_id, alert_id, created_on, is_read) VALUES ' ;
|
243 |
-
foreach ($occurrences as $entry) {
|
244 |
-
$sql .= '('.$entry['id'].', '.$entry['site_id'].', '.$entry['alert_id'].', '.$entry['created_on'].', '.$entry['is_read'].'), ';
|
245 |
-
}
|
246 |
-
$sql = rtrim($sql, ", ");
|
247 |
-
$wpdb->query($sql);
|
248 |
-
|
249 |
-
$result['complete'] = false;
|
250 |
-
} else {
|
251 |
-
$result['complete'] = true;
|
252 |
-
}
|
253 |
-
$result['index'] = $index;
|
254 |
-
return $result;
|
255 |
-
}
|
256 |
-
|
257 |
-
public function MigrateBackMeta($index, $limit)
|
258 |
-
{
|
259 |
-
$result = null;
|
260 |
-
$offset = ($index * $limit);
|
261 |
-
global $wpdb;
|
262 |
-
$_wpdb = $this->getConnection();
|
263 |
-
|
264 |
-
// Load data Meta from External DB
|
265 |
-
$meta = new WSAL_Adapters_MySQL_Meta($_wpdb);
|
266 |
-
if (!$meta->IsInstalled()) {
|
267 |
-
$result['empty'] = true;
|
268 |
-
return $result;
|
269 |
-
}
|
270 |
-
$sql = 'SELECT * FROM ' . $meta->GetTable() . ' LIMIT ' . $limit . ' OFFSET '. $offset;
|
271 |
-
$metadata = $_wpdb->get_results($sql, ARRAY_A);
|
272 |
-
|
273 |
-
// Insert data to WP
|
274 |
-
if (!empty($metadata)) {
|
275 |
-
$metaWP = new WSAL_Adapters_MySQL_Meta($wpdb);
|
276 |
-
|
277 |
-
$index++;
|
278 |
-
$sql = 'INSERT INTO ' . $metaWP->GetWPTable() . ' (occurrence_id, name, value) VALUES ' ;
|
279 |
-
foreach ($metadata as $entry) {
|
280 |
-
$sql .= '('.$entry['occurrence_id'].', \''.$entry['name'].'\', \''.str_replace("'", "\'", $entry['value']).'\'), ';
|
281 |
-
}
|
282 |
-
$sql = rtrim($sql, ", ");
|
283 |
-
$wpdb->query($sql);
|
284 |
-
|
285 |
-
$result['complete'] = false;
|
286 |
-
} else {
|
287 |
-
$result['complete'] = true;
|
288 |
-
}
|
289 |
-
$result['index'] = $index;
|
290 |
-
return $result;
|
291 |
-
}
|
292 |
-
|
293 |
-
private function DeleteAfterMigrate($record)
|
294 |
-
{
|
295 |
-
global $wpdb;
|
296 |
-
$sql = 'DROP TABLE IF EXISTS ' . $record->GetTable();
|
297 |
-
$wpdb->query($sql);
|
298 |
-
}
|
299 |
-
|
300 |
-
public function encryptString($plaintext)
|
301 |
-
{
|
302 |
-
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
|
303 |
-
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
|
304 |
-
$key = $this->truncateKey();
|
305 |
-
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_CBC, $iv);
|
306 |
-
$ciphertext = $iv . $ciphertext;
|
307 |
-
$ciphertext_base64 = base64_encode($ciphertext);
|
308 |
-
|
309 |
-
return $ciphertext_base64;
|
310 |
-
}
|
311 |
-
|
312 |
-
private function decryptString($ciphertext_base64)
|
313 |
-
{
|
314 |
-
$ciphertext_dec = base64_decode($ciphertext_base64);
|
315 |
-
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
|
316 |
-
|
317 |
-
$iv_dec = substr($ciphertext_dec, 0, $iv_size);
|
318 |
-
$ciphertext_dec = substr($ciphertext_dec, $iv_size);
|
319 |
-
$key = $this->truncateKey();
|
320 |
-
$plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
|
321 |
-
|
322 |
-
return rtrim($plaintext_dec, "\0");
|
323 |
-
}
|
324 |
-
|
325 |
-
private function truncateKey()
|
326 |
-
{
|
327 |
-
if (!defined('AUTH_KEY')) {
|
328 |
-
return 'x4>Tg@G-Kr6a]o-eJeP^?UO)KW;LbV)I';
|
329 |
-
}
|
330 |
-
$key_size = strlen(AUTH_KEY);
|
331 |
-
if ($key_size > 32) {
|
332 |
-
return substr(AUTH_KEY, 0, 32);
|
333 |
-
} else {
|
334 |
-
return AUTH_KEY;
|
335 |
-
}
|
336 |
-
}
|
337 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/SensorManager.php
CHANGED
@@ -1,50 +1,65 @@
|
|
1 |
<?php
|
2 |
|
3 |
final class WSAL_SensorManager extends WSAL_AbstractSensor {
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
|
3 |
final class WSAL_SensorManager extends WSAL_AbstractSensor {
|
4 |
+
|
5 |
+
/**
|
6 |
+
* @var WSAL_AbstractSensor[]
|
7 |
+
*/
|
8 |
+
protected $sensors = array();
|
9 |
+
|
10 |
+
public function __construct(WpSecurityAuditLog $plugin) {
|
11 |
+
parent::__construct($plugin);
|
12 |
+
|
13 |
+
foreach (glob(dirname(__FILE__) . '/Sensors/*.php') as $file) {
|
14 |
+
$this->AddFromFile($file);
|
15 |
+
}
|
16 |
+
/**
|
17 |
+
* Load Custom Sensor files from /wp-content/uploads/wp-security-audit-log/custom-sensors/
|
18 |
+
*/
|
19 |
+
$upload_dir = wp_upload_dir();
|
20 |
+
$uploadsDirPath = trailingslashit($upload_dir['basedir']) . 'wp-security-audit-log' . DIRECTORY_SEPARATOR . 'custom-sensors' . DIRECTORY_SEPARATOR;
|
21 |
+
// Check directory
|
22 |
+
if (is_dir($uploadsDirPath) && is_readable($uploadsDirPath)) {
|
23 |
+
foreach (glob($uploadsDirPath . '*.php') as $file) {
|
24 |
+
require_once($file);
|
25 |
+
$file = substr($file, 0, -4);
|
26 |
+
$class = "WSAL_Sensors_" . str_replace($uploadsDirPath, '', $file);
|
27 |
+
$this->AddFromClass($class);
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
public function HookEvents() {
|
33 |
+
foreach ($this->sensors as $sensor) {
|
34 |
+
$sensor->HookEvents();
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
38 |
+
public function GetSensors() {
|
39 |
+
return $this->sensors;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Add new sensor from file inside autoloader path.
|
44 |
+
* @param string $file Path to file.
|
45 |
+
*/
|
46 |
+
public function AddFromFile($file) {
|
47 |
+
$this->AddFromClass($this->plugin->GetClassFileClassName($file));
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Add new sensor given class name.
|
52 |
+
* @param string $class Class name.
|
53 |
+
*/
|
54 |
+
public function AddFromClass($class) {
|
55 |
+
$this->AddInstance(new $class($this->plugin));
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Add newly created sensor to list.
|
60 |
+
* @param WSAL_AbstractSensor $sensor The new sensor.
|
61 |
+
*/
|
62 |
+
public function AddInstance(WSAL_AbstractSensor $sensor) {
|
63 |
+
$this->sensors[] = $sensor;
|
64 |
+
}
|
65 |
+
}
|
classes/Sensors/CustomHooks.php
DELETED
@@ -1,49 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The Class is used to allow developers to create
|
4 |
-
* custom alerts
|
5 |
-
*/
|
6 |
-
class WSAL_Sensors_CustomHooks extends WSAL_AbstractSensor
|
7 |
-
{
|
8 |
-
public function HookEvents()
|
9 |
-
{
|
10 |
-
/**
|
11 |
-
* Use add_action() for every hook and pass the following:
|
12 |
-
* @param string sample_hook_name
|
13 |
-
* @param string SampleFunction - the name of the function above
|
14 |
-
* @param int 10 - priority (Optional)
|
15 |
-
* @param int 2 - number of parameters passed to the function (Optional)(Check the hook documentation)
|
16 |
-
* @see http://adambrown.info/p/wp_hooks for more information on WordPress hooks
|
17 |
-
*/
|
18 |
-
add_action('sample_hook_name', array($this, 'SampleFunction'), 10, 2);
|
19 |
-
}
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Sample function with 0 or more parameters.
|
23 |
-
* Create one function for each hook:
|
24 |
-
* @param anyType $paramname (Optional)
|
25 |
-
*/
|
26 |
-
public function SampleFunction($value_1 = null, $value_2 = null)
|
27 |
-
{
|
28 |
-
/**
|
29 |
-
* @var int (4 digit) $alertCode Alert code (3 types of criticality level)
|
30 |
-
* @example Critical 2222, Warning 3333, Notice 4444
|
31 |
-
*/
|
32 |
-
$alertCode = 2222;
|
33 |
-
|
34 |
-
/**
|
35 |
-
* @var string: the alert text
|
36 |
-
*/
|
37 |
-
$alertText = 'Sample alert text';
|
38 |
-
|
39 |
-
/**
|
40 |
-
* @var array $variables used in the alert (With 1 or more elements)
|
41 |
-
* { @var string $alertText }
|
42 |
-
*/
|
43 |
-
$variables = array(
|
44 |
-
'CustomAlertText' => $alertText
|
45 |
-
);
|
46 |
-
|
47 |
-
$this->plugin->alerts->Trigger($alertCode, $variables);
|
48 |
-
}
|
49 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/Sensors/Request.php
CHANGED
@@ -17,7 +17,7 @@ class WSAL_Sensors_Request extends WSAL_AbstractSensor
|
|
17 |
wp_mkdir_p($uploadsDirPath);
|
18 |
}
|
19 |
|
20 |
-
$file = $uploadsDirPath . 'Request.log';
|
21 |
|
22 |
$line = '['.date('Y-m-d H:i:s').'] '
|
23 |
. $_SERVER['REQUEST_METHOD'] . ' '
|
@@ -26,7 +26,7 @@ class WSAL_Sensors_Request extends WSAL_AbstractSensor
|
|
26 |
. (!empty(self::$envvars) ? str_pad(PHP_EOL, 24) . json_encode(self::$envvars) : '')
|
27 |
. PHP_EOL;
|
28 |
|
29 |
-
if (!file_exists($file) && !file_put_contents($file, '
|
30 |
return $this->LogError('Could not initialize request log file', array('file' => $file));
|
31 |
}
|
32 |
|
17 |
wp_mkdir_p($uploadsDirPath);
|
18 |
}
|
19 |
|
20 |
+
$file = $uploadsDirPath . 'Request.log.php';
|
21 |
|
22 |
$line = '['.date('Y-m-d H:i:s').'] '
|
23 |
. $_SERVER['REQUEST_METHOD'] . ' '
|
26 |
. (!empty(self::$envvars) ? str_pad(PHP_EOL, 24) . json_encode(self::$envvars) : '')
|
27 |
. PHP_EOL;
|
28 |
|
29 |
+
if (!file_exists($file) && !file_put_contents($file, '<'.'?php die(\'Access Denied\'); ?>' . PHP_EOL)) {
|
30 |
return $this->LogError('Could not initialize request log file', array('file' => $file));
|
31 |
}
|
32 |
|
classes/Settings.php
CHANGED
@@ -329,9 +329,9 @@ class WSAL_Settings {
|
|
329 |
* @param string $action Type of action.
|
330 |
* @return string[] List of tokens (usernames, roles etc).
|
331 |
*/
|
332 |
-
public function GetAccessTokens($action){
|
333 |
$allowed = array();
|
334 |
-
switch($action){
|
335 |
case 'view':
|
336 |
$allowed = $this->GetAllowedPluginViewers();
|
337 |
$allowed = array_merge($allowed, $this->GetAllowedPluginEditors());
|
@@ -343,18 +343,16 @@ class WSAL_Settings {
|
|
343 |
case 'edit':
|
344 |
$allowed = $this->GetAllowedPluginEditors();
|
345 |
if (!$this->IsRestrictAdmins()) {
|
346 |
-
$allowed = array_merge($allowed, $this->_plugin->IsMultisite() ?
|
347 |
-
$this->GetSuperAdmins() : $this->GetAdmins()
|
348 |
-
);
|
349 |
}
|
350 |
break;
|
351 |
default:
|
352 |
throw new Exception('Unknown action "'.$action.'".');
|
353 |
}
|
354 |
if (!$this->IsRestrictAdmins()) {
|
355 |
-
if(is_multisite()){
|
356 |
$allowed = array_merge($allowed, get_super_admins());
|
357 |
-
}else{
|
358 |
$allowed[] = 'administrator';
|
359 |
}
|
360 |
}
|
@@ -365,15 +363,14 @@ class WSAL_Settings {
|
|
365 |
* @param string $action Type of action, either 'view' or 'edit'.
|
366 |
* @return boolean If user has access or not.
|
367 |
*/
|
368 |
-
public function UserCan($user, $action){
|
369 |
-
if(is_int($user))
|
|
|
|
|
370 |
$allowed = $this->GetAccessTokens($action);
|
371 |
-
$check = array_merge(
|
372 |
-
|
373 |
-
|
374 |
-
);
|
375 |
-
foreach($check as $item){
|
376 |
-
if(in_array($item, $allowed)){
|
377 |
return true;
|
378 |
}
|
379 |
}
|
@@ -387,7 +384,7 @@ class WSAL_Settings {
|
|
387 |
|
388 |
public function IsLoginSuperAdmin($username){
|
389 |
$userId = username_exists($username);
|
390 |
-
if (
|
391 |
else return false;
|
392 |
}
|
393 |
|
@@ -582,15 +579,44 @@ class WSAL_Settings {
|
|
582 |
}
|
583 |
|
584 |
/**
|
585 |
-
* Datetime
|
586 |
-
* 24 hours or AM/PM
|
587 |
*/
|
588 |
-
public function GetDatetimeFormat(){
|
589 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
590 |
}
|
591 |
|
592 |
-
|
593 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
594 |
}
|
595 |
|
596 |
/**
|
329 |
* @param string $action Type of action.
|
330 |
* @return string[] List of tokens (usernames, roles etc).
|
331 |
*/
|
332 |
+
public function GetAccessTokens($action) {
|
333 |
$allowed = array();
|
334 |
+
switch ($action) {
|
335 |
case 'view':
|
336 |
$allowed = $this->GetAllowedPluginViewers();
|
337 |
$allowed = array_merge($allowed, $this->GetAllowedPluginEditors());
|
343 |
case 'edit':
|
344 |
$allowed = $this->GetAllowedPluginEditors();
|
345 |
if (!$this->IsRestrictAdmins()) {
|
346 |
+
$allowed = array_merge($allowed, $this->_plugin->IsMultisite() ? $this->GetSuperAdmins() : $this->GetAdmins());
|
|
|
|
|
347 |
}
|
348 |
break;
|
349 |
default:
|
350 |
throw new Exception('Unknown action "'.$action.'".');
|
351 |
}
|
352 |
if (!$this->IsRestrictAdmins()) {
|
353 |
+
if (is_multisite()) {
|
354 |
$allowed = array_merge($allowed, get_super_admins());
|
355 |
+
} else {
|
356 |
$allowed[] = 'administrator';
|
357 |
}
|
358 |
}
|
363 |
* @param string $action Type of action, either 'view' or 'edit'.
|
364 |
* @return boolean If user has access or not.
|
365 |
*/
|
366 |
+
public function UserCan($user, $action) {
|
367 |
+
if (is_int($user)) {
|
368 |
+
$user = get_userdata($user);
|
369 |
+
}
|
370 |
$allowed = $this->GetAccessTokens($action);
|
371 |
+
$check = array_merge($user->roles, array($user->user_login));
|
372 |
+
foreach ($check as $item) {
|
373 |
+
if (in_array($item, $allowed)) {
|
|
|
|
|
|
|
374 |
return true;
|
375 |
}
|
376 |
}
|
384 |
|
385 |
public function IsLoginSuperAdmin($username){
|
386 |
$userId = username_exists($username);
|
387 |
+
if (function_exists('is_super_admin') && is_super_admin($userId) ) return true;
|
388 |
else return false;
|
389 |
}
|
390 |
|
579 |
}
|
580 |
|
581 |
/**
|
582 |
+
* Datetime used in the Alerts.
|
|
|
583 |
*/
|
584 |
+
public function GetDatetimeFormat($lineBreak = true) {
|
585 |
+
if ($lineBreak) {
|
586 |
+
$date_time_format = $this->GetDateFormat() . '<\b\r>' . $this->GetTimeFormat();
|
587 |
+
} else {
|
588 |
+
$date_time_format = $this->GetDateFormat() . ' ' . $this->GetTimeFormat();
|
589 |
+
}
|
590 |
+
|
591 |
+
$wp_time_format = get_option('time_format');
|
592 |
+
if (stripos($wp_time_format, 'A') !== false) {
|
593 |
+
$date_time_format .= '.$$$&\n\b\s\p;A';
|
594 |
+
} else {
|
595 |
+
$date_time_format .= '.$$$';
|
596 |
+
}
|
597 |
+
return $date_time_format;
|
598 |
}
|
599 |
|
600 |
+
/**
|
601 |
+
* Date Format from WordPress General Settings.
|
602 |
+
*/
|
603 |
+
public function GetDateFormat() {
|
604 |
+
$wp_date_format = get_option('date_format');
|
605 |
+
$search = array('F', 'M', 'n', 'j', ' ', '/', 'y', 'S', ',', 'l', 'D');
|
606 |
+
$replace = array('m', 'm', 'm', 'd', '-', '-', 'Y', '', '', '', '');
|
607 |
+
$date_format = str_replace($search, $replace, $wp_date_format);
|
608 |
+
return $date_format;
|
609 |
+
}
|
610 |
+
|
611 |
+
/**
|
612 |
+
* Time Format from WordPress General Settings.
|
613 |
+
*/
|
614 |
+
public function GetTimeFormat() {
|
615 |
+
$wp_time_format = get_option('time_format');
|
616 |
+
$search = array('a', 'A', 'T', ' ');
|
617 |
+
$replace = array('', '', '', '');
|
618 |
+
$time_format = str_replace($search, $replace, $wp_time_format);
|
619 |
+
return $time_format;
|
620 |
}
|
621 |
|
622 |
/**
|
classes/Views/Settings.php
CHANGED
@@ -72,7 +72,6 @@ class WSAL_Views_Settings extends WSAL_AbstractView
|
|
72 |
$this->_plugin->settings->SetIncognito(isset($_REQUEST['Incognito']));
|
73 |
$this->_plugin->settings->SetLoggingDisabled(isset($_REQUEST['Logging']));
|
74 |
$this->_plugin->settings->SetDeleteData(isset($_REQUEST['DeleteData']));
|
75 |
-
$this->_plugin->settings->SetDatetimeFormat($_REQUEST['DatetimeFormat']);
|
76 |
$this->_plugin->settings->SetTimezone($_REQUEST['Timezone']);
|
77 |
$this->_plugin->settings->SetWPBackend(isset($_REQUEST['WPBackend']));
|
78 |
if (!empty($_REQUEST['Columns'])) {
|
@@ -193,16 +192,18 @@ class WSAL_Views_Settings extends WSAL_AbstractView
|
|
193 |
<label for="EnableProxyIpCapture">
|
194 |
<input type="checkbox" name="EnableProxyIpCapture" value="1" id="EnableProxyIpCapture"<?php
|
195 |
if($this->_plugin->settings->IsMainIPFromProxy())echo ' checked="checked"';
|
196 |
-
?>/> <?php _e('WordPress running behind firewall or proxy', 'wp-security-audit-log');
|
197 |
-
<span class="description"><?php _e('Enable this option if your WordPress is running behind a firewall or reverse proxy. When this option is enabled the plugin will retrieve the user\'s IP address from the proxy header.', 'wp-security-audit-log'); ?></span>
|
198 |
</label>
|
199 |
<br/>
|
|
|
|
|
200 |
<label for="EnableIpFiltering">
|
201 |
<input type="checkbox" name="EnableIpFiltering" value="1" id="EnableIpFiltering"<?php
|
202 |
if($this->_plugin->settings->IsInternalIPsFiltered())echo ' checked="checked"';
|
203 |
-
?>/> <?php _e('Filter Internal IP Addresses', 'wp-security-audit-log');
|
204 |
-
|
205 |
-
|
|
|
206 |
</fieldset>
|
207 |
</td>
|
208 |
</tr>
|
@@ -218,11 +219,13 @@ class WSAL_Views_Settings extends WSAL_AbstractView
|
|
218 |
_e('Users and Roles in this list can manage the plugin settings', 'wp-security-audit-log');
|
219 |
?></p>
|
220 |
<div id="EditorList"><?php
|
221 |
-
foreach($this->_plugin->settings->GetAllowedPluginEditors() as $item){
|
222 |
?><span class="sectoken-<?php echo $this->GetTokenType($item); ?>">
|
223 |
<input type="hidden" name="Editors[]" value="<?php echo esc_attr($item); ?>"/>
|
224 |
<?php echo esc_html($item); ?>
|
225 |
-
|
|
|
|
|
226 |
</span><?php
|
227 |
}
|
228 |
?></div>
|
@@ -238,10 +241,12 @@ class WSAL_Views_Settings extends WSAL_AbstractView
|
|
238 |
<label for="RestrictAdmins">
|
239 |
<?php $ira = $this->_plugin->settings->IsRestrictAdmins(); ?>
|
240 |
<input type="checkbox" name="RestrictAdmins" id="RestrictAdmins"<?php if($ira)echo ' checked="checked"'; ?>/>
|
241 |
-
<span class="description">
|
242 |
-
<?php _e('By default all the administrators on this WordPress have access to manage this plugin.<br/>By enabling this option only the users specified in the two options above and your username will have access to view alerts and manage this plugin.', 'wp-security-audit-log'); ?>
|
243 |
-
</span>
|
244 |
</label>
|
|
|
|
|
|
|
|
|
|
|
245 |
</fieldset>
|
246 |
</td>
|
247 |
</tr>
|
@@ -441,25 +446,6 @@ class WSAL_Views_Settings extends WSAL_AbstractView
|
|
441 |
</fieldset>
|
442 |
</td>
|
443 |
</tr>
|
444 |
-
<!-- Alerts Time Format -->
|
445 |
-
<tr>
|
446 |
-
<th><label for="datetime_format_24"><?php _e('Alerts Time Format', 'wp-security-audit-log'); ?></label></th>
|
447 |
-
<td>
|
448 |
-
<fieldset>
|
449 |
-
<?php $datetime = $this->_plugin->settings->GetDatetimeFormat(); ?>
|
450 |
-
<label for="datetime_format_24">
|
451 |
-
<input type="radio" name="DatetimeFormat" id="datetime_format_24" style="margin-top: 2px;" <?php if($datetime)echo 'checked="checked"'; ?> value="1">
|
452 |
-
<span><?php _e('24 hours', 'wp-security-audit-log'); ?></span>
|
453 |
-
</label>
|
454 |
-
<br/>
|
455 |
-
<label for="datetime_format_default">
|
456 |
-
<input type="radio" name="DatetimeFormat" id="datetime_format_default" style="margin-top: 2px;" <?php if(!$datetime)echo 'checked="checked"'; ?> value="0">
|
457 |
-
<span><?php _e('AM/PM', 'wp-security-audit-log'); ?></span>
|
458 |
-
</label>
|
459 |
-
<br/>
|
460 |
-
</fieldset>
|
461 |
-
</td>
|
462 |
-
</tr>
|
463 |
<!-- Alerts Timestamp -->
|
464 |
<tr>
|
465 |
<th><label for="timezone-default"><?php _e('Alerts Timestamp', 'wp-security-audit-log'); ?></label></th>
|
72 |
$this->_plugin->settings->SetIncognito(isset($_REQUEST['Incognito']));
|
73 |
$this->_plugin->settings->SetLoggingDisabled(isset($_REQUEST['Logging']));
|
74 |
$this->_plugin->settings->SetDeleteData(isset($_REQUEST['DeleteData']));
|
|
|
75 |
$this->_plugin->settings->SetTimezone($_REQUEST['Timezone']);
|
76 |
$this->_plugin->settings->SetWPBackend(isset($_REQUEST['WPBackend']));
|
77 |
if (!empty($_REQUEST['Columns'])) {
|
192 |
<label for="EnableProxyIpCapture">
|
193 |
<input type="checkbox" name="EnableProxyIpCapture" value="1" id="EnableProxyIpCapture"<?php
|
194 |
if($this->_plugin->settings->IsMainIPFromProxy())echo ' checked="checked"';
|
195 |
+
?>/> <?php _e('WordPress running behind firewall or proxy', 'wp-security-audit-log'); ?>
|
|
|
196 |
</label>
|
197 |
<br/>
|
198 |
+
<span class="description"><?php _e('Enable this option if your WordPress is running behind a firewall or reverse proxy. When this option is enabled the plugin will retrieve the user\'s IP address from the proxy header.', 'wp-security-audit-log'); ?></span>
|
199 |
+
<br/>
|
200 |
<label for="EnableIpFiltering">
|
201 |
<input type="checkbox" name="EnableIpFiltering" value="1" id="EnableIpFiltering"<?php
|
202 |
if($this->_plugin->settings->IsInternalIPsFiltered())echo ' checked="checked"';
|
203 |
+
?>/> <?php _e('Filter Internal IP Addresses', 'wp-security-audit-log'); ?>
|
204 |
+
</label>
|
205 |
+
<br/>
|
206 |
+
<span class="description"><?php _e('Enable this option to filter internal IP addresses from the proxy headers.', 'wp-security-audit-log'); ?></span>
|
207 |
</fieldset>
|
208 |
</td>
|
209 |
</tr>
|
219 |
_e('Users and Roles in this list can manage the plugin settings', 'wp-security-audit-log');
|
220 |
?></p>
|
221 |
<div id="EditorList"><?php
|
222 |
+
foreach ($this->_plugin->settings->GetAllowedPluginEditors() as $item) {
|
223 |
?><span class="sectoken-<?php echo $this->GetTokenType($item); ?>">
|
224 |
<input type="hidden" name="Editors[]" value="<?php echo esc_attr($item); ?>"/>
|
225 |
<?php echo esc_html($item); ?>
|
226 |
+
<?php if (wp_get_current_user()->user_login != $item) { ?>
|
227 |
+
<a href="javascript:;" title="Remove">×</a>
|
228 |
+
<?php } ?>
|
229 |
</span><?php
|
230 |
}
|
231 |
?></div>
|
241 |
<label for="RestrictAdmins">
|
242 |
<?php $ira = $this->_plugin->settings->IsRestrictAdmins(); ?>
|
243 |
<input type="checkbox" name="RestrictAdmins" id="RestrictAdmins"<?php if($ira)echo ' checked="checked"'; ?>/>
|
|
|
|
|
|
|
244 |
</label>
|
245 |
+
<br/>
|
246 |
+
<span class="description">
|
247 |
+
<?php _e('If this option is disabled all the administrators on this WordPress have access to manage this plugin.', 'wp-security-audit-log'); ?><br/>
|
248 |
+
<?php _e('By enabling this option only <strong>You</strong> and the users specified in the <strong>Can Manage Plugin</strong> and <strong>Can View Alerts</strong> can configure this plugin or view the alerts in the WordPress audit trail.', 'wp-security-audit-log'); ?>
|
249 |
+
</span>
|
250 |
</fieldset>
|
251 |
</td>
|
252 |
</tr>
|
446 |
</fieldset>
|
447 |
</td>
|
448 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
449 |
<!-- Alerts Timestamp -->
|
450 |
<tr>
|
451 |
<th><label for="timezone-default"><?php _e('Alerts Timestamp', 'wp-security-audit-log'); ?></label></th>
|
css/settings.css
CHANGED
@@ -46,7 +46,7 @@
|
|
46 |
display: inline-block;
|
47 |
width: 14px;
|
48 |
text-align: center;
|
49 |
-
line-height:
|
50 |
}
|
51 |
|
52 |
.sectoken-user a:hover,
|
46 |
display: inline-block;
|
47 |
width: 14px;
|
48 |
text-align: center;
|
49 |
+
line-height: 12px;
|
50 |
}
|
51 |
|
52 |
.sectoken-user a:hover,
|
js/settings.js
CHANGED
@@ -44,17 +44,23 @@ jQuery(document).ready(function(){
|
|
44 |
jQuery('#RestrictAdmins').change(function(){
|
45 |
var user = jQuery('#RestrictAdminsDefaultUser').val();
|
46 |
var fltr = function() { return this.value === user; };
|
47 |
-
if (this.checked
|
48 |
-
jQuery('#EditorList').
|
49 |
-
jQuery('
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
}
|
56 |
});
|
57 |
-
|
58 |
|
59 |
var usersUrl = ajaxurl + "?action=AjaxGetAllUsers";
|
60 |
jQuery("#ExUserQueryBox").autocomplete({
|
@@ -66,8 +72,5 @@ jQuery(document).ready(function(){
|
|
66 |
jQuery("#ExRoleQueryBox").autocomplete({
|
67 |
source: rolesUrl,
|
68 |
minLength:1
|
69 |
-
});
|
70 |
-
|
71 |
});
|
72 |
-
|
73 |
-
|
44 |
jQuery('#RestrictAdmins').change(function(){
|
45 |
var user = jQuery('#RestrictAdminsDefaultUser').val();
|
46 |
var fltr = function() { return this.value === user; };
|
47 |
+
if (this.checked) {
|
48 |
+
if (jQuery('#EditorList input').filter(fltr).length === 1) {
|
49 |
+
jQuery('#EditorList .sectoken-user').each(function(){
|
50 |
+
if (jQuery(this).find('input[type=hidden]').val() === user) {
|
51 |
+
jQuery(this).remove();
|
52 |
+
}
|
53 |
+
});
|
54 |
+
}
|
55 |
+
jQuery('#EditorList').append(jQuery('<span class="sectoken-user"/>').text(user).prepend(jQuery('<input type="hidden" name="Editors[]"/>').val(user)));
|
56 |
+
} else if (!this.checked){
|
57 |
+
jQuery('#EditorList .sectoken-user').each(function(){
|
58 |
+
if (jQuery(this).find('input[type=hidden]').val() === user) {
|
59 |
+
jQuery(this).remove();
|
60 |
+
}
|
61 |
+
});
|
62 |
}
|
63 |
});
|
|
|
64 |
|
65 |
var usersUrl = ajaxurl + "?action=AjaxGetAllUsers";
|
66 |
jQuery("#ExUserQueryBox").autocomplete({
|
72 |
jQuery("#ExRoleQueryBox").autocomplete({
|
73 |
source: rolesUrl,
|
74 |
minLength:1
|
75 |
+
});
|
|
|
76 |
});
|
|
|
|
languages/wp-security-audit-log.pot
CHANGED
@@ -2,10 +2,10 @@
|
|
2 |
# This file is distributed under the same license as the WP Security Audit Log package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: WP Security Audit Log 2.5.
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-security-audit-"
|
7 |
"log\n"
|
8 |
-
"POT-Creation-Date: 2016-09
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -63,35 +63,35 @@ msgstr ""
|
|
63 |
msgid "Message"
|
64 |
msgstr ""
|
65 |
|
66 |
-
#: classes/AuditLogListView.php:
|
67 |
msgid "Click to toggle."
|
68 |
msgstr ""
|
69 |
|
70 |
-
#: classes/AuditLogListView.php:
|
71 |
msgid "Unknown error code."
|
72 |
msgstr ""
|
73 |
|
74 |
-
#: classes/AuditLogListView.php:
|
75 |
msgid "Unknown"
|
76 |
msgstr ""
|
77 |
|
78 |
-
#: classes/AuditLogListView.php:
|
79 |
msgid "Plugin"
|
80 |
msgstr ""
|
81 |
|
82 |
-
#: classes/AuditLogListView.php:
|
83 |
msgid "Plugins"
|
84 |
msgstr ""
|
85 |
|
86 |
-
#: classes/AuditLogListView.php:
|
87 |
msgid "Website Visitor"
|
88 |
msgstr ""
|
89 |
|
90 |
-
#: classes/AuditLogListView.php:
|
91 |
msgid "System"
|
92 |
msgstr ""
|
93 |
|
94 |
-
#: classes/AuditLogListView.php:
|
95 |
msgid "Alert Data Inspector"
|
96 |
msgstr ""
|
97 |
|
@@ -237,7 +237,7 @@ msgid "Audit Log Viewer"
|
|
237 |
msgstr ""
|
238 |
|
239 |
#: classes/Views/AuditLog.php:74 classes/Views/Licensing.php:34
|
240 |
-
#: classes/Views/Settings.php:
|
241 |
msgid "You do not have sufficient permissions to access this page."
|
242 |
msgstr ""
|
243 |
|
@@ -464,12 +464,12 @@ msgstr ""
|
|
464 |
msgid "Licensing"
|
465 |
msgstr ""
|
466 |
|
467 |
-
#: classes/Views/Licensing.php:39 classes/Views/Settings.php:
|
468 |
#: classes/Views/ToggleAlerts.php:45
|
469 |
msgid "Settings have been saved."
|
470 |
msgstr ""
|
471 |
|
472 |
-
#: classes/Views/Licensing.php:41 classes/Views/Settings.php:
|
473 |
#: classes/Views/ToggleAlerts.php:47
|
474 |
msgid "Error: "
|
475 |
msgstr ""
|
@@ -529,66 +529,66 @@ msgstr ""
|
|
529 |
msgid "Settings"
|
530 |
msgstr ""
|
531 |
|
532 |
-
#: classes/Views/Settings.php:
|
533 |
msgid "General"
|
534 |
msgstr ""
|
535 |
|
536 |
-
#: classes/Views/Settings.php:
|
537 |
msgid "Audit Log"
|
538 |
msgstr ""
|
539 |
|
540 |
-
#: classes/Views/Settings.php:
|
541 |
msgid "Exclude Objects"
|
542 |
msgstr ""
|
543 |
|
544 |
-
#: classes/Views/Settings.php:
|
545 |
msgid "From Email & Name"
|
546 |
msgstr ""
|
547 |
|
548 |
-
#: classes/Views/Settings.php:
|
549 |
msgid "Email Address"
|
550 |
msgstr ""
|
551 |
|
552 |
-
#: classes/Views/Settings.php:
|
553 |
msgid "Display Name"
|
554 |
msgstr ""
|
555 |
|
556 |
-
#: classes/Views/Settings.php:
|
557 |
msgid ""
|
558 |
"These email address and display name will be used as From details in the "
|
559 |
"emails sent by the %s . Please ensure the mail server can relay emails with "
|
560 |
"the domain of the specified email address."
|
561 |
msgstr ""
|
562 |
|
563 |
-
#: classes/Views/Settings.php:
|
564 |
msgid "(premium add-ons)"
|
565 |
msgstr ""
|
566 |
|
567 |
-
#: classes/Views/Settings.php:
|
568 |
msgid "Alerts Dashboard Widget"
|
569 |
msgstr ""
|
570 |
|
571 |
-
#: classes/Views/Settings.php:
|
572 |
msgid "On"
|
573 |
msgstr ""
|
574 |
|
575 |
-
#: classes/Views/Settings.php:
|
576 |
msgid "Off"
|
577 |
msgstr ""
|
578 |
|
579 |
-
#: classes/Views/Settings.php:
|
580 |
msgid "Display a dashboard widget with the latest %d security alerts."
|
581 |
msgstr ""
|
582 |
|
583 |
-
#: classes/Views/Settings.php:
|
584 |
msgid "Reverse Proxy / Firewall Options"
|
585 |
msgstr ""
|
586 |
|
587 |
-
#: classes/Views/Settings.php:
|
588 |
msgid "WordPress running behind firewall or proxy"
|
589 |
msgstr ""
|
590 |
|
591 |
-
#: classes/Views/Settings.php:
|
592 |
msgid ""
|
593 |
"Enable this option if your WordPress is running behind a firewall or reverse "
|
594 |
"proxy. When this option is enabled the plugin will retrieve the user's IP "
|
@@ -599,193 +599,186 @@ msgstr ""
|
|
599 |
msgid "Filter Internal IP Addresses"
|
600 |
msgstr ""
|
601 |
|
602 |
-
#: classes/Views/Settings.php:
|
603 |
msgid ""
|
604 |
"Enable this option to filter internal IP addresses from the proxy headers."
|
605 |
msgstr ""
|
606 |
|
607 |
-
#: classes/Views/Settings.php:
|
608 |
msgid "Can Manage Plugin"
|
609 |
msgstr ""
|
610 |
|
611 |
-
#: classes/Views/Settings.php:
|
612 |
msgid "Users and Roles in this list can manage the plugin settings"
|
613 |
msgstr ""
|
614 |
|
615 |
-
#: classes/Views/Settings.php:
|
616 |
msgid "Restrict Plugin Access"
|
617 |
msgstr ""
|
618 |
|
619 |
-
#: classes/Views/Settings.php:
|
620 |
msgid ""
|
621 |
-
"
|
622 |
-
"
|
623 |
-
"options above and your username will have access to view alerts and manage "
|
624 |
-
"this plugin."
|
625 |
msgstr ""
|
626 |
|
627 |
-
#: classes/Views/Settings.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
628 |
msgid "Developer Options"
|
629 |
msgstr ""
|
630 |
|
631 |
-
#: classes/Views/Settings.php:
|
632 |
msgid ""
|
633 |
"Only enable these options on testing, staging and development websites. "
|
634 |
"Enabling any of the settings below on LIVE websites may cause unintended "
|
635 |
"side-effects including degraded performance."
|
636 |
msgstr ""
|
637 |
|
638 |
-
#: classes/Views/Settings.php:
|
639 |
msgid "Data Inspector"
|
640 |
msgstr ""
|
641 |
|
642 |
-
#: classes/Views/Settings.php:
|
643 |
msgid "View data logged for each triggered alert."
|
644 |
msgstr ""
|
645 |
|
646 |
-
#: classes/Views/Settings.php:
|
647 |
msgid "Request Log"
|
648 |
msgstr ""
|
649 |
|
650 |
-
#: classes/Views/Settings.php:
|
651 |
msgid "Enables logging request to file."
|
652 |
msgstr ""
|
653 |
|
654 |
-
#: classes/Views/Settings.php:
|
655 |
msgid ""
|
656 |
"The request log file is saved in the /wp-content/uploads/wp-security-audit-"
|
657 |
"log/ directory."
|
658 |
msgstr ""
|
659 |
|
660 |
-
#: classes/Views/Settings.php:
|
661 |
msgid "Hide Plugin in Plugins Page"
|
662 |
msgstr ""
|
663 |
|
664 |
-
#: classes/Views/Settings.php:
|
665 |
msgid "Hide"
|
666 |
msgstr ""
|
667 |
|
668 |
-
#: classes/Views/Settings.php:
|
669 |
msgid ""
|
670 |
"To manually revert this setting set the value of option wsal-hide-plugin to "
|
671 |
"0 in the wp_options table."
|
672 |
msgstr ""
|
673 |
|
674 |
-
#: classes/Views/Settings.php:
|
675 |
msgid "Logging"
|
676 |
msgstr ""
|
677 |
|
678 |
-
#: classes/Views/Settings.php:
|
679 |
msgid "Disable all plugin logging."
|
680 |
msgstr ""
|
681 |
|
682 |
-
#: classes/Views/Settings.php:
|
683 |
msgid "Remove Data on Uninstall"
|
684 |
msgstr ""
|
685 |
|
686 |
-
#: classes/Views/Settings.php:
|
687 |
msgid "Security Alerts Pruning"
|
688 |
msgstr ""
|
689 |
|
690 |
-
#: classes/Views/Settings.php:
|
691 |
msgid "(eg: 1 month)"
|
692 |
msgstr ""
|
693 |
|
694 |
-
#: classes/Views/Settings.php:
|
695 |
msgid "None"
|
696 |
msgstr ""
|
697 |
|
698 |
-
#: classes/Views/Settings.php:
|
699 |
msgid "Delete alerts older than"
|
700 |
msgstr ""
|
701 |
|
702 |
-
#: classes/Views/Settings.php:
|
703 |
msgid "(eg: 80)"
|
704 |
msgstr ""
|
705 |
|
706 |
-
#: classes/Views/Settings.php:
|
707 |
msgid "Keep up to"
|
708 |
msgstr ""
|
709 |
|
710 |
-
#: classes/Views/Settings.php:
|
711 |
msgid "alerts"
|
712 |
msgstr ""
|
713 |
|
714 |
-
#: classes/Views/Settings.php:
|
715 |
msgid "Next Scheduled Cleanup is in "
|
716 |
msgstr ""
|
717 |
|
718 |
-
#: classes/Views/Settings.php:
|
719 |
msgid "(or %s)"
|
720 |
msgstr ""
|
721 |
|
722 |
-
#: classes/Views/Settings.php:
|
723 |
msgid "Run Manually"
|
724 |
msgstr ""
|
725 |
|
726 |
-
#: classes/Views/Settings.php:
|
727 |
msgid "Can View Alerts"
|
728 |
msgstr ""
|
729 |
|
730 |
-
#: classes/Views/Settings.php:
|
731 |
msgid "Users and Roles in this list can view the security alerts"
|
732 |
msgstr ""
|
733 |
|
734 |
-
#: classes/Views/Settings.php:
|
735 |
msgid "Refresh Audit Log Viewer"
|
736 |
msgstr ""
|
737 |
|
738 |
-
#: classes/Views/Settings.php:
|
739 |
msgid "Automatic"
|
740 |
msgstr ""
|
741 |
|
742 |
-
#: classes/Views/Settings.php:
|
743 |
msgid "Refresh Audit Log Viewer as soon as there are new alerts."
|
744 |
msgstr ""
|
745 |
|
746 |
-
#: classes/Views/Settings.php:
|
747 |
msgid "Manual"
|
748 |
msgstr ""
|
749 |
|
750 |
-
#: classes/Views/Settings.php:
|
751 |
msgid "Refresh Audit Log Viewer only when the page is reloaded."
|
752 |
msgstr ""
|
753 |
|
754 |
-
#: classes/Views/Settings.php:
|
755 |
-
msgid "Alerts Time Format"
|
756 |
-
msgstr ""
|
757 |
-
|
758 |
-
#: classes/Views/Settings.php:452
|
759 |
-
msgid "24 hours"
|
760 |
-
msgstr ""
|
761 |
-
|
762 |
-
#: classes/Views/Settings.php:457
|
763 |
-
msgid "AM/PM"
|
764 |
-
msgstr ""
|
765 |
-
|
766 |
-
#: classes/Views/Settings.php:465
|
767 |
msgid "Alerts Timestamp"
|
768 |
msgstr ""
|
769 |
|
770 |
-
#: classes/Views/Settings.php:
|
771 |
msgid "UTC"
|
772 |
msgstr ""
|
773 |
|
774 |
-
#: classes/Views/Settings.php:
|
775 |
msgid "WordPress' timezone"
|
776 |
msgstr ""
|
777 |
|
778 |
-
#: classes/Views/Settings.php:
|
779 |
msgid ""
|
780 |
"Select which timestamp should the alerts have in the Audit Log viewer. Note "
|
781 |
"that the WordPress' timezone might be different from that of the server."
|
782 |
msgstr ""
|
783 |
|
784 |
-
#: classes/Views/Settings.php:
|
785 |
msgid "Audit Log Columns Selection"
|
786 |
msgstr ""
|
787 |
|
788 |
-
#: classes/Views/Settings.php:
|
789 |
msgid ""
|
790 |
"When you disable any of the above such details won’t be shown in the Audit "
|
791 |
"Log\n"
|
@@ -793,49 +786,49 @@ msgid ""
|
|
793 |
"database."
|
794 |
msgstr ""
|
795 |
|
796 |
-
#: classes/Views/Settings.php:
|
797 |
msgid "Disable Alerts for WordPress Background Activity"
|
798 |
msgstr ""
|
799 |
|
800 |
-
#: classes/Views/Settings.php:
|
801 |
msgid "Hide activity"
|
802 |
msgstr ""
|
803 |
|
804 |
-
#: classes/Views/Settings.php:
|
805 |
msgid ""
|
806 |
"For example do not raise an alert when WordPress deletes the auto drafts."
|
807 |
msgstr ""
|
808 |
|
809 |
-
#: classes/Views/Settings.php:
|
810 |
msgid "Number of 404 Requests to Log"
|
811 |
msgstr ""
|
812 |
|
813 |
-
#: classes/Views/Settings.php:
|
814 |
msgid ""
|
815 |
"By default the plugin keeps up to 99 requests to non-existing pages from the "
|
816 |
"same IP address. Increase the value in this setting to the desired amount to "
|
817 |
"keep a log of more or less requests."
|
818 |
msgstr ""
|
819 |
|
820 |
-
#: classes/Views/Settings.php:
|
821 |
msgid ""
|
822 |
"Note that by increasing this value to a high number, should your website be "
|
823 |
"scanned the plugin will consume more resources to log all the requests."
|
824 |
msgstr ""
|
825 |
|
826 |
-
#: classes/Views/Settings.php:
|
827 |
msgid "Excluded Users"
|
828 |
msgstr ""
|
829 |
|
830 |
-
#: classes/Views/Settings.php:
|
831 |
msgid "Excluded Roles"
|
832 |
msgstr ""
|
833 |
|
834 |
-
#: classes/Views/Settings.php:
|
835 |
msgid "Excluded Custom Fields"
|
836 |
msgstr ""
|
837 |
|
838 |
-
#: classes/Views/Settings.php:
|
839 |
msgid "Excluded IP Addresses"
|
840 |
msgstr ""
|
841 |
|
@@ -2570,9 +2563,9 @@ msgstr ""
|
|
2570 |
msgid "WP Security Audit Log"
|
2571 |
msgstr ""
|
2572 |
|
2573 |
-
#. #-#-#-#-# plugin.pot (WP Security Audit Log 2.5.
|
2574 |
#. Plugin URI of the plugin/theme
|
2575 |
-
#. #-#-#-#-# plugin.pot (WP Security Audit Log 2.5.
|
2576 |
#. Author URI of the plugin/theme
|
2577 |
msgid "http://www.wpsecurityauditlog.com/"
|
2578 |
msgstr ""
|
2 |
# This file is distributed under the same license as the WP Security Audit Log package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: WP Security Audit Log 2.5.8\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-security-audit-"
|
7 |
"log\n"
|
8 |
+
"POT-Creation-Date: 2016-11-09 06:32:40+00:00\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
63 |
msgid "Message"
|
64 |
msgstr ""
|
65 |
|
66 |
+
#: classes/AuditLogListView.php:196
|
67 |
msgid "Click to toggle."
|
68 |
msgstr ""
|
69 |
|
70 |
+
#: classes/AuditLogListView.php:202
|
71 |
msgid "Unknown error code."
|
72 |
msgstr ""
|
73 |
|
74 |
+
#: classes/AuditLogListView.php:226
|
75 |
msgid "Unknown"
|
76 |
msgstr ""
|
77 |
|
78 |
+
#: classes/AuditLogListView.php:230
|
79 |
msgid "Plugin"
|
80 |
msgstr ""
|
81 |
|
82 |
+
#: classes/AuditLogListView.php:234
|
83 |
msgid "Plugins"
|
84 |
msgstr ""
|
85 |
|
86 |
+
#: classes/AuditLogListView.php:238
|
87 |
msgid "Website Visitor"
|
88 |
msgstr ""
|
89 |
|
90 |
+
#: classes/AuditLogListView.php:242
|
91 |
msgid "System"
|
92 |
msgstr ""
|
93 |
|
94 |
+
#: classes/AuditLogListView.php:270
|
95 |
msgid "Alert Data Inspector"
|
96 |
msgstr ""
|
97 |
|
237 |
msgstr ""
|
238 |
|
239 |
#: classes/Views/AuditLog.php:74 classes/Views/Licensing.php:34
|
240 |
+
#: classes/Views/Settings.php:111 classes/Views/ToggleAlerts.php:30
|
241 |
msgid "You do not have sufficient permissions to access this page."
|
242 |
msgstr ""
|
243 |
|
464 |
msgid "Licensing"
|
465 |
msgstr ""
|
466 |
|
467 |
+
#: classes/Views/Licensing.php:39 classes/Views/Settings.php:117
|
468 |
#: classes/Views/ToggleAlerts.php:45
|
469 |
msgid "Settings have been saved."
|
470 |
msgstr ""
|
471 |
|
472 |
+
#: classes/Views/Licensing.php:41 classes/Views/Settings.php:120
|
473 |
#: classes/Views/ToggleAlerts.php:47
|
474 |
msgid "Error: "
|
475 |
msgstr ""
|
529 |
msgid "Settings"
|
530 |
msgstr ""
|
531 |
|
532 |
+
#: classes/Views/Settings.php:125
|
533 |
msgid "General"
|
534 |
msgstr ""
|
535 |
|
536 |
+
#: classes/Views/Settings.php:126
|
537 |
msgid "Audit Log"
|
538 |
msgstr ""
|
539 |
|
540 |
+
#: classes/Views/Settings.php:127
|
541 |
msgid "Exclude Objects"
|
542 |
msgstr ""
|
543 |
|
544 |
+
#: classes/Views/Settings.php:143
|
545 |
msgid "From Email & Name"
|
546 |
msgstr ""
|
547 |
|
548 |
+
#: classes/Views/Settings.php:146
|
549 |
msgid "Email Address"
|
550 |
msgstr ""
|
551 |
|
552 |
+
#: classes/Views/Settings.php:149
|
553 |
msgid "Display Name"
|
554 |
msgstr ""
|
555 |
|
556 |
+
#: classes/Views/Settings.php:155
|
557 |
msgid ""
|
558 |
"These email address and display name will be used as From details in the "
|
559 |
"emails sent by the %s . Please ensure the mail server can relay emails with "
|
560 |
"the domain of the specified email address."
|
561 |
msgstr ""
|
562 |
|
563 |
+
#: classes/Views/Settings.php:156
|
564 |
msgid "(premium add-ons)"
|
565 |
msgstr ""
|
566 |
|
567 |
+
#: classes/Views/Settings.php:164
|
568 |
msgid "Alerts Dashboard Widget"
|
569 |
msgstr ""
|
570 |
|
571 |
+
#: classes/Views/Settings.php:170
|
572 |
msgid "On"
|
573 |
msgstr ""
|
574 |
|
575 |
+
#: classes/Views/Settings.php:175
|
576 |
msgid "Off"
|
577 |
msgstr ""
|
578 |
|
579 |
+
#: classes/Views/Settings.php:180
|
580 |
msgid "Display a dashboard widget with the latest %d security alerts."
|
581 |
msgstr ""
|
582 |
|
583 |
+
#: classes/Views/Settings.php:189
|
584 |
msgid "Reverse Proxy / Firewall Options"
|
585 |
msgstr ""
|
586 |
|
587 |
+
#: classes/Views/Settings.php:195
|
588 |
msgid "WordPress running behind firewall or proxy"
|
589 |
msgstr ""
|
590 |
|
591 |
+
#: classes/Views/Settings.php:198
|
592 |
msgid ""
|
593 |
"Enable this option if your WordPress is running behind a firewall or reverse "
|
594 |
"proxy. When this option is enabled the plugin will retrieve the user's IP "
|
599 |
msgid "Filter Internal IP Addresses"
|
600 |
msgstr ""
|
601 |
|
602 |
+
#: classes/Views/Settings.php:206
|
603 |
msgid ""
|
604 |
"Enable this option to filter internal IP addresses from the proxy headers."
|
605 |
msgstr ""
|
606 |
|
607 |
+
#: classes/Views/Settings.php:212
|
608 |
msgid "Can Manage Plugin"
|
609 |
msgstr ""
|
610 |
|
611 |
+
#: classes/Views/Settings.php:219
|
612 |
msgid "Users and Roles in this list can manage the plugin settings"
|
613 |
msgstr ""
|
614 |
|
615 |
+
#: classes/Views/Settings.php:237
|
616 |
msgid "Restrict Plugin Access"
|
617 |
msgstr ""
|
618 |
|
619 |
+
#: classes/Views/Settings.php:247
|
620 |
msgid ""
|
621 |
+
"If this option is disabled all the administrators on this WordPress have "
|
622 |
+
"access to manage this plugin."
|
|
|
|
|
623 |
msgstr ""
|
624 |
|
625 |
+
#: classes/Views/Settings.php:248
|
626 |
+
msgid ""
|
627 |
+
"By enabling this option only <strong>You</strong> and the users specified in "
|
628 |
+
"the <strong>Can Manage Plugin</strong> and <strong>Can View Alerts</strong> "
|
629 |
+
"can configure this plugin or view the alerts in the WordPress audit trail."
|
630 |
+
msgstr ""
|
631 |
+
|
632 |
+
#: classes/Views/Settings.php:255
|
633 |
msgid "Developer Options"
|
634 |
msgstr ""
|
635 |
|
636 |
+
#: classes/Views/Settings.php:263
|
637 |
msgid ""
|
638 |
"Only enable these options on testing, staging and development websites. "
|
639 |
"Enabling any of the settings below on LIVE websites may cause unintended "
|
640 |
"side-effects including degraded performance."
|
641 |
msgstr ""
|
642 |
|
643 |
+
#: classes/Views/Settings.php:268
|
644 |
msgid "Data Inspector"
|
645 |
msgstr ""
|
646 |
|
647 |
+
#: classes/Views/Settings.php:269
|
648 |
msgid "View data logged for each triggered alert."
|
649 |
msgstr ""
|
650 |
|
651 |
+
#: classes/Views/Settings.php:276
|
652 |
msgid "Request Log"
|
653 |
msgstr ""
|
654 |
|
655 |
+
#: classes/Views/Settings.php:277
|
656 |
msgid "Enables logging request to file."
|
657 |
msgstr ""
|
658 |
|
659 |
+
#: classes/Views/Settings.php:295
|
660 |
msgid ""
|
661 |
"The request log file is saved in the /wp-content/uploads/wp-security-audit-"
|
662 |
"log/ directory."
|
663 |
msgstr ""
|
664 |
|
665 |
+
#: classes/Views/Settings.php:303
|
666 |
msgid "Hide Plugin in Plugins Page"
|
667 |
msgstr ""
|
668 |
|
669 |
+
#: classes/Views/Settings.php:309
|
670 |
msgid "Hide"
|
671 |
msgstr ""
|
672 |
|
673 |
+
#: classes/Views/Settings.php:313
|
674 |
msgid ""
|
675 |
"To manually revert this setting set the value of option wsal-hide-plugin to "
|
676 |
"0 in the wp_options table."
|
677 |
msgstr ""
|
678 |
|
679 |
+
#: classes/Views/Settings.php:320
|
680 |
msgid "Logging"
|
681 |
msgstr ""
|
682 |
|
683 |
+
#: classes/Views/Settings.php:334
|
684 |
msgid "Disable all plugin logging."
|
685 |
msgstr ""
|
686 |
|
687 |
+
#: classes/Views/Settings.php:341
|
688 |
msgid "Remove Data on Uninstall"
|
689 |
msgstr ""
|
690 |
|
691 |
+
#: classes/Views/Settings.php:359
|
692 |
msgid "Security Alerts Pruning"
|
693 |
msgstr ""
|
694 |
|
695 |
+
#: classes/Views/Settings.php:362 classes/Views/Settings.php:370
|
696 |
msgid "(eg: 1 month)"
|
697 |
msgstr ""
|
698 |
|
699 |
+
#: classes/Views/Settings.php:366
|
700 |
msgid "None"
|
701 |
msgstr ""
|
702 |
|
703 |
+
#: classes/Views/Settings.php:374
|
704 |
msgid "Delete alerts older than"
|
705 |
msgstr ""
|
706 |
|
707 |
+
#: classes/Views/Settings.php:382
|
708 |
msgid "(eg: 80)"
|
709 |
msgstr ""
|
710 |
|
711 |
+
#: classes/Views/Settings.php:386
|
712 |
msgid "Keep up to"
|
713 |
msgstr ""
|
714 |
|
715 |
+
#: classes/Views/Settings.php:391
|
716 |
msgid "alerts"
|
717 |
msgstr ""
|
718 |
|
719 |
+
#: classes/Views/Settings.php:395
|
720 |
msgid "Next Scheduled Cleanup is in "
|
721 |
msgstr ""
|
722 |
|
723 |
+
#: classes/Views/Settings.php:399
|
724 |
msgid "(or %s)"
|
725 |
msgstr ""
|
726 |
|
727 |
+
#: classes/Views/Settings.php:400
|
728 |
msgid "Run Manually"
|
729 |
msgstr ""
|
730 |
|
731 |
+
#: classes/Views/Settings.php:407
|
732 |
msgid "Can View Alerts"
|
733 |
msgstr ""
|
734 |
|
735 |
+
#: classes/Views/Settings.php:414
|
736 |
msgid "Users and Roles in this list can view the security alerts"
|
737 |
msgstr ""
|
738 |
|
739 |
+
#: classes/Views/Settings.php:430
|
740 |
msgid "Refresh Audit Log Viewer"
|
741 |
msgstr ""
|
742 |
|
743 |
+
#: classes/Views/Settings.php:436
|
744 |
msgid "Automatic"
|
745 |
msgstr ""
|
746 |
|
747 |
+
#: classes/Views/Settings.php:438
|
748 |
msgid "Refresh Audit Log Viewer as soon as there are new alerts."
|
749 |
msgstr ""
|
750 |
|
751 |
+
#: classes/Views/Settings.php:442
|
752 |
msgid "Manual"
|
753 |
msgstr ""
|
754 |
|
755 |
+
#: classes/Views/Settings.php:444
|
756 |
msgid "Refresh Audit Log Viewer only when the page is reloaded."
|
757 |
msgstr ""
|
758 |
|
759 |
+
#: classes/Views/Settings.php:451
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
760 |
msgid "Alerts Timestamp"
|
761 |
msgstr ""
|
762 |
|
763 |
+
#: classes/Views/Settings.php:457
|
764 |
msgid "UTC"
|
765 |
msgstr ""
|
766 |
|
767 |
+
#: classes/Views/Settings.php:462
|
768 |
msgid "WordPress' timezone"
|
769 |
msgstr ""
|
770 |
|
771 |
+
#: classes/Views/Settings.php:465
|
772 |
msgid ""
|
773 |
"Select which timestamp should the alerts have in the Audit Log viewer. Note "
|
774 |
"that the WordPress' timezone might be different from that of the server."
|
775 |
msgstr ""
|
776 |
|
777 |
+
#: classes/Views/Settings.php:471
|
778 |
msgid "Audit Log Columns Selection"
|
779 |
msgstr ""
|
780 |
|
781 |
+
#: classes/Views/Settings.php:482
|
782 |
msgid ""
|
783 |
"When you disable any of the above such details won’t be shown in the Audit "
|
784 |
"Log\n"
|
786 |
"database."
|
787 |
msgstr ""
|
788 |
|
789 |
+
#: classes/Views/Settings.php:489
|
790 |
msgid "Disable Alerts for WordPress Background Activity"
|
791 |
msgstr ""
|
792 |
|
793 |
+
#: classes/Views/Settings.php:495
|
794 |
msgid "Hide activity"
|
795 |
msgstr ""
|
796 |
|
797 |
+
#: classes/Views/Settings.php:499
|
798 |
msgid ""
|
799 |
"For example do not raise an alert when WordPress deletes the auto drafts."
|
800 |
msgstr ""
|
801 |
|
802 |
+
#: classes/Views/Settings.php:506
|
803 |
msgid "Number of 404 Requests to Log"
|
804 |
msgstr ""
|
805 |
|
806 |
+
#: classes/Views/Settings.php:512
|
807 |
msgid ""
|
808 |
"By default the plugin keeps up to 99 requests to non-existing pages from the "
|
809 |
"same IP address. Increase the value in this setting to the desired amount to "
|
810 |
"keep a log of more or less requests."
|
811 |
msgstr ""
|
812 |
|
813 |
+
#: classes/Views/Settings.php:513
|
814 |
msgid ""
|
815 |
"Note that by increasing this value to a high number, should your website be "
|
816 |
"scanned the plugin will consume more resources to log all the requests."
|
817 |
msgstr ""
|
818 |
|
819 |
+
#: classes/Views/Settings.php:530
|
820 |
msgid "Excluded Users"
|
821 |
msgstr ""
|
822 |
|
823 |
+
#: classes/Views/Settings.php:550
|
824 |
msgid "Excluded Roles"
|
825 |
msgstr ""
|
826 |
|
827 |
+
#: classes/Views/Settings.php:577
|
828 |
msgid "Excluded Custom Fields"
|
829 |
msgstr ""
|
830 |
|
831 |
+
#: classes/Views/Settings.php:603
|
832 |
msgid "Excluded IP Addresses"
|
833 |
msgstr ""
|
834 |
|
2563 |
msgid "WP Security Audit Log"
|
2564 |
msgstr ""
|
2565 |
|
2566 |
+
#. #-#-#-#-# plugin.pot (WP Security Audit Log 2.5.8) #-#-#-#-#
|
2567 |
#. Plugin URI of the plugin/theme
|
2568 |
+
#. #-#-#-#-# plugin.pot (WP Security Audit Log 2.5.8) #-#-#-#-#
|
2569 |
#. Author URI of the plugin/theme
|
2570 |
msgid "http://www.wpsecurityauditlog.com/"
|
2571 |
msgstr ""
|
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.
|
10 |
-
Stable tag: 2.5.
|
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 |
|
@@ -129,6 +129,8 @@ WP Security Audit Log plugin also has a number of features that make WordPress a
|
|
129 |
* [Templatic](https://templatic.com/tips-tricks/improve-wordpress-security-posture/)
|
130 |
* [Make a Website Hub](http://makeawebsitehub.com/wordpress-security/)
|
131 |
* [The Darknet](http://www.darknet.org.uk/2015/10/wp-security-audit-log-a-complete-audit-log-plugin-for-wordpress/)
|
|
|
|
|
132 |
|
133 |
= WordPress Security Audit Log in your Language! =
|
134 |
We need help translating the plugin and the WordPress Security Alerts. Please visit the [WordPress Translate Project](https://translate.wordpress.org/projects/wp-plugins/wp-security-audit-log) to translate the plugin and drop us an email on support@wpwhitesecurity.com to get mentioned in the list of translators below.
|
@@ -180,6 +182,17 @@ Please refer to the [FAQs page](https://www.wpsecurityauditlog.com/documentation
|
|
180 |
|
181 |
== Changelog ==
|
182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
= 2.5.7 (2016-10-05) =
|
184 |
|
185 |
* **Bug Fix**
|
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.7
|
10 |
+
Stable tag: 2.5.8
|
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 |
|
129 |
* [Templatic](https://templatic.com/tips-tricks/improve-wordpress-security-posture/)
|
130 |
* [Make a Website Hub](http://makeawebsitehub.com/wordpress-security/)
|
131 |
* [The Darknet](http://www.darknet.org.uk/2015/10/wp-security-audit-log-a-complete-audit-log-plugin-for-wordpress/)
|
132 |
+
* [WebEmpresa](https://www.webempresa.com/blog/auditando-cambios-en-wordpress.html)
|
133 |
+
* [KitPloit](http://www.kitploit.com/2016/10/wp-security-audit-log-ultimate.html)
|
134 |
|
135 |
= WordPress Security Audit Log in your Language! =
|
136 |
We need help translating the plugin and the WordPress Security Alerts. Please visit the [WordPress Translate Project](https://translate.wordpress.org/projects/wp-plugins/wp-security-audit-log) to translate the plugin and drop us an email on support@wpwhitesecurity.com to get mentioned in the list of translators below.
|
182 |
|
183 |
== Changelog ==
|
184 |
|
185 |
+
= 2.5.8 (2016-11-09) =
|
186 |
+
|
187 |
+
* **Plugin Improvement (Standardized all date & time formats and timezone)**
|
188 |
+
* Plugin now uses the time & date format configured in WordPress (removed the option from plugin that override this).
|
189 |
+
* 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.
|
190 |
+
* Changed the Request Log file extension to php and disabled execution (before it was log, hence users could guess it)
|
191 |
+
|
192 |
+
* **Bug Fixes**
|
193 |
+
* 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/)).
|
194 |
+
* 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.
|
195 |
+
|
196 |
= 2.5.7 (2016-10-05) =
|
197 |
|
198 |
* **Bug Fix**
|
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.5.
|
8 |
Text Domain: wp-security-audit-log
|
9 |
Author URI: http://www.wpsecurityauditlog.com/
|
10 |
License: GPL2
|
@@ -664,7 +664,6 @@ class WpSecurityAuditLog {
|
|
664 |
$this->options = new WSAL_Models_Option();
|
665 |
return $this->options->SetOptionValue($option, $value);
|
666 |
}
|
667 |
-
|
668 |
// </editor-fold>
|
669 |
}
|
670 |
|
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.5.8
|
8 |
Text Domain: wp-security-audit-log
|
9 |
Author URI: http://www.wpsecurityauditlog.com/
|
10 |
License: GPL2
|
664 |
$this->options = new WSAL_Models_Option();
|
665 |
return $this->options->SetOptionValue($option, $value);
|
666 |
}
|
|
|
667 |
// </editor-fold>
|
668 |
}
|
669 |
|