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

Version Description

  • Added fall-back to manual updates if the Automatic update feature fails.
  • Fixed PHP Notices about undefined variable added in last Version release.
  • Improved Apache version detection.
Download this release

Release Info

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

Code changes from version 4.16.47 to 4.16.48

Files changed (3) hide show
  1. images/index.php +15 -8
  2. index.php +19 -17
  3. readme.txt +11 -3
images/index.php CHANGED
@@ -35,7 +35,7 @@ $GLOBALS["GOTMLS"] = array(
35
  "skip_ext"=>array("png", "jpg", "jpeg", "gif", "bmp", "tif", "tiff", "psd", "svg", "ico", "doc", "docx", "ttf", "fla", "flv", "mov", "mp3", "pdf", "css", "pot", "po", "mo", "so", "exe", "zip", "7z", "gz", "rar"),
36
  "execution_time" => 60,
37
  "default" => array("msg_position" => array("80px", "40px", "400px", "600px")),
38
- "Definition" => array("default" => "CCIGG"),
39
  "definitions_array" => array(
40
  "potential"=>array(
41
  $bad[0]=>array("CCIGG", "/[^a-z_\\/'\"]".$bad[0]."\\(.+\\)+\\s*;/i"),
@@ -966,10 +966,11 @@ function GOTMLS_scan_log() {
966
 
967
  function GOTMLS_get_URL($URL) {
968
  $response = "";
 
969
  if (function_exists($method = "wp_remote_get")) {
970
- $request = wp_remote_get($URL, array("sslverify" => false));
971
- if (200 == wp_remote_retrieve_response_code($request))
972
- $response = wp_remote_retrieve_body($request);
973
  }
974
  if (strlen($response) == 0 && function_exists($method = "curl_exec")) {
975
  $curl_hndl = curl_init();
@@ -990,12 +991,18 @@ function GOTMLS_get_URL($URL) {
990
  curl_setopt($curl_hndl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
991
  curl_setopt($curl_hndl, CURLOPT_HEADER, 0);
992
  curl_setopt($curl_hndl, CURLOPT_RETURNTRANSFER, TRUE);
993
- $response = curl_exec($curl_hndl);
 
994
  curl_close($curl_hndl);
995
  }
996
- if (strlen($response) == 0 && function_exists($method = "file_get_contents"))
997
- $response = @file_get_contents($URL).'';
 
 
 
 
 
998
  if (isset($_GET["GOTMLS_debug"]) && (strlen($response) == 0 || $_GET["GOTMLS_debug"] == "GOTMLS_get_URL"))
999
- print_r(array("$method"=>$request, "$URL"=>$response));
1000
  return $response;
1001
  }
35
  "skip_ext"=>array("png", "jpg", "jpeg", "gif", "bmp", "tif", "tiff", "psd", "svg", "ico", "doc", "docx", "ttf", "fla", "flv", "mov", "mp3", "pdf", "css", "pot", "po", "mo", "so", "exe", "zip", "7z", "gz", "rar"),
36
  "execution_time" => 60,
37
  "default" => array("msg_position" => array("80px", "40px", "400px", "600px")),
38
+ "Definition" => array("Default" => "CCIGG"),
39
  "definitions_array" => array(
40
  "potential"=>array(
41
  $bad[0]=>array("CCIGG", "/[^a-z_\\/'\"]".$bad[0]."\\(.+\\)+\\s*;/i"),
966
 
967
  function GOTMLS_get_URL($URL) {
968
  $response = "";
969
+ $GLOBALS["GOTMLS"]["get_URL"] = array("URL" => $URL);
970
  if (function_exists($method = "wp_remote_get")) {
971
+ $GLOBALS["GOTMLS"]["get_URL"][$method] = wp_remote_get($URL, array("sslverify" => false));
972
+ if (200 == wp_remote_retrieve_response_code($GLOBALS["GOTMLS"]["get_URL"][$method]))
973
+ $response = wp_remote_retrieve_body($GLOBALS["GOTMLS"]["get_URL"][$method]);
974
  }
975
  if (strlen($response) == 0 && function_exists($method = "curl_exec")) {
976
  $curl_hndl = curl_init();
991
  curl_setopt($curl_hndl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
992
  curl_setopt($curl_hndl, CURLOPT_HEADER, 0);
993
  curl_setopt($curl_hndl, CURLOPT_RETURNTRANSFER, TRUE);
994
+ if (!($response = curl_exec($curl_hndl)))
995
+ $GLOBALS["GOTMLS"]["get_URL"][$method] = curl_error($curl_hndl);
996
  curl_close($curl_hndl);
997
  }
998
+ if (strlen($response) == 0 && function_exists($method = "file_get_contents")) {
999
+ try {
1000
+ $response = @file_get_contents($URL).'';
1001
+ } catch(Exception $e) {
1002
+ $GLOBALS["GOTMLS"]["get_URL"][$method] = $e->getTrace();
1003
+ }
1004
+ }
1005
  if (isset($_GET["GOTMLS_debug"]) && (strlen($response) == 0 || $_GET["GOTMLS_debug"] == "GOTMLS_get_URL"))
1006
+ print_r(array("$method:".strlen($response)=>$GLOBALS["GOTMLS"]["get_URL"]));
1007
  return $response;
1008
  }
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.16.47
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-2016 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
@@ -128,6 +128,8 @@ function GOTMLS_display_header($optional_box = "") {
128
  $php_version = "<li>PHP: <span class='GOTMLS_date'>".phpversion()."</span></li>\n";
129
  if (isset($_SERVER["SERVER_SOFTWARE"]) && preg_match('/Apache\/([0-9\.]+)/i', $_SERVER["SERVER_SOFTWARE"], $GLOBALS["GOTMLS"]["tmp"]["apache"]) && count($GLOBALS["GOTMLS"]["tmp"]["apache"]) > 1)
130
  $php_version .= "<li>Apache: <span class='GOTMLS_date'>".$GLOBALS["GOTMLS"]["tmp"]["apache"][1]."</span></li>\n";
 
 
131
  echo '
132
  span.GOTMLS_date {float: right; width: 130px; white-space: nowrap;}
133
  .GOTMLS_page {float: left; border-radius: 10px; padding: 0 5px;}
@@ -383,9 +385,10 @@ setDiv("div_file");
383
  <input style="width: 100%;" id="installation_key" type="text" name="installation_key" value="'.GOTMLS_installation_key.'" readonly /><input id="old_key" type="hidden" name="old_key" value="'.md5($GOTMLS_url_parts[2]).'" /></div>
384
  <input style="width: 100%;" id="wp-submit" type="submit" name="wp-submit" value="Register Now!" /></form></div>'.$Update_Link, "stuffbox").'
385
  <script type="text/javascript">
 
386
  function check_for_updates(update_type) {
387
  showhide(update_type, true);
388
- stopCheckingDefinitions = checkupdateserver("'.$Update_Definitions[0].'", update_type, "'.$Update_Definitions[1].'");
389
  }
390
  function updates_complete(chk) {
391
  if (auto_img = document.getElementById("autoUpdateDownload")) {
@@ -740,12 +743,11 @@ function GOTMLS_Firewall_Options() {
740
  )
741
  );
742
  $find = '|<Files[^>]+xmlrpc.php>(.+?)</Files>\s*(# END GOTMLS Patch to Block XMLRPC Access\s*)*|is';
 
 
743
  if (count($GLOBALS["GOTMLS"]["tmp"]["apache"]) > 1) {
744
  $errdiv = "<!-- ".$GLOBALS["GOTMLS"]["tmp"]["apache"][0]." -->";
745
- if (version_compare($GLOBALS["GOTMLS"]["tmp"]["apache"][1], "2.4", "<")) {
746
- $deny = "\norder deny,allow\ndeny from all";
747
- $allow = "\nallow from";
748
- } else {
749
  $deny = "\nRequire";
750
  $allow = "";
751
  }
@@ -900,7 +902,7 @@ function GOTMLS_update_definitions() {
900
  $toInfo = $current_user->user_email;
901
  elseif (!($toInfo = $wpdb->get_var("SELECT `user_nicename` FROM $wpdb->users WHERE MD5(`user_email`) = '".$user_info["user_email"]."'")))
902
  $toInfo = get_option("siteurl");
903
- $innerHTML = "<li style=\\\"color: #090\\\">Your Installation Key is Registered to:<br /> $toInfo</li>";
904
  $finJS .= "\nif (divNAtext)\n\tloadGOTMLS();\nelse\n\tdivNAtext = setTimeout('loadGOTMLS()', 4000);";
905
  $form = 'autoUpdateForm';
906
  if (isset($user_info["user_donations"]) && isset($user_info["user_donation_total"]) && isset($user_info["user_donation_freshness"])) {
@@ -924,7 +926,9 @@ function GOTMLS_update_definitions() {
924
  $GLOBALS["GOTMLS"]["tmp"]["definitions_array"] = $GOTnew_definitions;
925
  $GLOBALS["GOTMLS"]["tmp"]["onLoad"] .= "updates_complete('New Definitions Automatically Installed :-)');";
926
  }
927
- }
 
 
928
  }
929
  if (isset($GOTnew_definitions) && is_array($GOTnew_definitions)) {
930
  $GLOBALS["GOTMLS"]["tmp"]["definitions_array"] = GOTMLS_array_replace_recursive($GLOBALS["GOTMLS"]["tmp"]["definitions_array"], $GOTnew_definitions);
@@ -939,11 +943,11 @@ function GOTMLS_update_definitions() {
939
  if (!isset($GOTMLS_definitions_versions[$threat_level]) || $definition_version[0] > $GOTMLS_definitions_versions[$threat_level])
940
  $GOTMLS_definitions_versions[$threat_level] = $definition_version[0];
941
  asort($GOTMLS_definitions_versions);
942
- $autoUpJS .= '<span style="color: #090;">(Newest Definition Updates Installed.)</span>';
943
  } else {
944
  $form = 'autoUpdateDownload';
945
- $autoUpJS .= '<span style="color: #090;">(No newer Definition Updates are available at this time.)</span>';
946
- $innerHTML .= "<li style=\\\"color: #090\\\">No Newer Definition Updates Available.</li>";
947
  }
948
  if (isset($_SERVER["SCRIPT_FILENAME"]) && preg_match('/\/admin-ajax\.php/i', $_SERVER["SCRIPT_FILENAME"]) && isset($_REQUEST["action"]) && $_REQUEST["action"] == "GOTMLS_auto_update") {
949
  if (!$user_donations_src)
@@ -954,10 +958,10 @@ function GOTMLS_update_definitions() {
954
  $moreJS .= "\n\tif (foundUpdates = document.getElementById('pastDonations'))\n\tfoundUpdates.innerHTML = '$li';";
955
  @header("Content-type: text/javascript");
956
  if (is_array($GOTMLS_definitions_versions) && count($GOTMLS_definitions_versions) && (strlen($new_ver = trim(array_pop($GOTMLS_definitions_versions))) == 5) && $saved) {
957
- $innerHTML .= "<li style=\\\"color: #090\\\">New Definition Updates Installed.</li>";
958
- $finJS .= "if (foundUpdates = document.getElementById('GOTMLS_definitions_date')) foundUpdates.innerHTML = '$new_ver';";
959
  } elseif (is_array($GOTnew_definitions) && count($GOTnew_definitions))
960
- $finJS .= "alert('Definition update $new_ver could not be saved because update_option Failed! $debug');";
961
  die('//<![CDATA[
962
  var inc_form = "";
963
  if (foundUpdates = document.getElementById("autoUpdateDownload"))
@@ -971,8 +975,6 @@ if (foundUpdates = document.getElementById("Definition_Updates"))
971
  function setDivNAtext() {
972
  var foundUpdates;
973
  '.$moreJS.$finJS.'
974
- if (typeof stopCheckingDefinitions !== "undefined")
975
- clearTimeout(stopCheckingDefinitions);
976
  if (foundUpdates = document.getElementById("UPDATE_definitions_div"))
977
  foundUpdates.innerHTML = \''.$autoUpJS.'\';
978
  //]]>');
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.16.48
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-2017 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
128
  $php_version = "<li>PHP: <span class='GOTMLS_date'>".phpversion()."</span></li>\n";
129
  if (isset($_SERVER["SERVER_SOFTWARE"]) && preg_match('/Apache\/([0-9\.]+)/i', $_SERVER["SERVER_SOFTWARE"], $GLOBALS["GOTMLS"]["tmp"]["apache"]) && count($GLOBALS["GOTMLS"]["tmp"]["apache"]) > 1)
130
  $php_version .= "<li>Apache: <span class='GOTMLS_date'>".$GLOBALS["GOTMLS"]["tmp"]["apache"][1]."</span></li>\n";
131
+ elseif (isset($_SERVER["SERVER_SOFTWARE"]) && strlen($_SERVER["SERVER_SOFTWARE"]))
132
+ $php_version .= "<li>".$_SERVER["SERVER_SOFTWARE"]."</li>\n";
133
  echo '
134
  span.GOTMLS_date {float: right; width: 130px; white-space: nowrap;}
135
  .GOTMLS_page {float: left; border-radius: 10px; padding: 0 5px;}
385
  <input style="width: 100%;" id="installation_key" type="text" name="installation_key" value="'.GOTMLS_installation_key.'" readonly /><input id="old_key" type="hidden" name="old_key" value="'.md5($GOTMLS_url_parts[2]).'" /></div>
386
  <input style="width: 100%;" id="wp-submit" type="submit" name="wp-submit" value="Register Now!" /></form></div>'.$Update_Link, "stuffbox").'
387
  <script type="text/javascript">
388
+ var alt_addr = "'.$Update_Definitions[1].'";
389
  function check_for_updates(update_type) {
390
  showhide(update_type, true);
391
+ stopCheckingDefinitions = checkupdateserver("'.$Update_Definitions[0].'", update_type, alt_addr);
392
  }
393
  function updates_complete(chk) {
394
  if (auto_img = document.getElementById("autoUpdateDownload")) {
743
  )
744
  );
745
  $find = '|<Files[^>]+xmlrpc.php>(.+?)</Files>\s*(# END GOTMLS Patch to Block XMLRPC Access\s*)*|is';
746
+ $deny = "\norder deny,allow\ndeny from all";
747
+ $allow = "\nallow from";
748
  if (count($GLOBALS["GOTMLS"]["tmp"]["apache"]) > 1) {
749
  $errdiv = "<!-- ".$GLOBALS["GOTMLS"]["tmp"]["apache"][0]." -->";
750
+ if (!version_compare($GLOBALS["GOTMLS"]["tmp"]["apache"][1], "2.4", "<")) {
 
 
 
751
  $deny = "\nRequire";
752
  $allow = "";
753
  }
902
  $toInfo = $current_user->user_email;
903
  elseif (!($toInfo = $wpdb->get_var("SELECT `user_nicename` FROM $wpdb->users WHERE MD5(`user_email`) = '".$user_info["user_email"]."'")))
904
  $toInfo = get_option("siteurl");
905
+ $innerHTML = "<li style=\\\"color: #0C0\\\">Your Installation Key is Registered to:<br /> $toInfo</li>";
906
  $finJS .= "\nif (divNAtext)\n\tloadGOTMLS();\nelse\n\tdivNAtext = setTimeout('loadGOTMLS()', 4000);";
907
  $form = 'autoUpdateForm';
908
  if (isset($user_info["user_donations"]) && isset($user_info["user_donation_total"]) && isset($user_info["user_donation_freshness"])) {
926
  $GLOBALS["GOTMLS"]["tmp"]["definitions_array"] = $GOTnew_definitions;
927
  $GLOBALS["GOTMLS"]["tmp"]["onLoad"] .= "updates_complete('New Definitions Automatically Installed :-)');";
928
  }
929
+ $finJS .= "\nif (typeof stopCheckingDefinitions !== 'undefined')\n\tclearTimeout(stopCheckingDefinitions);";
930
+ } else
931
+ $innerHTML = "<li style=\\\"color: #f00\\\"><a title='report error' href='#' onclick=\\\"stopCheckingDefinitions = checkupdateserver(alt_addr+'&error=".GOTMLS_encode(serialize(array("get_URL"=>$GLOBALS["GOTMLS"]["get_URL"])))."', 'Definition_Updates');\\\">Automatic Update Connection Failed!</a></li>";
932
  }
933
  if (isset($GOTnew_definitions) && is_array($GOTnew_definitions)) {
934
  $GLOBALS["GOTMLS"]["tmp"]["definitions_array"] = GOTMLS_array_replace_recursive($GLOBALS["GOTMLS"]["tmp"]["definitions_array"], $GOTnew_definitions);
943
  if (!isset($GOTMLS_definitions_versions[$threat_level]) || $definition_version[0] > $GOTMLS_definitions_versions[$threat_level])
944
  $GOTMLS_definitions_versions[$threat_level] = $definition_version[0];
945
  asort($GOTMLS_definitions_versions);
946
+ $autoUpJS .= '<span style="color: #0C0;">(Newest Definition Updates Installed.)</span>';
947
  } else {
948
  $form = 'autoUpdateDownload';
949
+ $autoUpJS .= '<span style="color: #0C0;">(No newer Definition Updates are available at this time.)</span>';
950
+ $innerHTML .= "<li style=\\\"color: #0C0\\\">No Newer Definition Updates Available.</li>";
951
  }
952
  if (isset($_SERVER["SCRIPT_FILENAME"]) && preg_match('/\/admin-ajax\.php/i', $_SERVER["SCRIPT_FILENAME"]) && isset($_REQUEST["action"]) && $_REQUEST["action"] == "GOTMLS_auto_update") {
953
  if (!$user_donations_src)
958
  $moreJS .= "\n\tif (foundUpdates = document.getElementById('pastDonations'))\n\tfoundUpdates.innerHTML = '$li';";
959
  @header("Content-type: text/javascript");
960
  if (is_array($GOTMLS_definitions_versions) && count($GOTMLS_definitions_versions) && (strlen($new_ver = trim(array_pop($GOTMLS_definitions_versions))) == 5) && $saved) {
961
+ $innerHTML .= "<li style=\\\"color: #0C0\\\">New Definition Updates Installed.</li>";
962
+ $finJS .= "\nif (foundUpdates = document.getElementById('GOTMLS_definitions_date')) foundUpdates.innerHTML = '$new_ver';";
963
  } elseif (is_array($GOTnew_definitions) && count($GOTnew_definitions))
964
+ $finJS .= "\nalert('Definition update $new_ver could not be saved because update_option Failed! $debug');";
965
  die('//<![CDATA[
966
  var inc_form = "";
967
  if (foundUpdates = document.getElementById("autoUpdateDownload"))
975
  function setDivNAtext() {
976
  var foundUpdates;
977
  '.$moreJS.$finJS.'
 
 
978
  if (foundUpdates = document.getElementById("UPDATE_definitions_div"))
979
  foundUpdates.innerHTML = \''.$autoUpJS.'\';
980
  //]]>');
readme.txt CHANGED
@@ -5,8 +5,8 @@ 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.16.47
9
- Stable tag: 4.16.47
10
  Requires at least: 3.3
11
  Tested up to: 4.7
12
 
@@ -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 December 27th
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
 
@@ -93,6 +93,11 @@ sucuri.net caches their scan results and will not refresh the scan until you cli
93
 
94
  == Changelog ==
95
 
 
 
 
 
 
96
  = 4.16.47 =
97
  * Changed Automatic update feature to automatically download all definitions and firewall updates.
98
  * Added PHP and Apache version detections and changed the XMLRPC patch to work with Apache 2.4 directives.
@@ -346,6 +351,9 @@ sucuri.net caches their scan results and will not refresh the scan until you cli
346
 
347
  == Upgrade Notice ==
348
 
 
 
 
349
  = 4.16.47 =
350
  Changed Automatic update feature, added PHP and Apache version detections, and removed the onbeforeunload function other code that was deprecated.
351
 
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.16.48
9
+ Stable tag: 4.16.48
10
  Requires at least: 3.3
11
  Tested up to: 4.7
12
 
27
  * Check the integrity of your WordPress Core files.
28
  * Automatically download new Definition Updates when running a Complete Scan.
29
 
30
+ Updated January 4th
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
 
93
 
94
  == Changelog ==
95
 
96
+ = 4.16.48 =
97
+ * Added fall-back to manual updates if the Automatic update feature fails.
98
+ * Fixed PHP Notices about undefined variable added in last Version release.
99
+ * Improved Apache version detection.
100
+
101
  = 4.16.47 =
102
  * Changed Automatic update feature to automatically download all definitions and firewall updates.
103
  * Added PHP and Apache version detections and changed the XMLRPC patch to work with Apache 2.4 directives.
351
 
352
  == Upgrade Notice ==
353
 
354
+ = 4.16.48 =
355
+ Added fall-back to manual updates if the Automatic update feature fails, fixed PHP Notices and improved Apache version detection.
356
+
357
  = 4.16.47 =
358
  Changed Automatic update feature, added PHP and Apache version detections, and removed the onbeforeunload function other code that was deprecated.
359