Anti-Malware Security and Brute-Force Firewall - Version 4.18.69

Version Description

  • Added a Warning message about the vulnerability in the yuzo-related-post plugin.
  • Updated the Quarantine interface and added a re-scan / re-clean feature.
  • Fixed a bug in the scan depth array that would produce PHP Notices in the error_log files under certain conditions.
  • Changed some wording and other minor fomatting issues.
  • Removed some outdated JavaScript that is no longer needed.
  • Checked code for compatibility with WP 5.2 (latest release).
Download this release

Release Info

Developer scheeeli
Plugin Icon 128x128 Anti-Malware Security and Brute-Force Firewall
Version 4.18.69
Comparing to
See all releases

Code changes from version 4.18.63 to 4.18.69

Files changed (3) hide show
  1. images/index.php +18 -3
  2. index.php +46 -29
  3. readme.txt +16 -5
images/index.php CHANGED
@@ -133,6 +133,17 @@ GOTMLS_define("GOTMLS_Scan_Settings_LANGUAGE", __("Scan Settings",'gotmls'));
133
  GOTMLS_define("GOTMLS_Loading_LANGUAGE", __("Loading, Please Wait ...",'gotmls'));
134
  GOTMLS_define("GOTMLS_Automatically_Fix_LANGUAGE", __("Automatically Fix SELECTED Files Now",'gotmls'));
135
 
 
 
 
 
 
 
 
 
 
 
 
136
  if (!defined("ABSPATH")) {
137
  define("ABSPATH", dirname(dirname(__FILE__)).'/safe-load/');
138
  $root_path = dirname(ABSPATH);
@@ -495,6 +506,8 @@ $GOTMLS_total_percent = 0;
495
  function GOTMLS_admin_notices() {
496
  if (!is_admin())
497
  return;
 
 
498
  elseif ($GLOBALS["GOTMLS"]["tmp"]["HeadersError"])
499
  echo $GLOBALS["GOTMLS"]["tmp"]["HeadersError"];
500
  }
@@ -1078,7 +1091,7 @@ function GOTMLS_readdir($dir, $current_depth = 1) {
1078
  $current_depth = GOTMLS_readdir($path, $current_depth);
1079
  } else {
1080
  echo GOTMLS_return_threat("skipdirs", "blocked", $path);
1081
- $GOTMLS_dir_at_depth[$current_depth]++;
1082
  }
1083
  }
1084
  if ($_REQUEST["scan_type"] == "Quick Scan") {
@@ -1093,8 +1106,10 @@ function GOTMLS_readdir($dir, $current_depth = 1) {
1093
  echo GOTMLS_return_threat("errors", "blocked", $dir, GOTMLS_error_link(GOTMLS_Failed_to_list_LANGUAGE.' readdir:'.($entries===false?'('.GOTMLS_fileperms($dir).')':$entries)));
1094
  @set_time_limit($GLOBALS["GOTMLS"]["tmp"]['execution_time']);
1095
  if ($current_depth-- && $_REQUEST["scan_type"] == "Quick Scan") {
1096
- $GOTMLS_dir_at_depth[$current_depth]++;
1097
  for ($GOTMLS_total_percent = 0, $depth = $current_depth; $depth >= 0; $depth--) {
 
 
1098
  echo "\n//(($GOTMLS_total_percent / $GOTMLS_dirs_at_depth[$depth]) + ($GOTMLS_dir_at_depth[$depth] / $GOTMLS_dirs_at_depth[$depth])) = ";
1099
  $GOTMLS_total_percent = (($GOTMLS_dirs_at_depth[$depth]?($GOTMLS_total_percent / $GOTMLS_dirs_at_depth[$depth]):0) + ($GOTMLS_dir_at_depth[$depth] / ($GOTMLS_dirs_at_depth[$depth]+1)));
1100
  echo "$GOTMLS_total_percent\n";
@@ -1145,7 +1160,7 @@ function GOTMLS_error_link($errorTXT, $file = "", $class = "errors") {
1145
  $encoded_file = $file;
1146
  $onclick = 'loadIframe(\''.str_replace("\"", "&quot;", '<div style="float: left; white-space: nowrap;">'.__("Examine Quarantined Content",'gotmls').' ... </div><div style="overflow: hidden; position: relative; height: 20px;"><div style="position: absolute; right: 0px; text-align: right; width: 9000px;">'.GOTMLS_strip4java($post->post_title)).'</div></div>\');" href="'.admin_url('admin-ajax.php?action=GOTMLS_scan&'.GOTMLS_set_nonce(__FUNCTION__."744").'&mt='.$GLOBALS["GOTMLS"]["tmp"]["mt"].'&GOTMLS_scan='.$file);
1147
  } elseif ($file)
1148
- $onclick = 'loadIframe(\''.str_replace("\"", "&quot;", '<div style="float: left; white-space: nowrap;">'.__("Examine Content",'gotmls').' ... </div><div style="overflow: hidden; position: relative; height: 20px;"><div style="position: absolute; right: 0px; text-align: right; width: 9000px;">'.GOTMLS_htmlspecialchars(GOTMLS_strip4java($file), ENT_NOQUOTES)).'</div></div>\');" href="'.admin_url('admin-ajax.php?action=GOTMLS_scan&'.GOTMLS_set_nonce(__FUNCTION__."746").'&mt='.$GLOBALS["GOTMLS"]["tmp"]["mt"].'&GOTMLS_scan='.$encoded_file.preg_replace('/\&(GOTMLS_scan|mt|GOTMLS_mt|action)=/', '&last_\1=', isset($_SERVER["QUERY_STRING"])&&strlen($_SERVER["QUERY_STRING"])?"&".$_SERVER["QUERY_STRING"]:""));
1149
  else
1150
  $onclick = 'return false;';
1151
  return "<a id=\"list_$encoded_file\" title=\"$errorTXT\" target=\"GOTMLS_iFrame\" onclick=\"$onclick\" class=\"GOTMLS_plugin $class\">";
133
  GOTMLS_define("GOTMLS_Loading_LANGUAGE", __("Loading, Please Wait ...",'gotmls'));
134
  GOTMLS_define("GOTMLS_Automatically_Fix_LANGUAGE", __("Automatically Fix SELECTED Files Now",'gotmls'));
135
 
136
+ function GOTMLS_user_can() {
137
+ if (is_multisite())
138
+ $GLOBALS["GOTMLS"]["tmp"]["settings_array"]["user_can"] = "manage_network";
139
+ elseif (!isset($GLOBALS["GOTMLS"]["tmp"]["settings_array"]["user_can"]) || $GLOBALS["GOTMLS"]["tmp"]["settings_array"]["user_can"] == "manage_network")
140
+ $GLOBALS["GOTMLS"]["tmp"]["settings_array"]["user_can"] = "activate_plugins";
141
+ if (current_user_can($GLOBALS["GOTMLS"]["tmp"]["settings_array"]["user_can"]))
142
+ return true;
143
+ else
144
+ return false;
145
+ }
146
+
147
  if (!defined("ABSPATH")) {
148
  define("ABSPATH", dirname(dirname(__FILE__)).'/safe-load/');
149
  $root_path = dirname(ABSPATH);
506
  function GOTMLS_admin_notices() {
507
  if (!is_admin())
508
  return;
509
+ elseif (is_file(dirname(dirname(dirname(__FILE__)))."/yuzo-related-post/yuzo_related_post.php"))
510
+ echo '<div class="error">It looks like you have <b>"Related Post" plugin By <i>Lenin Zapata</i></b> installed on your site.<br />This plugin was removed from the WordPress Plugin Repository because it contained a major vulnerability that was responsible for a fairly widespread breach to many WordPress sites that had it installed.<br />It is recommended that it be deactivated and deleted until a fix is released that solves this problem.</div>';
511
  elseif ($GLOBALS["GOTMLS"]["tmp"]["HeadersError"])
512
  echo $GLOBALS["GOTMLS"]["tmp"]["HeadersError"];
513
  }
1091
  $current_depth = GOTMLS_readdir($path, $current_depth);
1092
  } else {
1093
  echo GOTMLS_return_threat("skipdirs", "blocked", $path);
1094
+ $GOTMLS_dir_at_depth[$current_depth] = (isset($GOTMLS_dir_at_depth[$current_depth])?$GOTMLS_dir_at_depth[$current_depth]:0) + 1;
1095
  }
1096
  }
1097
  if ($_REQUEST["scan_type"] == "Quick Scan") {
1106
  echo GOTMLS_return_threat("errors", "blocked", $dir, GOTMLS_error_link(GOTMLS_Failed_to_list_LANGUAGE.' readdir:'.($entries===false?'('.GOTMLS_fileperms($dir).')':$entries)));
1107
  @set_time_limit($GLOBALS["GOTMLS"]["tmp"]['execution_time']);
1108
  if ($current_depth-- && $_REQUEST["scan_type"] == "Quick Scan") {
1109
+ $GOTMLS_dir_at_depth[$current_depth] = (isset($GOTMLS_dir_at_depth[$current_depth])?$GOTMLS_dir_at_depth[$current_depth]:0) + 1;
1110
  for ($GOTMLS_total_percent = 0, $depth = $current_depth; $depth >= 0; $depth--) {
1111
+ if (!isset($GOTMLS_dir_at_depth[$depth]))
1112
+ $GOTMLS_dir_at_depth[$depth] = 0;
1113
  echo "\n//(($GOTMLS_total_percent / $GOTMLS_dirs_at_depth[$depth]) + ($GOTMLS_dir_at_depth[$depth] / $GOTMLS_dirs_at_depth[$depth])) = ";
1114
  $GOTMLS_total_percent = (($GOTMLS_dirs_at_depth[$depth]?($GOTMLS_total_percent / $GOTMLS_dirs_at_depth[$depth]):0) + ($GOTMLS_dir_at_depth[$depth] / ($GOTMLS_dirs_at_depth[$depth]+1)));
1115
  echo "$GOTMLS_total_percent\n";
1160
  $encoded_file = $file;
1161
  $onclick = 'loadIframe(\''.str_replace("\"", "&quot;", '<div style="float: left; white-space: nowrap;">'.__("Examine Quarantined Content",'gotmls').' ... </div><div style="overflow: hidden; position: relative; height: 20px;"><div style="position: absolute; right: 0px; text-align: right; width: 9000px;">'.GOTMLS_strip4java($post->post_title)).'</div></div>\');" href="'.admin_url('admin-ajax.php?action=GOTMLS_scan&'.GOTMLS_set_nonce(__FUNCTION__."744").'&mt='.$GLOBALS["GOTMLS"]["tmp"]["mt"].'&GOTMLS_scan='.$file);
1162
  } elseif ($file)
1163
+ $onclick = 'loadIframe(\''.str_replace("\"", "&quot;", '<div style="float: left; white-space: nowrap;">'.__("Examine Current Content",'gotmls').' ... </div><div style="overflow: hidden; position: relative; height: 20px;"><div style="position: absolute; right: 0px; text-align: right; width: 9000px;">'.GOTMLS_htmlspecialchars(GOTMLS_strip4java($file), ENT_NOQUOTES)).'</div></div>\');" href="'.admin_url('admin-ajax.php?action=GOTMLS_scan&'.GOTMLS_set_nonce(__FUNCTION__."746").'&mt='.$GLOBALS["GOTMLS"]["tmp"]["mt"].'&GOTMLS_scan='.$encoded_file.preg_replace('/\&(GOTMLS_scan|mt|GOTMLS_mt|action)=/', '&last_\1=', isset($_SERVER["QUERY_STRING"])&&strlen($_SERVER["QUERY_STRING"])?"&".$_SERVER["QUERY_STRING"]:""));
1164
  else
1165
  $onclick = 'return false;';
1166
  return "<a id=\"list_$encoded_file\" title=\"$errorTXT\" target=\"GOTMLS_iFrame\" onclick=\"$onclick\" class=\"GOTMLS_plugin $class\">";
index.php CHANGED
@@ -8,7 +8,7 @@ Author URI: http://wordpress.ieonly.com/category/my-plugins/anti-malware/
8
  Contributors: scheeeli, gotmls
9
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZHD8QHZ2E7PE
10
  Description: This Anti-Virus/Anti-Malware plugin searches for Malware and other Virus like threats and vulnerabilities on your server and helps you remove them. It's always growing and changing to adapt to new threats so let me know if it's not working for you.
11
- Version: 4.18.63
12
  */
13
  if (isset($_SERVER["DOCUMENT_ROOT"]) && ($SCRIPT_FILE = str_replace($_SERVER["DOCUMENT_ROOT"], "", isset($_SERVER["SCRIPT_FILENAME"])?$_SERVER["SCRIPT_FILENAME"]:isset($_SERVER["SCRIPT_NAME"])?$_SERVER["SCRIPT_NAME"]:"")) && strlen($SCRIPT_FILE) > strlen("/".basename(__FILE__)) && substr(__FILE__, -1 * strlen($SCRIPT_FILE)) == substr($SCRIPT_FILE, -1 * strlen(__FILE__)))
14
  include(dirname(__FILE__)."/safe-load/index.php");
@@ -18,7 +18,7 @@ else
18
  * / /\ GOTMLS Main Plugin File
19
  * / /:/ @package GOTMLS
20
  * /__/::\
21
- Copyright \__\/\:\__ © 2012-2018 Eli Scheetz (email: eli@gotmls.net)
22
  * \ \:\/\
23
  * \__\::/ This program is free software; you can redistribute it
24
  * ___ /__/:/ and/or modify it under the terms of the GNU General Public
@@ -51,17 +51,6 @@ function GOTMLS_install() {
51
  }
52
  register_activation_hook(__FILE__, "GOTMLS_install");
53
 
54
- function GOTMLS_user_can() {
55
- if (is_multisite())
56
- $GLOBALS["GOTMLS"]["tmp"]["settings_array"]["user_can"] = "manage_network";
57
- elseif (!isset($GLOBALS["GOTMLS"]["tmp"]["settings_array"]["user_can"]) || $GLOBALS["GOTMLS"]["tmp"]["settings_array"]["user_can"] == "manage_network")
58
- $GLOBALS["GOTMLS"]["tmp"]["settings_array"]["user_can"] = "activate_plugins";
59
- if (current_user_can($GLOBALS["GOTMLS"]["tmp"]["settings_array"]["user_can"]))
60
- return true;
61
- else
62
- return false;
63
- }
64
-
65
  function GOTMLS_menu() {
66
  $GOTMLS_Full_plugin_logo_URL = GOTMLS_images_path.'GOTMLS-16x16.gif';
67
  $base_page = "GOTMLS-settings";
@@ -157,7 +146,7 @@ span.GOTMLS_date {float: right; width: 130px; white-space: nowrap;}
157
  .popup-box {background-color: #FFC; display: none; position: absolute; left: 0px; z-index: 10;}
158
  .shadowed-text {text-shadow: #00F -1px 1px 1px;}
159
  .sub-option {float: left; margin: 3px 5px;}
160
- .inside p {margin: 10px;}
161
  .GOTMLS_li, .GOTMLS_plugin li {list-style: none;}
162
  .GOTMLS_plugin {margin: 5px; background: #cfc; border: 1px solid #0C0; padding: 0 5px; border-radius: 3px;}
163
  .GOTMLS_plugin.known, .GOTMLS_plugin.db_scan, .GOTMLS_plugin.htaccess, .GOTMLS_plugin.timthumb, .GOTMLS_plugin.errors {background: #f99; border: 1px solid #f00;}
@@ -168,6 +157,13 @@ span.GOTMLS_date {float: right; width: 130px; white-space: nowrap;}
168
  #pastDonations li {list-style: none;}
169
  #quarantine_buttons {position: absolute; right: 0px; top: -54px; margin: 0px; padding: 0px;}
170
  #quarantine_buttons input.button-primary {margin-right: 20px;}
 
 
 
 
 
 
 
171
  #delete_button {
172
  background-color: #C33;
173
  color: #FFF;
@@ -215,7 +211,7 @@ function checkAllFiles(check) {
215
  var checkboxes = new Array();
216
  checkboxes = document["GOTMLS_Form_clean"].getElementsByTagName("input");
217
  for (var i=0; i<checkboxes.length; i++)
218
- if (checkboxes[i].type == "checkbox")
219
  checkboxes[i].checked = check;
220
  }
221
  function setvalAllFiles(val) {
@@ -289,7 +285,7 @@ function checkupdateserver(server, divid) {
289
  }
290
  }
291
  var IE = document.all?true:false;
292
- if (!IE) document.captureEvents(Event.MOUSEMOVE)
293
  document.onmousemove = getMouseXY;
294
  var offsetX = 0;
295
  var offsetY = 0;
@@ -371,7 +367,7 @@ setDiv("div_file");
371
  <div id="admin-page-container">
372
  <div id="GOTMLS-right-sidebar" style="width: 300px;" class="metabox-holder">
373
  '.GOTMLS_box(__("Updates & Registration",'gotmls'), "<ul>$php_version<li>WordPress: <span class='GOTMLS_date'>".GOTMLS_wp_version."</span></li>\n<li>Plugin: <span class='GOTMLS_date'>".GOTMLS_Version.'</span></li>
374
- <li><div id="GOTMLS_Key" style="margin: 0;'.((!$defLatest && !$isRegistered)?' display: none;">Key: <span style="float: right;">'.GOTMLS_installation_key.'</span></div><div style="':'">Key: <span style="float: right;">'.GOTMLS_installation_key.'</span></div><div style="display: none;').'"><form method="POST" action="'.admin_url('admin-ajax.php?'.$head_nonce).'" target="GOTMLS_iFrame" name="GOTMLS_Form_lognewkey"><input type="hidden" name="GOTMLS_installation_key" value="'.GOTMLS_installation_key.'"><input type="hidden" name="action" value="GOTMLS_lognewkey"><span style="color: #F00;" id="GOTMLS_No_Key">No Key! <input type="submit" style="float: right;" value="'.__("Get FREE Key!",'gotmls').'" class="button-primary" onclick="showhide(\'GOTMLS_No_Key\');showhide(\'GOTMLS_Key\', true);check_for_updates(\'Definition_Updates\');" /></span></form></div></li>
375
  <li>Definitions: <span id="GOTMLS_definitions_date" class="GOTMLS_date">'.$GLOBALS["GOTMLS"]["tmp"]["Definition"]["Latest"].'</span></li></ul>
376
  <form id="updateform" method="post" name="updateform" action="'.str_replace("GOTMLS_mt=", "GOTMLS_last_mt=", GOTMLS_script_URI).'&'.$head_nonce.'">
377
  <img style="display: none; float: left; margin-right: 4px;" src="'.GOTMLS_images_path.'checked.gif" height=16 width=16 alt="definitions updated" id="autoUpdateDownload" onclick="showhide(\'autoUpdateForm\', true); showhide(\'registerKeyForm\', true); showhide(\'clear_updates\', true); getElementById(\'registerFormMessage\').innerHTML = \'<p>You can change your registered email here if you want.</p>\';">
@@ -391,7 +387,7 @@ setDiv("div_file");
391
  <div style="float: left; width: 50%;"><input style="width: 100%;" id="first_name" type="text" name="first_name" value="'.$current_user->user_firstname.'" /></div>
392
  <div style="float: left; width: 50%;"><input style="width: 100%;" id="last_name" type="text" name="last_name" value="'.$current_user->user_lastname.'" /></div>
393
  <div style="clear: left; width: 100%;">
394
- <div>'.__("A password will be e-mailed to this address:",'gotmls').'</div>
395
  <input style="width: 100%;" id="user_email" type="text" name="user_email" value="'.$current_user->user_email.'" /></div>
396
  <div>
397
  <div>'.__("Your WordPress Site URL:",'gotmls').'</div>
@@ -646,13 +642,34 @@ function GOTMLS_get_quarantine($only = false) {
646
  $Q_Page = '
647
  <form method="POST" action="'.admin_url('admin-ajax.php?'.GOTMLS_set_nonce(__FUNCTION__."645")).(isset($_SERVER["QUERY_STRING"])&&strlen($_SERVER["QUERY_STRING"])?"&".$_SERVER["QUERY_STRING"]:"").'" target="GOTMLS_iFrame" name="GOTMLS_Form_clean"><input type="hidden" id="GOTMLS_fixing" name="GOTMLS_fixing" value="1"><input type="hidden" name="action" value="GOTMLS_fix">';
648
  if ($my_query->have_posts()) {
649
- $Q_Page .= '<p id="quarantine_buttons" style="display: none;"><input id="repair_button" type="submit" value="'.__("Restore selected files",'gotmls').'" class="button-primary" onclick="if (confirm(\''.__("Are you sure you want to overwrite the previously cleaned files with the selected files in the Quarantine?",'gotmls').'\')) { setvalAllFiles(1); loadIframe(\'File Restoration Results\'); } else return false;" /><input id="delete_button" type="submit" class="button-primary" value="'.__("Delete selected files",'gotmls').'" onclick="if (confirm(\''.__("Are you sure you want to permanently delete the selected files in the Quarantine?",'gotmls').'\')) { setvalAllFiles(2); loadIframe(\'File Deletion Results\'); } else return false;" /></p><p><b>'.__("The following items have been found to contain malicious code, they have been cleaned, and the original infected file contents have been saved here in the Quarantine. The code is safe here and you do not need to do anything further with these files.",'gotmls').'</b></p>
 
650
  <ul name="found_Quarantine" id="found_Quarantine" class="GOTMLS_plugin known" style="background-color: #ccc; padding: 0;"><h3 style="margin: 8px 12px;">'.($my_query->post_count>1?'<input type="checkbox" onchange="checkAllFiles(this.checked); document.getElementById(\'quarantine_buttons\').style.display = \'block\';"> '.sprintf(__("Check all %d",'gotmls'),$my_query->post_count):"").__(" Items in Quarantine",'gotmls').'<span class="GOTMLS_date">'.__("Quarantined",'gotmls').'</span><span class="GOTMLS_date">'.__("Date Infected",'gotmls').'</span></h3>';
651
  $root_path = implode(GOTMLS_slash(), array_slice(GOTMLS_explode_dir(__FILE__), 0, (2 + intval($GLOBALS["GOTMLS"]["tmp"]["settings_array"]["scan_level"])) * -1));
652
  while ($my_query->have_posts()) {
653
  $my_query->the_post();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
654
  $Q_Page .= '
655
- <li id="GOTMLS_quarantine_'.$post->ID.'" class="GOTMLS_quarantine_item"><span class="GOTMLS_date">'.$post->post_date_gmt.'</span><span class="GOTMLS_date">'.$post->post_modified_gmt.'</span><input type="checkbox" name="GOTMLS_fix[]" value="'.$post->ID.'" id="check_'.$post->ID.'" onchange="document.getElementById(\'quarantine_buttons\').style.display = \'block\';" /><img src="'.GOTMLS_images_path.'blocked.gif" height=16 width=16 alt="Q">'.GOTMLS_error_link(__("View Quarantined File",'gotmls'), $post->ID).str_replace($root_path, "...", $post->post_title)."</a></li>\n";
656
  }
657
  $Q_Page .= "\n</ul>";
658
  for ($p = 1; $p <= $my_query->max_num_pages; $p++) {
@@ -688,20 +705,20 @@ function GOTMLS_Firewall_Options() {
688
  $patch_attr = array(
689
  array(
690
  "icon" => "blocked",
691
- "language" => __("Your WordPress Login page is susceptible to a brute-force attack (just like any other login page). These types of attacks are becoming more prevalent these days and can sometimes cause your server to become slow or unresponsive, even if the attacks do not succeed in gaining access to your site. Applying this patch will block access to the WordPress Login page whenever this type of attack is detected."),
692
- "status" => 'Not Installed',
693
- "action" => 'Install Patch'
694
  ),
695
  array(
696
- "language" => __("Your WordPress site has the current version of my brute-force Login protection installed."),
697
- "action" => 'Uninstall Patch',
698
- "status" => 'Enabled',
699
  "icon" => "checked"
700
  ),
701
  array(
702
- "language" => __("Your WordPress Login page has the old version of my brute-force protection installed. Upgrade this patch to improve the protection on the WordPress Login page and preserve the integrity of your WordPress core files."),
703
- "action" => 'Upgrade Patch',
704
- "status" => 'Out of Date',
705
  "icon" => "threat"
706
  )
707
  );
8
  Contributors: scheeeli, gotmls
9
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZHD8QHZ2E7PE
10
  Description: This Anti-Virus/Anti-Malware plugin searches for Malware and other Virus like threats and vulnerabilities on your server and helps you remove them. It's always growing and changing to adapt to new threats so let me know if it's not working for you.
11
+ Version: 4.18.69
12
  */
13
  if (isset($_SERVER["DOCUMENT_ROOT"]) && ($SCRIPT_FILE = str_replace($_SERVER["DOCUMENT_ROOT"], "", isset($_SERVER["SCRIPT_FILENAME"])?$_SERVER["SCRIPT_FILENAME"]:isset($_SERVER["SCRIPT_NAME"])?$_SERVER["SCRIPT_NAME"]:"")) && strlen($SCRIPT_FILE) > strlen("/".basename(__FILE__)) && substr(__FILE__, -1 * strlen($SCRIPT_FILE)) == substr($SCRIPT_FILE, -1 * strlen(__FILE__)))
14
  include(dirname(__FILE__)."/safe-load/index.php");
18
  * / /\ GOTMLS Main Plugin File
19
  * / /:/ @package GOTMLS
20
  * /__/::\
21
+ Copyright \__\/\:\__ © 2012-2019 Eli Scheetz (email: eli@gotmls.net)
22
  * \ \:\/\
23
  * \__\::/ This program is free software; you can redistribute it
24
  * ___ /__/:/ and/or modify it under the terms of the GNU General Public
51
  }
52
  register_activation_hook(__FILE__, "GOTMLS_install");
53
 
 
 
 
 
 
 
 
 
 
 
 
54
  function GOTMLS_menu() {
55
  $GOTMLS_Full_plugin_logo_URL = GOTMLS_images_path.'GOTMLS-16x16.gif';
56
  $base_page = "GOTMLS-settings";
146
  .popup-box {background-color: #FFC; display: none; position: absolute; left: 0px; z-index: 10;}
147
  .shadowed-text {text-shadow: #00F -1px 1px 1px;}
148
  .sub-option {float: left; margin: 3px 5px;}
149
+ .inside {margin: 10px;}
150
  .GOTMLS_li, .GOTMLS_plugin li {list-style: none;}
151
  .GOTMLS_plugin {margin: 5px; background: #cfc; border: 1px solid #0C0; padding: 0 5px; border-radius: 3px;}
152
  .GOTMLS_plugin.known, .GOTMLS_plugin.db_scan, .GOTMLS_plugin.htaccess, .GOTMLS_plugin.timthumb, .GOTMLS_plugin.errors {background: #f99; border: 1px solid #f00;}
157
  #pastDonations li {list-style: none;}
158
  #quarantine_buttons {position: absolute; right: 0px; top: -54px; margin: 0px; padding: 0px;}
159
  #quarantine_buttons input.button-primary {margin-right: 20px;}
160
+ #reclean_buttons {
161
+ color: #a00;
162
+ min-height: 32px;
163
+ border-top: solid 2px black;
164
+ padding-top: 10px;
165
+ }
166
+ #reclean_buttons input.button-primary {float: right;}
167
  #delete_button {
168
  background-color: #C33;
169
  color: #FFF;
211
  var checkboxes = new Array();
212
  checkboxes = document["GOTMLS_Form_clean"].getElementsByTagName("input");
213
  for (var i=0; i<checkboxes.length; i++)
214
+ if (checkboxes[i].type == "checkbox" && checkboxes[i].id.substring(0, 6) == "check_")
215
  checkboxes[i].checked = check;
216
  }
217
  function setvalAllFiles(val) {
285
  }
286
  }
287
  var IE = document.all?true:false;
288
+ //if (!IE) document.addEventListener("mousemove", getMouseXY);
289
  document.onmousemove = getMouseXY;
290
  var offsetX = 0;
291
  var offsetY = 0;
367
  <div id="admin-page-container">
368
  <div id="GOTMLS-right-sidebar" style="width: 300px;" class="metabox-holder">
369
  '.GOTMLS_box(__("Updates & Registration",'gotmls'), "<ul>$php_version<li>WordPress: <span class='GOTMLS_date'>".GOTMLS_wp_version."</span></li>\n<li>Plugin: <span class='GOTMLS_date'>".GOTMLS_Version.'</span></li>
370
+ <li><div id="GOTMLS_Key" style="margin: 0;'.((!$defLatest && !$isRegistered)?' display: none;">Key: <span style="float: right;">'.GOTMLS_installation_key.'</span></div><div style="':'">Key: <span style="float: right;" onclick="showhide(\'autoUpdateForm\', true); showhide(\'registerKeyForm\', true); showhide(\'clear_updates\', true); getElementById(\'registerFormMessage\').innerHTML = \'<p>You can change your registered email here if you want.</p>\';">'.GOTMLS_installation_key.'</span></div><div style="display: none;').'"><form method="POST" action="'.admin_url('admin-ajax.php?'.$head_nonce).'" target="GOTMLS_iFrame" name="GOTMLS_Form_lognewkey"><input type="hidden" name="GOTMLS_installation_key" value="'.GOTMLS_installation_key.'"><input type="hidden" name="action" value="GOTMLS_lognewkey"><span style="color: #F00;" id="GOTMLS_No_Key">No Key! <input type="submit" style="float: right;" value="'.__("Get FREE Key!",'gotmls').'" class="button-primary" onclick="showhide(\'GOTMLS_No_Key\');showhide(\'GOTMLS_Key\', true);check_for_updates(\'Definition_Updates\');" /></span></form></div></li>
371
  <li>Definitions: <span id="GOTMLS_definitions_date" class="GOTMLS_date">'.$GLOBALS["GOTMLS"]["tmp"]["Definition"]["Latest"].'</span></li></ul>
372
  <form id="updateform" method="post" name="updateform" action="'.str_replace("GOTMLS_mt=", "GOTMLS_last_mt=", GOTMLS_script_URI).'&'.$head_nonce.'">
373
  <img style="display: none; float: left; margin-right: 4px;" src="'.GOTMLS_images_path.'checked.gif" height=16 width=16 alt="definitions updated" id="autoUpdateDownload" onclick="showhide(\'autoUpdateForm\', true); showhide(\'registerKeyForm\', true); showhide(\'clear_updates\', true); getElementById(\'registerFormMessage\').innerHTML = \'<p>You can change your registered email here if you want.</p>\';">
387
  <div style="float: left; width: 50%;"><input style="width: 100%;" id="first_name" type="text" name="first_name" value="'.$current_user->user_firstname.'" /></div>
388
  <div style="float: left; width: 50%;"><input style="width: 100%;" id="last_name" type="text" name="last_name" value="'.$current_user->user_lastname.'" /></div>
389
  <div style="clear: left; width: 100%;">
390
+ <div>'.__("A password will be e-mailed to this address:",'gotmls').(strlen($reg_email_key) == 32 && $reg_email_key != md5($current_user->user_email)?'<br /><span style="color: #C00;">'.__("Note: The pre-populated email below is NOT the address this site is currently registered under!",'gotmls').'</span>':"").'</div>
391
  <input style="width: 100%;" id="user_email" type="text" name="user_email" value="'.$current_user->user_email.'" /></div>
392
  <div>
393
  <div>'.__("Your WordPress Site URL:",'gotmls').'</div>
642
  $Q_Page = '
643
  <form method="POST" action="'.admin_url('admin-ajax.php?'.GOTMLS_set_nonce(__FUNCTION__."645")).(isset($_SERVER["QUERY_STRING"])&&strlen($_SERVER["QUERY_STRING"])?"&".$_SERVER["QUERY_STRING"]:"").'" target="GOTMLS_iFrame" name="GOTMLS_Form_clean"><input type="hidden" id="GOTMLS_fixing" name="GOTMLS_fixing" value="1"><input type="hidden" name="action" value="GOTMLS_fix">';
644
  if ($my_query->have_posts()) {
645
+ $Q_Page .= '<p id="quarantine_buttons" style="display: none;"><input id="repair_button" type="submit" value="'.__("Restore selected files",'gotmls').'" class="button-primary" onclick="if (confirm(\''.__("Are you sure you want to overwrite the previously cleaned files with the selected files in the Quarantine?",'gotmls').'\')) { setvalAllFiles(1); loadIframe(\'File Restoration Results\'); } else return false;" /><input id="delete_button" type="submit" class="button-primary" value="'.__("Delete selected files",'gotmls').'" onclick="if (confirm(\''.__("Are you sure you want to permanently delete the selected files in the Quarantine?",'gotmls').'\')) { setvalAllFiles(2); loadIframe(\'File Deletion Results\'); } else return false;" /></p><p><b>'.__("The following items highlighted in yellow had been found to contain malicious code, they have been cleaned and the malicious contents have been removed. A record of the infection has been saved here in the Quarantine for your review and could help with any future investigations. The code is safe here and you do not need to do anything further with these files.",'gotmls').'</b></p>
646
+ <p id="reclean_buttons" style="display: none;"><input id="reclean_button" type="submit" value="'.__("Re-clean re-infected files",'gotmls').'" class="button-primary" onclick="checkAllFiles(false); setvalAllFiles(1); loadIframe(\'Reinfected File Recleaning Results\');" /><b>'.__("The items highlighted in red have been found to be re-infected. The malicious code has returned and needs to be cleaned again.",'gotmls').'</b></p>
647
  <ul name="found_Quarantine" id="found_Quarantine" class="GOTMLS_plugin known" style="background-color: #ccc; padding: 0;"><h3 style="margin: 8px 12px;">'.($my_query->post_count>1?'<input type="checkbox" onchange="checkAllFiles(this.checked); document.getElementById(\'quarantine_buttons\').style.display = \'block\';"> '.sprintf(__("Check all %d",'gotmls'),$my_query->post_count):"").__(" Items in Quarantine",'gotmls').'<span class="GOTMLS_date">'.__("Quarantined",'gotmls').'</span><span class="GOTMLS_date">'.__("Date Infected",'gotmls').'</span></h3>';
648
  $root_path = implode(GOTMLS_slash(), array_slice(GOTMLS_explode_dir(__FILE__), 0, (2 + intval($GLOBALS["GOTMLS"]["tmp"]["settings_array"]["scan_level"])) * -1));
649
  while ($my_query->have_posts()) {
650
  $my_query->the_post();
651
+ $gif = 'blocked.gif';
652
+ $threat = 'potential';
653
+ $action = $post->ID.'" id="check_'.$post->ID.'" onchange="document.getElementById(\'quarantine_buttons\').style.display = \'block\';';
654
+ $link = GOTMLS_error_link(__("The current/live file is missing or deleted",'gotmls'), $post->ID, $threat);
655
+ if (is_file($post->post_title)) {
656
+ GOTMLS_scanfile($post->post_title);
657
+ if (count($GLOBALS["GOTMLS"]["tmp"]["threats_found"])) {
658
+ $gif = 'threat.gif" onload="document.getElementById(\'reclean_buttons\').style.display = \'block\';';
659
+ $threat = 'known';
660
+ $action = GOTMLS_encode(realpath($post->post_title)).'" id="ilist_'.$post->ID.'" checked="true';
661
+ }
662
+ $link = GOTMLS_error_link(__("View current/live version",'gotmls'), $post->post_title, $threat);
663
+ } elseif (is_array($postdb = explode(":", $post->post_title.":")) && count($postdb) > 3 && is_numeric($postdb[1])) {
664
+ $link = '<a target="_blank" href="';
665
+ if ("revision" == $postdb[0])
666
+ $link .= admin_url('revision.php?revision='.$postdb[1])."\" title=\"View this revision";
667
+ else
668
+ $link .= admin_url('post.php?action=edit&post='.$postdb[1])."\" title=\"View current ".$postdb[0];
669
+ $link .= "\" id=\"list_edit_$postdb[1]\" class=\"GOTMLS_plugin $threat\">";
670
+ }
671
  $Q_Page .= '
672
+ <li id="GOTMLS_quarantine_'.$post->ID.'" class="GOTMLS_quarantine_item" onmouseover="this.style.fontWeight=\'bold\';" onmouseout="this.style.fontWeight=\'normal\';"><span class="GOTMLS_date">'.GOTMLS_error_link(__("View Quarantine Record",'gotmls'), $post->ID, $threat).$post->post_date_gmt.'</a></span><span class="GOTMLS_date">'.$post->post_modified_gmt.'</span><input type="checkbox" name="GOTMLS_fix[]" value="'.$action.'" /><img src="'.GOTMLS_images_path.$gif.'" height=16 width=16 alt="Q">'.$link.str_replace($root_path, "...", $post->post_title)."</a></li>\n";
673
  }
674
  $Q_Page .= "\n</ul>";
675
  for ($p = 1; $p <= $my_query->max_num_pages; $p++) {
705
  $patch_attr = array(
706
  array(
707
  "icon" => "blocked",
708
+ "language" => "<b>".__("(This patch only works under Apache servers and requires mod_rewrite and session_start to be active and functional)",'gotmls')."</b><br />\n".__("Your WordPress Login page is susceptible to a brute-force attack (just like any other login page). These types of attacks are becoming more prevalent these days and can sometimes cause your server to become slow or unresponsive, even if the attacks do not succeed in gaining access to your site. Applying this patch will block access to the WordPress Login page whenever this type of attack is detected.",'gotmls'),
709
+ "status" => __('Not Installed','gotmls'),
710
+ "action" => __('Install Patch','gotmls')
711
  ),
712
  array(
713
+ "language" => __("Your WordPress site has the current version of my brute-force Login protection installed.",'gotmls'),
714
+ "action" => __('Uninstall Patch','gotmls'),
715
+ "status" => __('Enabled','gotmls'),
716
  "icon" => "checked"
717
  ),
718
  array(
719
+ "language" => __("Your WordPress Login page has the old version of my brute-force protection installed. Upgrade this patch to improve the protection on the WordPress Login page and preserve the integrity of your WordPress core files.",'gotmls'),
720
+ "action" => __('Upgrade Patch','gotmls'),
721
+ "status" => __('Out of Date','gotmls'),
722
  "icon" => "threat"
723
  )
724
  );
readme.txt CHANGED
@@ -5,10 +5,10 @@ Author URI: http://wordpress.ieonly.com/category/my-plugins/anti-malware/
5
  Contributors: scheeeli, gotmls
6
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZHD8QHZ2E7PE
7
  Tags: security, firewall, anti-malware, scanner, automatic, repair, remove, malware, virus, threat, hacked, malicious, infection, timthumb, exploit, block, brute-force, wp-login, patch, antimalware, revslider, Revolution Slider
8
- Version: 4.18.63
9
- Stable tag: 4.18.63
10
  Requires at least: 3.3
11
- Tested up to: 5.1.1
12
 
13
  This Anti-Malware scanner searches for Malware, Viruses, and other security threats and vulnerabilities on your server and it helps you fix them.
14
 
@@ -27,7 +27,7 @@ This Anti-Malware scanner searches for Malware, Viruses, and other security thre
27
  * Check the integrity of your WordPress Core files.
28
  * Automatically download new Definition Updates when running a Complete Scan.
29
 
30
- Updated Mar 18th
31
 
32
  Register this plugin at [GOTMLS.NET](http://gotmls.net/) and get access to new definitions of "Known Threats" and added features like Automatic Removal, plus patches for specific security vulnerabilities like old versions of timthumb. Updated definition files can be downloaded automatically within the admin once your Key is registered. Otherwise, this plugin just scans for "Potential Threats" and leaves it up to you to identify and remove the malicious ones.
33
 
@@ -94,8 +94,16 @@ sucuri.net caches their scan results and will not refresh the scan until you cli
94
 
95
  == Changelog ==
96
 
 
 
 
 
 
 
 
 
97
  = 4.18.63 =
98
- Fixed a major bug in the Firewall updates that could cause a False Positive lockout.
99
 
100
  = 4.18.62 =
101
  * Fixed a bug in the Firewall that prevented some iPad devices from logging in.
@@ -359,6 +367,9 @@ Fixed a major bug in the Firewall updates that could cause a False Positive lock
359
 
360
  == Upgrade Notice ==
361
 
 
 
 
362
  = 4.18.63 =
363
  Fixed a major bug in the Firewall updates that could cause a False Positive lockout.
364
 
5
  Contributors: scheeeli, gotmls
6
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZHD8QHZ2E7PE
7
  Tags: security, firewall, anti-malware, scanner, automatic, repair, remove, malware, virus, threat, hacked, malicious, infection, timthumb, exploit, block, brute-force, wp-login, patch, antimalware, revslider, Revolution Slider
8
+ Version: 4.18.69
9
+ Stable tag: 4.18.69
10
  Requires at least: 3.3
11
+ Tested up to: 5.2
12
 
13
  This Anti-Malware scanner searches for Malware, Viruses, and other security threats and vulnerabilities on your server and it helps you fix them.
14
 
27
  * Check the integrity of your WordPress Core files.
28
  * Automatically download new Definition Updates when running a Complete Scan.
29
 
30
+ Updated Apr 29th
31
 
32
  Register this plugin at [GOTMLS.NET](http://gotmls.net/) and get access to new definitions of "Known Threats" and added features like Automatic Removal, plus patches for specific security vulnerabilities like old versions of timthumb. Updated definition files can be downloaded automatically within the admin once your Key is registered. Otherwise, this plugin just scans for "Potential Threats" and leaves it up to you to identify and remove the malicious ones.
33
 
94
 
95
  == Changelog ==
96
 
97
+ = 4.18.69 =
98
+ * Added a Warning message about the vulnerability in the yuzo-related-post plugin.
99
+ * Updated the Quarantine interface and added a re-scan / re-clean feature.
100
+ * Fixed a bug in the scan depth array that would produce PHP Notices in the error_log files under certain conditions.
101
+ * Changed some wording and other minor fomatting issues.
102
+ * Removed some outdated JavaScript that is no longer needed.
103
+ * Checked code for compatibility with WP 5.2 (latest release).
104
+
105
  = 4.18.63 =
106
+ * Fixed a major bug in the Firewall updates that could cause a False Positive lockout.
107
 
108
  = 4.18.62 =
109
  * Fixed a bug in the Firewall that prevented some iPad devices from logging in.
367
 
368
  == Upgrade Notice ==
369
 
370
+ = 4.18.69 =
371
+ Added a Warning message about the vulnerability in the yuzo-related-post plugin, updated the Quarantine interface with a re-scan / re-clean feature, fixed a bug in the scan depth array that would produce PHP Notices, changed some wording and other minor fomatting issues, and checked code for compatibility with WP 5.2 (latest release).
372
+
373
  = 4.18.63 =
374
  Fixed a major bug in the Firewall updates that could cause a False Positive lockout.
375