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

Version Description

  • Enabled the Brute-Force protection option directly from the Settings page.
  • Fixed window position to auto-adjust on small screens.
Download this release

Release Info

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

Code changes from version 4.14.47 to 4.14.50

Files changed (5) hide show
  1. images/index.php +69 -50
  2. index.php +417 -243
  3. languages/gotmls.pot +76 -36
  4. readme.txt +12 -5
  5. safe-load/index.php +1 -1
images/index.php CHANGED
@@ -16,7 +16,7 @@ if (isset($_SERVER["SCRIPT_FILENAME"]) && __FILE__ == $_SERVER["SCRIPT_FILENAME"
16
  @error_reporting(0);
17
 
18
  define("GOTMLS_plugin_dir", "gotmls");
19
- define("GOTMLS_Version", "4.14.47");
20
  define("GOTMLS_require_version", "3.0");
21
  define("GOTMLS_Failed_to_list_LANGUAGE", __("Failed to list files in directory!",'gotmls'));
22
  define("GOTMLS_Run_Complete_Scan_LANGUAGE", __("Run Complete Scan",'gotmls'));
@@ -32,6 +32,9 @@ define("GOTMLS_Plugin_Updates_LANGUAGE", __("Plugin Updates for WP",'gotmls'));
32
  define("GOTMLS_Searching_updates_LANGUAGE", __("Searching for updates ...",'gotmls'));
33
  define("GOTMLS_Definition_Updates_LANGUAGE", __("Definition Updates",'gotmls'));
34
  define("GOTMLS_Please_donate_LANGUAGE", __("Please make a donation for the use of this wonderful feature!",'gotmls'));
 
 
 
35
  define("GOTMLS_update_images_path", "/wp-content/plugins/update/images/");
36
  define("GOTMLS_siteurl", get_option("siteurl"));
37
  if (isset($_SERVER["DOCUMENT_ROOT"]) && strpos($_SERVER["DOCUMENT_ROOT"], GOTMLS_local_images_path) === 0)
@@ -39,16 +42,16 @@ if (isset($_SERVER["DOCUMENT_ROOT"]) && strpos($_SERVER["DOCUMENT_ROOT"], GOTMLS
39
  else
40
  define("GOTMLS_images_path", GOTMLS_siteurl.str_replace("update", basename(dirname(GOTMLS_local_images_path)), GOTMLS_update_images_path));
41
  define("GOTMLS_installation_key", md5(GOTMLS_siteurl));
42
- $GLOBALS["GOTMLS_mt"] = ((isset($_GET["mt"])&&is_numeric($_GET["mt"]))?$_GET["mt"]:microtime(true));
43
- define("GOTMLS_script_URI", preg_replace('/\&(last_)?mt=[0-9\.]+/','', str_replace('&', '&', htmlspecialchars($_SERVER["REQUEST_URI"], ENT_QUOTES))).'&mt='.$GLOBALS["GOTMLS_mt"]);
44
- $GLOBALS["GOTMLS"] = get_option('GOTMLS_scan_log/'.(isset($_SERVER["REMOTE_ADDR"])?$_SERVER["REMOTE_ADDR"]:"0.0.0.0").'/'.$GLOBALS["GOTMLS_mt"], array());
 
45
  $GOTMLS_loop_execution_time = 60;
46
  $GOTMLS_chmod_file = (0644);
47
  $GOTMLS_chmod_dir = (0755);
48
  $GOTMLS_file_contents = "";
49
  $GOTMLS_new_contents = "";
50
  $GOTMLS_onLoad = "";
51
- $GOTMLS_default_ext = "ieonly.";
52
  $GOTMLS_encode = '/[\?\-a-z\: \.\=\/A-Z\&\_]/';
53
  $GOTMLS_threat_files = array("htaccess"=>".htaccess","timthumb"=>"thumb.php");
54
  $GOTMLS_core_files = array("wp_login"=>"/wp-login.php");
@@ -79,7 +82,9 @@ $GOTMLS_total_percent = 0;
79
  $GOTMLS_HeadersError = "";
80
  function GOTMLS_admin_notices() {
81
  global $GOTMLS_HeadersError;
82
- if ($GOTMLS_HeadersError)
 
 
83
  echo $GOTMLS_HeadersError;
84
  }
85
 
@@ -107,11 +112,11 @@ function GOTMLS_array_replace_recursive($array1 = array()) {
107
 
108
  function GOTMLS_update_scan_log($scan_log) {
109
  if (is_array($scan_log)) {
110
- $GLOBALS["GOTMLS"] = GOTMLS_array_replace_recursive($GLOBALS["GOTMLS"], $scan_log);
111
- if (isset($GLOBALS["GOTMLS"]["scan"]["percent"]) && is_numeric($GLOBALS["GOTMLS"]["scan"]["percent"]) && ($GLOBALS["GOTMLS"]["scan"]["percent"] >= 100))
112
- $GLOBALS["GOTMLS"]["scan"]["finish"] = time();
113
- if (isset($GLOBALS["GOTMLS"]["scan"]))
114
- update_option('GOTMLS_scan_log/'.(isset($_SERVER["REMOTE_ADDR"])?$_SERVER["REMOTE_ADDR"]:"0.0.0.0").'/'.$GLOBALS["GOTMLS_mt"], $GLOBALS["GOTMLS"]);
115
  }
116
  }
117
 
@@ -223,7 +228,7 @@ if (isset($_SESSION["GOTMLS_debug"])){ $file_time = round(microtime(true) - $_SE
223
  }
224
 
225
  function GOTMLS_scanfile($file) {
226
- global $GOTMLS_core_files, $wp_version, $GOTMLS_quarantine_dir, $GOTMLS_threat_levels, $GOTMLS_threat_files, $GOTMLS_definitions_array, $GOTMLS_threats_found, $GOTMLS_chmod_file, $GOTMLS_chmod_dir, $GOTMLS_settings_array, $GOTMLS_file_contents, $GOTMLS_new_contents;
227
  $GOTMLS_threats_found = array();
228
  $found = false;
229
  $threat_link = "";
@@ -250,7 +255,7 @@ function GOTMLS_scanfile($file) {
250
  }
251
  }
252
  $GOTMLS_new_contents = $GOTMLS_file_contents;
253
- if (isset($GLOBALS["GOTMLS"]["settings"]["check_custom"]) && strlen($GLOBALS["GOTMLS"]["settings"]["check_custom"]) && isset($_GET['eli']) && substr($GLOBALS["GOTMLS"]["settings"]["check_custom"], 0, 1) == '/' && ($found = GOTMLS_check_threat($GLOBALS["GOTMLS"]["settings"]["check_custom"]))) //don't use this without registration
254
  $className = "known";
255
  else {
256
  if (isset($_SESSION["GOTMLS_debug"])){ $_SESSION["GOTMLS_debug"]["file"] = $file;
@@ -258,7 +263,7 @@ if (isset($_SESSION["GOTMLS_debug"])){ $_SESSION["GOTMLS_debug"]["file"] = $fi
258
  foreach ($GOTMLS_threat_levels as $threat_level) {
259
  if (isset($_SESSION["GOTMLS_debug"])){ $_SESSION["GOTMLS_debug"]["threat_level"] = $threat_level;
260
  $_SESSION["GOTMLS_debug"]["last"]["threat_level"] = microtime(true);}
261
- if (in_array($threat_level, $GLOBALS["GOTMLS"]["settings"]["check"]) && !$found && isset($GOTMLS_definitions_array[$threat_level]) && (!array_key_exists($threat_level,$GOTMLS_core_files) || (substr($file."e", (-1 * strlen($GOTMLS_core_files[$threat_level]."e"))) == $GOTMLS_core_files[$threat_level]."e")) && (!array_key_exists($threat_level,$GOTMLS_threat_files) || ((GOTMLS_get_ext($file) == "gotmls" && isset($_GET["eli"]) && $_GET["eli"] == "quarantine")?(substr(GOTMLS_decode(array_pop(explode(".", '.'.substr($file, strlen(dirname($file))+1, -7))))."e", (-1 * strlen($GOTMLS_threat_files[$threat_level]."e"))) == $GOTMLS_threat_files[$threat_level]."e"):(substr($file."e", (-1 * strlen($GOTMLS_threat_files[$threat_level]."e"))) == $GOTMLS_threat_files[$threat_level]."e"))) && ($found = GOTMLS_check_threat($GOTMLS_definitions_array[$threat_level],$file)))
262
  $className = $threat_level;
263
  }
264
  if (isset($_SESSION["GOTMLS_debug"])){ $file_time = round(microtime(true) - $_SESSION["GOTMLS_debug"]["last"]["total"], 5);
@@ -284,7 +289,7 @@ if (isset($_SESSION["GOTMLS_debug"])){ $file_time = round(microtime(true) - $_
284
  $threat_link = '<a target="GOTMLS_iFrame" href="'.GOTMLS_script_URI.'&GOTMLS_scan='.$clean_file.'" id="list_'.$clean_file.'" onclick="loadIframe(\''.str_replace("\"", "&quot;", '<div style="float: left;">Examine&nbsp;File&nbsp;...&nbsp;</div><div style="overflow: hidden; position: relative; height: 20px;"><div style="position: absolute; right: 0px; text-align: right; width: 9000px;">'.GOTMLS_strip4java($file)).'</div></div>\');" class="GOTMLS_plugin">';
285
  if (isset($_POST["GOTMLS_fix"]) && is_array($_POST["GOTMLS_fix"]) && in_array($clean_file, $_POST["GOTMLS_fix"])) {
286
  $file_date = explode(".", array_pop(GOTMLS_explode_dir($file)));
287
- if (GOTMLS_get_ext($file) == "gotmls" && GOTMLS_trailingslashit($GOTMLS_quarantine_dir) == substr($file, 0, strlen(GOTMLS_trailingslashit($GOTMLS_quarantine_dir)))) {
288
  if ($_POST["GOTMLS_fixing"] > 1 && @unlink($file))
289
  $GOTMLS_file_contents = "";
290
  elseif (count($file_date) > 1 && $GOTMLS_new_contents = @file_get_contents($file))
@@ -336,7 +341,7 @@ if (isset($_SESSION["GOTMLS_debug"])){ $file_time = round(microtime(true) - $_
336
  return GOTMLS_return_threat($className, $imageFile, $file, str_replace("GOTMLS_plugin", "GOTMLS_plugin $className", $threat_link));
337
  } elseif (isset($_POST["GOTMLS_fix"]) && is_array($_POST["GOTMLS_fix"]) && in_array($clean_file, $_POST["GOTMLS_fix"])) {
338
  $file_date = explode(".", array_pop(GOTMLS_explode_dir($file)));
339
- if (GOTMLS_get_ext($file) == "gotmls" && GOTMLS_trailingslashit($GOTMLS_quarantine_dir) == substr($file, 0, strlen(GOTMLS_trailingslashit($GOTMLS_quarantine_dir)))) {
340
  if ($_POST["GOTMLS_fixing"] > 1 && @unlink($file)) {
341
  $GOTMLS_file_contents = "";
342
  $msg = __("Deleted!",'gotmls');
@@ -407,13 +412,27 @@ function GOTMLS_decode($encoded_string) {
407
  return "Cannot decode: $encoded_string";
408
  }
409
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
410
  function GOTMLS_return_threat($className, $imageFile, $fileName, $link = "") {
411
  global $GOTMLS_image_alt;
412
- $fileNameJS = GOTMLS_strip4java(str_replace(dirname($GLOBALS["GOTMLS"]["scan"]["dir"]), "...", $fileName));
413
  $fileName64 = GOTMLS_encode($fileName);
414
  $li_js = "/*-->*"."/";
415
  if ($className != "scanned")
416
- $li_js .= "\n$className++;\ndivx=document.getElementById('found_$className');\nif (divx) {\n\tvar newli = document.createElement('li');\n\tnewli.innerHTML='<img src=\"".GOTMLS_images_path.$imageFile.".gif\" height=16 width=16 alt=\"".$GOTMLS_image_alt[$imageFile]."\" style=\"float: left;\" id=\"$imageFile"."_$fileName64\">".GOTMLS_strip4java($link).$fileNameJS.($link?"</a>';\n\tdivx.display='block';":"';")."\n\tdivx.appendChild(newli);\n}";
417
  if ($className == "errors")
418
  $li_js .= "\ndivx=document.getElementById('wait_$fileName64');\nif (divx) {\n\tdivx.src='".GOTMLS_images_path."blocked.gif';\n\tdirerrors++;\n}";
419
  elseif (is_file($fileName))
@@ -443,30 +462,29 @@ function GOTMLS_explode_dir($dir, $pre = '') {
443
  }
444
 
445
  function GOTMLS_quarantine($file) {
446
- global $GOTMLS_quarantine_dir;
447
- if (!isset($GOTMLS_quarantine_dir)) {
448
  $upload = wp_upload_dir();
449
  $err403 = '<html><head><title>403 Forbidden</title></head><body><h1>Forbidden</h1><p>You don\'t have permission to access this directory.</p></body></html>';
450
- $GOTMLS_quarantine_dir = GOTMLS_trailingslashit($upload['basedir']).'quarantine';
451
- if (!is_dir($GOTMLS_quarantine_dir) && !@mkdir($GOTMLS_quarantine_dir))
452
- $GOTMLS_quarantine_dir = $upload['basedir'];
453
  if (is_file(GOTMLS_trailingslashit($upload['basedir']).'.htaccess') && file_get_contents(GOTMLS_trailingslashit($upload['basedir']).'.htaccess') == 'Options -Indexes')
454
  if (!@unlink(GOTMLS_trailingslashit($upload['basedir']).'.htaccess'))
455
  @GOTMLS_file_put_contents(GOTMLS_trailingslashit($upload['basedir']).'.htaccess', '');
456
- if (!is_file(GOTMLS_trailingslashit($GOTMLS_quarantine_dir).'.htaccess'))
457
- @GOTMLS_file_put_contents(GOTMLS_trailingslashit($GOTMLS_quarantine_dir).'.htaccess', 'Options -Indexes');
458
  if (!is_file(GOTMLS_trailingslashit($upload['basedir']).'index.php'))
459
  @GOTMLS_file_put_contents(GOTMLS_trailingslashit($upload['basedir']).'index.php', $err403);
460
- if (!is_file(GOTMLS_trailingslashit($GOTMLS_quarantine_dir).'index.php'))
461
- @GOTMLS_file_put_contents(GOTMLS_trailingslashit($GOTMLS_quarantine_dir).'index.php', $err403);
462
  }
463
- return GOTMLS_trailingslashit($GOTMLS_quarantine_dir).GOTMLS_sexagesimal().'.'.GOTMLS_encode($file).'.GOTMLS';
464
  }
465
 
466
  function GOTMLS_update_status($status, $percent = -1) {
467
- if (!(isset($GLOBALS["GOTMLS"]["scan"]["start"]) && is_numeric($GLOBALS["GOTMLS"]["scan"]["start"])))
468
- $GLOBALS["GOTMLS"]["scan"]["start"] = time();
469
- $microtime = ceil(time()-$GLOBALS["GOTMLS"]["scan"]["start"]);
470
  GOTMLS_update_scan_log(array("scan" => array("microtime" => $microtime, "percent" => $percent)));
471
  return "/*-->*"."/\nupdate_status('".GOTMLS_strip4java($status)."', $microtime, $percent);\n/*<!--*"."/";
472
  }
@@ -487,12 +505,12 @@ function GOTMLS_flush($tag = "") {
487
  }
488
 
489
  function GOTMLS_readdir($dir, $current_depth = 1) {
490
- global $GOTMLS_quarantine_dir, $GOTMLS_loop_execution_time, $GOTMLS_scanfiles, $GOTMLS_skip_dirs, $GOTMLS_skip_ext, $GOTMLS_dirs_at_depth, $GOTMLS_dir_at_depth, $GOTMLS_total_percent;
491
- if ($dir != $GOTMLS_quarantine_dir || $current_depth == 1) {
492
  @set_time_limit($GOTMLS_loop_execution_time);
493
  $entries = GOTMLS_getfiles($dir);
494
  if (is_array($entries)) {
495
- echo GOTMLS_return_threat("dirs", "wait", $dir).GOTMLS_update_status(sprintf(__("Preparing %s",'gotmls'), str_replace(dirname($GLOBALS["GOTMLS"]["scan"]["dir"]), "...", $dir)), $GOTMLS_total_percent);
496
  $files = array();
497
  $directories = array();
498
  foreach ($entries as $entry) {
@@ -511,7 +529,7 @@ function GOTMLS_readdir($dir, $current_depth = 1) {
511
  $GOTMLS_dirs_at_depth[$current_depth] = count($directories);
512
  $GOTMLS_dir_at_depth[$current_depth] = 0;
513
  } else
514
- $GOTMLS_scanfiles[GOTMLS_encode($dir)] = GOTMLS_strip4java(str_replace(dirname($GLOBALS["GOTMLS"]["scan"]["dir"]), "...", $dir));
515
  foreach ($directories as $directory) {
516
  $path = GOTMLS_trailingslashit($dir).$directory;
517
  if (isset($_REQUEST["scan_depth"]) && is_numeric($_REQUEST["scan_depth"]) && ($_REQUEST["scan_depth"] != $current_depth) && !in_array($directory, $GOTMLS_skip_dirs)) {
@@ -524,7 +542,7 @@ function GOTMLS_readdir($dir, $current_depth = 1) {
524
  }
525
  if ($_REQUEST["scan_type"] == "Quick Scan") {
526
  $echo = "";
527
- echo GOTMLS_update_status(sprintf(__("Scanning %s",'gotmls'), str_replace(dirname($GLOBALS["GOTMLS"]["scan"]["dir"]), "...", $dir)), $GOTMLS_total_percent);
528
  GOTMLS_flush("script");
529
  foreach ($files as $file)
530
  echo GOTMLS_check_file(GOTMLS_trailingslashit($dir).$file);
@@ -541,7 +559,7 @@ function GOTMLS_readdir($dir, $current_depth = 1) {
541
  echo "$GOTMLS_total_percent\n";
542
  }
543
  $GOTMLS_total_percent = floor($GOTMLS_total_percent * 100);
544
- echo GOTMLS_update_status(sprintf(__("Scanned %s",'gotmls'), str_replace(dirname($GLOBALS["GOTMLS"]["scan"]["dir"]), "...", $dir)), $GOTMLS_total_percent);
545
  }
546
  GOTMLS_flush("script");
547
  }
@@ -572,7 +590,7 @@ if (!function_exists('ur1encode')) { function ur1encode($url) {
572
  }}
573
 
574
  function GOTMLS_strip4java($item) {
575
- return preg_replace("/\\\\/", "\\\\\\\\", preg_replace("/(?<!\\\\)'/", "'+\"'\"+'", str_replace("\n", "", $item)));
576
  }
577
 
578
  function GOTMLS_error_link($errorTXT, $file = "", $class = "errors") {
@@ -601,7 +619,7 @@ function GOTMLS_check_file($file) {
601
  try {
602
  echo @GOTMLS_scanfile($file);
603
  } catch (Exception $e) {
604
- die("//Exception:".$e);
605
  }
606
  }
607
  echo "/*-->*"."/\ndocument.getElementById('status_text').innerHTML='Checked ".GOTMLS_strip4java($file)."';\n/*<!--*"."/";
@@ -609,7 +627,7 @@ function GOTMLS_check_file($file) {
609
 
610
  function GOTMLS_scandir($dir) {
611
  global $GOTMLS_skip_ext;
612
- echo "/*<!--*"."/".GOTMLS_update_status(sprintf(__("Scanning %s",'gotmls'), str_replace(dirname($GLOBALS["GOTMLS"]["scan"]["dir"]), "...", $dir)));
613
  GOTMLS_flush();
614
  $li_js = "/*-->*"."/\nscanNextDir(-1);\n/*<!--*"."/";
615
  if (isset($_GET["GOTMLS_skip_dir"]) && $dir == GOTMLS_decode($_GET["GOTMLS_skip_dir"])) {
@@ -659,7 +677,7 @@ function GOTMLS_scandir($dir) {
659
  } else
660
  echo GOTMLS_return_threat("errors", "blocked", $dir, GOTMLS_error_link(GOTMLS_Failed_to_list_LANGUAGE.' scandir:'.($files===false?' (FALSE)':$files)));
661
  }
662
- echo GOTMLS_update_status(sprintf(__("Scanned %s",'gotmls'), str_replace(dirname($GLOBALS["GOTMLS"]["scan"]["dir"]), "...", $dir)));
663
  GOTMLS_update_scan_log(array("scan" => array("finish" => time())));
664
  return $li_js;
665
  }
@@ -671,9 +689,9 @@ function GOTMLS_reset_settings($item, $key) {
671
  unset($GOTMLS_settings_array[$key]);
672
  }
673
 
674
- $GOTMLS_quarantine_dir = dirname(GOTMLS_quarantine(__FILE__));
675
- $GOTMLS_default_ext .= "com";
676
- $GOTMLS_encode .= substr($GOTMLS_default_ext, 0, 2);
677
  if(!isset($_SERVER["SERVER_NAME"]) || !$_SERVER["SERVER_NAME"]) {
678
  if(!isset($_ENV["SERVER_NAME"]))
679
  getenv("SERVER_NAME");
@@ -684,11 +702,12 @@ if(!isset($_SERVER["SERVER_PORT"]) || !$_SERVER["SERVER_PORT"]) {
684
  getenv("SERVER_PORT");
685
  $_SERVER["SERVER_PORT"] = $_ENV["SERVER_PORT"];
686
  }
687
- $GOTMLS_protocol = "http";
688
  if ((isset($_SERVER["HTTPS"]) && ($_SERVER["HTTPS"] == "on" || $_SERVER["HTTPS"] == 1)) || 'ssl'.$_SERVER["SERVER_PORT"] == 'ssl443')
689
- $GOTMLS_protocol .= "s";
690
- $GOTMLS_plugin_home = $GOTMLS_protocol.'://wordpress.'.$GOTMLS_default_ext;
691
- $GOTMLS_update_home = $GOTMLS_protocol."://gotmls.net/";
 
 
692
  $definition_version = "A0000";
693
  $GOTMLS_definitions_array = maybe_unserialize(GOTMLS_decode('YToyOntzOjk6InBvdGVudGlhbCI7YToxMTp7czo0OiJldmFsIjthOjI6e2k6MDtzOjU6IkNDSUdHIjtpOjE7czoyNzoiL1teYS16XC8nIl1ldmFsXCguK1wpWztdKi9pIjt9czo5OiJhdXRoX3Bhc3MiO2E6Mjp7aTowO3M6NToiQ0NJR0ciO2k6MTtzOjI0OiIvXCRhdXRoX3Bhc3NbID1cdF0rLis7L2kiO31zOjIxOiJkb2N1bWVudC53cml0ZSBpZnJhbWUiO2E6Mjp7aTowO3M6NToiQ0NJR0ciO2k6MTtzOjUyOiIvZG9jdW1lbnRcLndyaXRlXChbJyJdPGlmcmFtZSAuKzxcL2lmcmFtZT5bJyJdXCk7Ki9pIjt9czoxNToicHJlZ19yZXBsYWNlIC9lIjthOjI6e2k6MDtzOjU6IkNDSUdHIjtpOjE7czo1MDoiL3ByZWdfcmVwbGFjZVsgXHRdKlwoLitbXC9cI1x8XVtpXSplW2ldKlsnIl0uK1wpL2kiO31zOjIwOiJleGVjIHN5c3RlbSBwYXNzdGhydSI7YToyOntpOjA7czo1OiJDQ0lHRyI7aToxO3M6NTg6Ii9cPFw_KC4rPylleGVjXCgoLis_KXN5c3RlbVwoKC4rPylwYXNzdGhydVwoLitmd3JpdGVcKC4rL3MiO31zOjI5OiJFeHRlcm5hbCBSZWRpcmVjdCBSZXdyaXRlUnVsZSI7YToyOntpOjA7czo1OiJDQ1ZFNCI7aToxO3M6MzA6Ii9SZXdyaXRlUnVsZSBbXiBdKyBodHRwXDpcL1wvLyI7fXM6MzU6Im5vIGVycm9yX3JlcG9ydGluZyBsb25nIGxpbmVzIGFsb25lIjthOjI6e2k6MDtzOjU6IkQzNUJhIjtpOjE7czo3OToiLzxcPyhwaHApKltcclxuXHQgXEBdKmVycm9yX3JlcG9ydGluZ1woMFwpOy4rP1thLXowLTlcL1wtXD0nIlwuXF17MjAwMH0uKj9cPz4vaSI7fXM6MjI6InByb3RlY3RlZCBieSBjb3B5cmlnaHQiO2E6Mjp7aTowO3M6NToiRDhNQ3ciO2k6MTtzOjEzNjoiL1wvXCogVGhpcyBmaWxlIGlzIHByb3RlY3RlZCBieSBjb3B5cmlnaHQgbGF3IGFuZCBwcm92aWRlZCB1bmRlciBsaWNlbnNlLiBSZXZlcnNlIGVuZ2luZWVyaW5nIG9mIHRoaXMgZmlsZSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBcKlwvLyI7fXM6MTk6ImEgc3BhbiBjb2xvciBGMUVGRTQiO2E6Mjp7aTowO3M6NToiRDhSQVAiO2k6MTtzOjExODoiL1w8YSBbXlw-XStcPlw8c3BhbiBzdHlsZT0iY29sb3JcOlwjRjFFRkU0OyJcPiguKz8pXDxcL3NwYW5cPlw8XC9hXD5cPHNwYW4gc3R5bGU9ImNvbG9yXDpcI0YxRUZFNDsiXD4oLis_KVw8XC9zcGFuXD4vaSI7fXM6MTc6IlZhcmlhYmxlIEZ1bmN0aW9uIjthOjI6e2k6MDtzOjU6IkU4NTZMIjtpOjE7czo2NzoiLyg8IVxkKVwkW1wkXHtdKlthLXpcLVxfMC05XStbXH0gXHRdKihcW1teXF1dK1xdWyBcdF0qKSpcKC4qP1wpXDsvaSI7fXM6MTE6IlRhZ2dlZCBDb2RlIjthOjI6e2k6MDtzOjU6IkU0TE1HIjtpOjE7czoyNDoiL1wjKFx3KylcIy4rP1wjXC9cMVwjL2lzIjt9fXM6OToid2hpdGVsaXN0IjthOjI6e3M6MzoicGhwIjthOjE3OntpOjA7czo1OiJFN0VNdiI7czozODoiNTg3M2NkMWNlYTYxMDgyMDJkMjEzNDdmMDFmMDRkY2ZPODE3MjgiO3M6NToiRDc1OXAiO3M6Mzk6IjAxMzYzNzI4Yzg0M2ZmOTNlOTZiNjk4M2NlMzhlYmE2TzE5NTYxOCI7czo1OiJENUE4MyI7czozODoiZDVmM2M5Y2FmZjE0ZDU3Yzg2MDhkNzhkYjAwOTRiZTBPNzM2NDMiO3M6NToiRDc1RDkiO3M6Mzg6IjU3YWY0OTgxOGJiYjk0OWRjMGFjNjM4NjczODY1NWJiTzI1ODUyIjtzOjU6IkQ3SkQ5IjtzOjM4OiJkNDk0MDQyNjBkNzlhNGNjMzc1NWMwMGY1NWRlMjA4OU8yNTY2MiI7czo1OiJEOFY4QSI7czozNzoiODY2MWZlMmJmYTU5OTVmNTQ2YTMzMDQ3ZTkwMzg1NmNPMTEzNiI7czo1OiJESUNGQyI7czozODoiODEyNWQ0MmM0YmU1NDNmODc0ZWE1ZjZhMWI1YmRlNTVPMjU4OTQiO3M6NToiRElDRkQiO3M6Mzk6ImVkZGI1ZmRhNzRkNDFkYmRhYzAxODE2NzUzNmQ4ZDUzTzIzMTMzOCI7czo1OiJESUNGRSI7czozODoiYzE1YTRkNWMzODM0NDRiOTVkMjg1NTlmODM0ODExMWRPMjI1ODgiO3M6NToiRTFSMnYiO3M6Mzg6ImUyMDgzOWM1NTlhNjZjN2NmNjI4NjUzYmEyNDg0ZWFlTzI2Mzk1IjtzOjU6IkUxUjJ4IjtzOjM4OiJmMzM4MmVjMTVjMDMwYmQzMmUyOTNmYWYzNDk3ZTI1M08xMTIyNiI7czo1OiJFMjMwQyI7czozNzoiMjhhOTJmNDY0OThkMzJiOWE3NGM1ODQ3Zjc1YzkxMmVPNzM5OSI7czo1OiJFMjMwQyI7czozNzoiZjAwYWFmMDFmZjAyZDU3NTZjMjY3YmNmOTIwZTRjMjhPMTU0MCI7czo1OiJFMkFNZiI7czozODoiNTdjNjQ3ZDkzZmJkNDc4NjhiODdiOTIxYmVlNjNhZjhPMjYzNzYiO3M6NToiRTVFRG8iO3M6Mzk6IjhlMmFmNDg4NmRjODFhNWQ5Mjg5ODY1YmJiODEzZWQxTzE5NTYxNyI7czo1OiJFNUlOUCI7czozNzoiZjgwZDllZjRiN2JmZDllZjU0MmQ5MDg3YTFkYjJhZTlPMjAxMCI7czo1OiJFN0VNdiI7fXM6MjoianMiO2E6Mjk6e2k6MDtzOjU6IkU5RzhqIjtzOjM3OiI1NTRiYzc2YzcwMzUxMTg3ZjRjZTA1ZGRjMDEyYWFlZE80Nzc2IjtzOjU6IkQ2NjdYIjtzOjM3OiI5YTljMTI1ODE0Yjk3MTU5ODJkMjQ2YTFlZTc4MDg0Zk81MzQ1IjtzOjU6IkQ2NjdYIjtzOjM4OiJlMzZhMDg2MTIzNzU2NDEyMjkzMjMxYWVhZDE3ZjI0Zk8zNzYyOSI7czo1OiJENzVBSCI7czozNzoiYTM4YWM1MjY2OTI0OTM4YTRmZjU1MTQzNjljNmI0MGRPNDY3NCI7czo1OiJENzVBSiI7czozNzoiMTA0M2ExZDdkODRlZTU2Zjg4MzFhNjBjZGZjNWRjMjhPNzA3NyI7czo1OiJENzVEUyI7czozODoiNmVjMTUwYjc5ODdjYWFlZjk4YjU5Yzg3YjlmNDcxYmVPMTE4NDIiO3M6NToiRTFSMm4iO3M6Mzg6IjYxNDdjY2VlN2FlZjlkYzBjNmViMTBkOGQ3YjMxMWY5TzcwODgzIjtzOjU6IkUxUjJ3IjtzOjM3OiJiYTMyOTM5NzBlMTNiMDNhMmVhOTJmNWI2YjViZjU0NE8zMzc3IjtzOjU6IkUyMk5xIjtzOjM3OiI2M2IwYWVkOWIwMmY4NzlhNmUwMjk1ZmJlYTdkYjg1NE80NzAyIjtzOjU6IkUyMzBEIjtzOjM3OiJlZjQxODhjYjBiNjBhNzIwMTdmNGM4YTFlODQwYWIxZU8yOTUwIjtzOjU6IkUyNDlMIjtzOjM3OiJmYjhiZjY3ODVlNTVlOWUzOWJlYTU1MjYzNWM0MmE2NE8zMjcwIjtzOjU6IkUyNjBDIjtzOjM5OiJhY2IzMzMyOWI5ZWY4YWFiZDhiZDczMTQyNjgwM2U0ZU8yMzI0ODIiO3M6NToiRTI2MEUiO3M6Mzg6IjZjZWI2NDc1OTI1ODhiY2Y0NjNiZWZkOTQwOGUyN2FkTzEyMDI1IjtzOjU6IkUyNjBIIjtzOjM3OiI1YTMxODI3N2ZlZGY0OTFhMDMwMWUxNzdhOWVmMTBiM080OTA4IjtzOjU6IkUyNjBKIjtzOjM4OiJkYmMzODA4NDczZGVmMDBmY2U0NWZlNTY0ZGM3MmRjYk8xNDcyMCI7czo1OiJFMjYwSyI7czozNzoiYjk4OWE1YmQ4NGY2ZWJjYmMxMzkzZWMwMDNlNmU5OTFPNDk2OSI7czo1OiJFMjdFRyI7czozODoiMDMwYjgzODkzNzZhNDJmZjNkYTE4NmJmNjU4MDYyMTdPMTY1MzEiO3M6NToiRTI5RDIiO3M6Mzc6ImRlZjI1N2RiYjBhYjgwNWM0OTk2ZmQ4YWJiMWE2YjQ5TzY3MTciO3M6NToiRTJINW4iO3M6Mzg6Ijc0ZDkwMzA0OTY4M2U1YmJlYTljY2I3NTQ0YTQyYmNhTzE3NDEzIjtzOjU6IkU1RURxIjtzOjM4OiI2MDNiZDE0Mjk5ZjYxYTczMjliMmQzNTNiMmI1NmMyZk8zNzY4OSI7czo1OiJFNUVEcCI7czozNzoiMDQyNmIzOTc1NGFhNmJjNzY2ZDg5ZWE0YzQxYmJkMDZPMzQ1NyI7czo1OiJFNUVEeCI7czozODoiZWFkYzU4MzI1MTNkNTY3MDg4NGE5NzVjNmRlMTBmMDFPMTk2MTUiO3M6NToiRTdVTUEiO3M6Mzg6IjM4ZGJjYzkyNTUyOTM2ODgxMmY1YzJmYmNiMzg5NjE2TzE0OTY1IjtzOjU6IkU3VU1CIjtzOjM3OiJhMWMxODIyN2U2ZTkzNzk4YzQ5M2FlZDk2ZWU2Y2M4NE8zMjY3IjtzOjU6IkU3VU1CIjtzOjM3OiIwNzgzODhhNjQzMWFhNWIwODM4YTg3MzJkMTg3ZmUyOU84OTEzIjtzOjU6IkU4QUFwIjtzOjM3OiJmM2IxYjI4NDI0MzZmN2EzMTFiMzllNGVmNGI0N2Y1OU80MzUyIjtzOjU6IkU4QkJVIjtzOjM3OiJkNzA5NDA2MTlhOTlkNTU1MTE2MTY3ZDRmYjM5Y2ExNU80Mzk3IjtzOjU6IkU5Q0x4IjtzOjM4OiJjYmRiZmM5MTg0ZDI4YWM1NWY4M2MwYjBkZjQwZmQ0M083OTQxNCI7czo1OiJFOUc4aiI7fX191'));
694
 
@@ -722,9 +741,9 @@ function GOTMLS_scan_log() {
722
  $time = floor($time/$units[$ukeys[$key]]);
723
  if (1 == $time)
724
  $unit = substr($unit, 0, -1);
725
- $LastScan .= " and ran for $time $unit";// (".print_r(array("scan"=>$GOTMLS_scan_log["scan"]),1).")";
726
  } else
727
- $LastScan .= " and has not finish";// (".(isset($rs["mt"])?$rs["mt"]:")");
728
  } else
729
  $LastScan = "never started ";
730
  return "Last ".(isset($GOTMLS_scan_log["scan"]["type"])?$GOTMLS_scan_log["scan"]["type"]:"Scan")." $LastScan.";
16
  @error_reporting(0);
17
 
18
  define("GOTMLS_plugin_dir", "gotmls");
19
+ define("GOTMLS_Version", "4.14.50");
20
  define("GOTMLS_require_version", "3.0");
21
  define("GOTMLS_Failed_to_list_LANGUAGE", __("Failed to list files in directory!",'gotmls'));
22
  define("GOTMLS_Run_Complete_Scan_LANGUAGE", __("Run Complete Scan",'gotmls'));
32
  define("GOTMLS_Searching_updates_LANGUAGE", __("Searching for updates ...",'gotmls'));
33
  define("GOTMLS_Definition_Updates_LANGUAGE", __("Definition Updates",'gotmls'));
34
  define("GOTMLS_Please_donate_LANGUAGE", __("Please make a donation for the use of this wonderful feature!",'gotmls'));
35
+ define("GOTMLS_Automatically_Fix_LANGUAGE", __("Automatically Fix SELECTED Files Now",'gotmls'));
36
+ define("GOTMLS_Scan_Details_LANGUAGE", __("Scan Details:",'gotmls'));
37
+ define("GOTMLS_Last_Scan_Status_LANGUAGE", __("Scan Status",'gotmls'));
38
  define("GOTMLS_update_images_path", "/wp-content/plugins/update/images/");
39
  define("GOTMLS_siteurl", get_option("siteurl"));
40
  if (isset($_SERVER["DOCUMENT_ROOT"]) && strpos($_SERVER["DOCUMENT_ROOT"], GOTMLS_local_images_path) === 0)
42
  else
43
  define("GOTMLS_images_path", GOTMLS_siteurl.str_replace("update", basename(dirname(GOTMLS_local_images_path)), GOTMLS_update_images_path));
44
  define("GOTMLS_installation_key", md5(GOTMLS_siteurl));
45
+
46
+ $GLOBALS["GOTMLS"] = array("tmp"=>array("mt"=>((isset($_GET["mt"])&&is_numeric($_GET["mt"]))?$_GET["mt"]:microtime(true)), "default_ext"=>"ieonly."));
47
+ define("GOTMLS_script_URI", preg_replace('/\&(last_)?mt=[0-9\.]+/','', str_replace('&amp;', '&', htmlspecialchars($_SERVER["REQUEST_URI"], ENT_QUOTES))).'&mt='.$GLOBALS["GOTMLS"]["tmp"]["mt"]);
48
+ $GLOBALS["GOTMLS"]["log"] = get_option('GOTMLS_scan_log/'.(isset($_SERVER["REMOTE_ADDR"])?$_SERVER["REMOTE_ADDR"]:"0.0.0.0").'/'.$GLOBALS["GOTMLS"]["tmp"]["mt"], array());
49
  $GOTMLS_loop_execution_time = 60;
50
  $GOTMLS_chmod_file = (0644);
51
  $GOTMLS_chmod_dir = (0755);
52
  $GOTMLS_file_contents = "";
53
  $GOTMLS_new_contents = "";
54
  $GOTMLS_onLoad = "";
 
55
  $GOTMLS_encode = '/[\?\-a-z\: \.\=\/A-Z\&\_]/';
56
  $GOTMLS_threat_files = array("htaccess"=>".htaccess","timthumb"=>"thumb.php");
57
  $GOTMLS_core_files = array("wp_login"=>"/wp-login.php");
82
  $GOTMLS_HeadersError = "";
83
  function GOTMLS_admin_notices() {
84
  global $GOTMLS_HeadersError;
85
+ if (!is_admin())
86
+ return;
87
+ elseif ($GOTMLS_HeadersError)
88
  echo $GOTMLS_HeadersError;
89
  }
90
 
112
 
113
  function GOTMLS_update_scan_log($scan_log) {
114
  if (is_array($scan_log)) {
115
+ $GLOBALS["GOTMLS"]["log"] = GOTMLS_array_replace_recursive($GLOBALS["GOTMLS"]["log"], $scan_log);
116
+ if (isset($GLOBALS["GOTMLS"]["log"]["scan"]["percent"]) && is_numeric($GLOBALS["GOTMLS"]["log"]["scan"]["percent"]) && ($GLOBALS["GOTMLS"]["log"]["scan"]["percent"] >= 100))
117
+ $GLOBALS["GOTMLS"]["log"]["scan"]["finish"] = time();
118
+ if (isset($GLOBALS["GOTMLS"]["log"]["scan"]))
119
+ update_option('GOTMLS_scan_log/'.(isset($_SERVER["REMOTE_ADDR"])?$_SERVER["REMOTE_ADDR"]:"0.0.0.0").'/'.$GLOBALS["GOTMLS"]["tmp"]["mt"], $GLOBALS["GOTMLS"]["log"]);
120
  }
121
  }
122
 
228
  }
229
 
230
  function GOTMLS_scanfile($file) {
231
+ global $GOTMLS_core_files, $wp_version, $GOTMLS_threat_levels, $GOTMLS_threat_files, $GOTMLS_definitions_array, $GOTMLS_threats_found, $GOTMLS_chmod_file, $GOTMLS_chmod_dir, $GOTMLS_settings_array, $GOTMLS_file_contents, $GOTMLS_new_contents;
232
  $GOTMLS_threats_found = array();
233
  $found = false;
234
  $threat_link = "";
255
  }
256
  }
257
  $GOTMLS_new_contents = $GOTMLS_file_contents;
258
+ if (isset($GLOBALS["GOTMLS"]["log"]["settings"]["check_custom"]) && strlen($GLOBALS["GOTMLS"]["log"]["settings"]["check_custom"]) && isset($_GET['eli']) && substr($GLOBALS["GOTMLS"]["log"]["settings"]["check_custom"], 0, 1) == '/' && ($found = GOTMLS_check_threat($GLOBALS["GOTMLS"]["log"]["settings"]["check_custom"])))
259
  $className = "known";
260
  else {
261
  if (isset($_SESSION["GOTMLS_debug"])){ $_SESSION["GOTMLS_debug"]["file"] = $file;
263
  foreach ($GOTMLS_threat_levels as $threat_level) {
264
  if (isset($_SESSION["GOTMLS_debug"])){ $_SESSION["GOTMLS_debug"]["threat_level"] = $threat_level;
265
  $_SESSION["GOTMLS_debug"]["last"]["threat_level"] = microtime(true);}
266
+ if (in_array($threat_level, $GLOBALS["GOTMLS"]["log"]["settings"]["check"]) && !$found && isset($GOTMLS_definitions_array[$threat_level]) && (!array_key_exists($threat_level,$GOTMLS_core_files) || (substr($file."e", (-1 * strlen($GOTMLS_core_files[$threat_level]."e"))) == $GOTMLS_core_files[$threat_level]."e")) && (!array_key_exists($threat_level,$GOTMLS_threat_files) || ((GOTMLS_get_ext($file) == "gotmls" && isset($_GET["eli"]) && $_GET["eli"] == "quarantine")?(substr(GOTMLS_decode(array_pop(explode(".", '.'.substr($file, strlen(dirname($file))+1, -7))))."e", (-1 * strlen($GOTMLS_threat_files[$threat_level]."e"))) == $GOTMLS_threat_files[$threat_level]."e"):(substr($file."e", (-1 * strlen($GOTMLS_threat_files[$threat_level]."e"))) == $GOTMLS_threat_files[$threat_level]."e"))) && ($found = GOTMLS_check_threat($GOTMLS_definitions_array[$threat_level],$file)))
267
  $className = $threat_level;
268
  }
269
  if (isset($_SESSION["GOTMLS_debug"])){ $file_time = round(microtime(true) - $_SESSION["GOTMLS_debug"]["last"]["total"], 5);
289
  $threat_link = '<a target="GOTMLS_iFrame" href="'.GOTMLS_script_URI.'&GOTMLS_scan='.$clean_file.'" id="list_'.$clean_file.'" onclick="loadIframe(\''.str_replace("\"", "&quot;", '<div style="float: left;">Examine&nbsp;File&nbsp;...&nbsp;</div><div style="overflow: hidden; position: relative; height: 20px;"><div style="position: absolute; right: 0px; text-align: right; width: 9000px;">'.GOTMLS_strip4java($file)).'</div></div>\');" class="GOTMLS_plugin">';
290
  if (isset($_POST["GOTMLS_fix"]) && is_array($_POST["GOTMLS_fix"]) && in_array($clean_file, $_POST["GOTMLS_fix"])) {
291
  $file_date = explode(".", array_pop(GOTMLS_explode_dir($file)));
292
+ if (GOTMLS_get_ext($file) == "gotmls" && GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]) == substr($file, 0, strlen(GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"])))) {
293
  if ($_POST["GOTMLS_fixing"] > 1 && @unlink($file))
294
  $GOTMLS_file_contents = "";
295
  elseif (count($file_date) > 1 && $GOTMLS_new_contents = @file_get_contents($file))
341
  return GOTMLS_return_threat($className, $imageFile, $file, str_replace("GOTMLS_plugin", "GOTMLS_plugin $className", $threat_link));
342
  } elseif (isset($_POST["GOTMLS_fix"]) && is_array($_POST["GOTMLS_fix"]) && in_array($clean_file, $_POST["GOTMLS_fix"])) {
343
  $file_date = explode(".", array_pop(GOTMLS_explode_dir($file)));
344
+ if (GOTMLS_get_ext($file) == "gotmls" && GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]) == substr($file, 0, strlen(GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"])))) {
345
  if ($_POST["GOTMLS_fixing"] > 1 && @unlink($file)) {
346
  $GOTMLS_file_contents = "";
347
  $msg = __("Deleted!",'gotmls');
412
  return "Cannot decode: $encoded_string";
413
  }
414
 
415
+ function GOTMLS_decodeBase64($encoded_string) {
416
+ if (function_exists("base64_decode"))
417
+ $unencoded_string = base64_decode($encoded_string);
418
+ elseif (function_exists("mb_convert_encoding"))
419
+ $unencoded_string = mb_convert_encoding($encoded_string, "UTF-8", "BASE64");
420
+ else
421
+ return "Cannot decode: '$encoded_string'";
422
+ return "'".str_replace("'", "\\'", str_replace("\\", "\\\\", $unencoded_string))."'";
423
+ }
424
+
425
+ function GOTMLS_decodeHex($encoded_string) {
426
+ return chr(hexdec($encoded_string));
427
+ }
428
+
429
  function GOTMLS_return_threat($className, $imageFile, $fileName, $link = "") {
430
  global $GOTMLS_image_alt;
431
+ $fileNameJS = GOTMLS_strip4java(str_replace(dirname($GLOBALS["GOTMLS"]["log"]["scan"]["dir"]), "...", $fileName));
432
  $fileName64 = GOTMLS_encode($fileName);
433
  $li_js = "/*-->*"."/";
434
  if ($className != "scanned")
435
+ $li_js .= "\n$className++;\ndivx=document.getElementById('found_$className');\nif (divx) {\n\tvar newli = document.createElement('li');\n\tnewli.innerHTML='<img src=\"".GOTMLS_strip4java(GOTMLS_images_path.$imageFile).".gif\" height=16 width=16 alt=\"".$GOTMLS_image_alt[$imageFile]."\" style=\"float: left;\" id=\"$imageFile"."_$fileName64\">".GOTMLS_strip4java($link).$fileNameJS.($link?"</a>';\n\tdivx.display='block":"")."';\n\tdivx.appendChild(newli);\n}";
436
  if ($className == "errors")
437
  $li_js .= "\ndivx=document.getElementById('wait_$fileName64');\nif (divx) {\n\tdivx.src='".GOTMLS_images_path."blocked.gif';\n\tdirerrors++;\n}";
438
  elseif (is_file($fileName))
462
  }
463
 
464
  function GOTMLS_quarantine($file) {
465
+ if (!isset($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"])) {
 
466
  $upload = wp_upload_dir();
467
  $err403 = '<html><head><title>403 Forbidden</title></head><body><h1>Forbidden</h1><p>You don\'t have permission to access this directory.</p></body></html>';
468
+ $GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"] = GOTMLS_trailingslashit($upload['basedir']).'quarantine';
469
+ if (!is_dir($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]) && !@mkdir($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]))
470
+ $GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"] = $upload['basedir'];
471
  if (is_file(GOTMLS_trailingslashit($upload['basedir']).'.htaccess') && file_get_contents(GOTMLS_trailingslashit($upload['basedir']).'.htaccess') == 'Options -Indexes')
472
  if (!@unlink(GOTMLS_trailingslashit($upload['basedir']).'.htaccess'))
473
  @GOTMLS_file_put_contents(GOTMLS_trailingslashit($upload['basedir']).'.htaccess', '');
474
+ if (!is_file(GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]).'.htaccess'))
475
+ @GOTMLS_file_put_contents(GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]).'.htaccess', 'Options -Indexes');
476
  if (!is_file(GOTMLS_trailingslashit($upload['basedir']).'index.php'))
477
  @GOTMLS_file_put_contents(GOTMLS_trailingslashit($upload['basedir']).'index.php', $err403);
478
+ if (!is_file(GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]).'index.php'))
479
+ @GOTMLS_file_put_contents(GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]).'index.php', $err403);
480
  }
481
+ return GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]).GOTMLS_sexagesimal().'.'.GOTMLS_encode($file).'.GOTMLS';
482
  }
483
 
484
  function GOTMLS_update_status($status, $percent = -1) {
485
+ if (!(isset($GLOBALS["GOTMLS"]["log"]["scan"]["start"]) && is_numeric($GLOBALS["GOTMLS"]["log"]["scan"]["start"])))
486
+ $GLOBALS["GOTMLS"]["log"]["scan"]["start"] = time();
487
+ $microtime = ceil(time()-$GLOBALS["GOTMLS"]["log"]["scan"]["start"]);
488
  GOTMLS_update_scan_log(array("scan" => array("microtime" => $microtime, "percent" => $percent)));
489
  return "/*-->*"."/\nupdate_status('".GOTMLS_strip4java($status)."', $microtime, $percent);\n/*<!--*"."/";
490
  }
505
  }
506
 
507
  function GOTMLS_readdir($dir, $current_depth = 1) {
508
+ global $GOTMLS_loop_execution_time, $GOTMLS_scanfiles, $GOTMLS_skip_dirs, $GOTMLS_skip_ext, $GOTMLS_dirs_at_depth, $GOTMLS_dir_at_depth, $GOTMLS_total_percent;
509
+ if ($dir != $GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"] || $current_depth == 1) {
510
  @set_time_limit($GOTMLS_loop_execution_time);
511
  $entries = GOTMLS_getfiles($dir);
512
  if (is_array($entries)) {
513
+ echo GOTMLS_return_threat("dirs", "wait", $dir).GOTMLS_update_status(sprintf(__("Preparing %s",'gotmls'), str_replace(dirname($GLOBALS["GOTMLS"]["log"]["scan"]["dir"]), "...", $dir)), $GOTMLS_total_percent);
514
  $files = array();
515
  $directories = array();
516
  foreach ($entries as $entry) {
529
  $GOTMLS_dirs_at_depth[$current_depth] = count($directories);
530
  $GOTMLS_dir_at_depth[$current_depth] = 0;
531
  } else
532
+ $GOTMLS_scanfiles[GOTMLS_encode($dir)] = GOTMLS_strip4java(str_replace(dirname($GLOBALS["GOTMLS"]["log"]["scan"]["dir"]), "...", $dir));
533
  foreach ($directories as $directory) {
534
  $path = GOTMLS_trailingslashit($dir).$directory;
535
  if (isset($_REQUEST["scan_depth"]) && is_numeric($_REQUEST["scan_depth"]) && ($_REQUEST["scan_depth"] != $current_depth) && !in_array($directory, $GOTMLS_skip_dirs)) {
542
  }
543
  if ($_REQUEST["scan_type"] == "Quick Scan") {
544
  $echo = "";
545
+ echo GOTMLS_update_status(sprintf(__("Scanning %s",'gotmls'), str_replace(dirname($GLOBALS["GOTMLS"]["log"]["scan"]["dir"]), "...", $dir)), $GOTMLS_total_percent);
546
  GOTMLS_flush("script");
547
  foreach ($files as $file)
548
  echo GOTMLS_check_file(GOTMLS_trailingslashit($dir).$file);
559
  echo "$GOTMLS_total_percent\n";
560
  }
561
  $GOTMLS_total_percent = floor($GOTMLS_total_percent * 100);
562
+ echo GOTMLS_update_status(sprintf(__("Scanned %s",'gotmls'), str_replace(dirname($GLOBALS["GOTMLS"]["log"]["scan"]["dir"]), "...", $dir)), $GOTMLS_total_percent);
563
  }
564
  GOTMLS_flush("script");
565
  }
590
  }}
591
 
592
  function GOTMLS_strip4java($item) {
593
+ return preg_replace("/\\\\/", "\\\\\\\\", preg_replace("/'/", "'+\"'\"+'", preg_replace('/\\+n/', "", $item)));//(?<!\\\\)
594
  }
595
 
596
  function GOTMLS_error_link($errorTXT, $file = "", $class = "errors") {
619
  try {
620
  echo @GOTMLS_scanfile($file);
621
  } catch (Exception $e) {
622
+ die("//Exception:".GOTMLS_strip4java($e));
623
  }
624
  }
625
  echo "/*-->*"."/\ndocument.getElementById('status_text').innerHTML='Checked ".GOTMLS_strip4java($file)."';\n/*<!--*"."/";
627
 
628
  function GOTMLS_scandir($dir) {
629
  global $GOTMLS_skip_ext;
630
+ echo "/*<!--*"."/".GOTMLS_update_status(sprintf(__("Scanning %s",'gotmls'), str_replace(dirname($GLOBALS["GOTMLS"]["log"]["scan"]["dir"]), "...", $dir)));
631
  GOTMLS_flush();
632
  $li_js = "/*-->*"."/\nscanNextDir(-1);\n/*<!--*"."/";
633
  if (isset($_GET["GOTMLS_skip_dir"]) && $dir == GOTMLS_decode($_GET["GOTMLS_skip_dir"])) {
677
  } else
678
  echo GOTMLS_return_threat("errors", "blocked", $dir, GOTMLS_error_link(GOTMLS_Failed_to_list_LANGUAGE.' scandir:'.($files===false?' (FALSE)':$files)));
679
  }
680
+ echo GOTMLS_update_status(sprintf(__("Scanned %s",'gotmls'), str_replace(dirname($GLOBALS["GOTMLS"]["log"]["scan"]["dir"]), "...", $dir)));
681
  GOTMLS_update_scan_log(array("scan" => array("finish" => time())));
682
  return $li_js;
683
  }
689
  unset($GOTMLS_settings_array[$key]);
690
  }
691
 
692
+ $GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"] = dirname(GOTMLS_quarantine(__FILE__));
693
+ $GLOBALS["GOTMLS"]["tmp"]["default_ext"] .= "com";
694
+ $GOTMLS_encode .= substr($GLOBALS["GOTMLS"]["tmp"]["default_ext"], 0, 2);
695
  if(!isset($_SERVER["SERVER_NAME"]) || !$_SERVER["SERVER_NAME"]) {
696
  if(!isset($_ENV["SERVER_NAME"]))
697
  getenv("SERVER_NAME");
702
  getenv("SERVER_PORT");
703
  $_SERVER["SERVER_PORT"] = $_ENV["SERVER_PORT"];
704
  }
 
705
  if ((isset($_SERVER["HTTPS"]) && ($_SERVER["HTTPS"] == "on" || $_SERVER["HTTPS"] == 1)) || 'ssl'.$_SERVER["SERVER_PORT"] == 'ssl443')
706
+ $GLOBALS["GOTMLS"]["tmp"]["protocol"] .= "https:";
707
+ else
708
+ $GLOBALS["GOTMLS"]["tmp"]["protocol"] = "http:";
709
+ $GOTMLS_plugin_home = $GLOBALS["GOTMLS"]["tmp"]["protocol"].'//wordpress.'.$GLOBALS["GOTMLS"]["tmp"]["default_ext"];
710
+ $GOTMLS_update_home = $GLOBALS["GOTMLS"]["tmp"]["protocol"]."//gotmls.net/";
711
  $definition_version = "A0000";
712
  $GOTMLS_definitions_array = maybe_unserialize(GOTMLS_decode('YToyOntzOjk6InBvdGVudGlhbCI7YToxMTp7czo0OiJldmFsIjthOjI6e2k6MDtzOjU6IkNDSUdHIjtpOjE7czoyNzoiL1teYS16XC8nIl1ldmFsXCguK1wpWztdKi9pIjt9czo5OiJhdXRoX3Bhc3MiO2E6Mjp7aTowO3M6NToiQ0NJR0ciO2k6MTtzOjI0OiIvXCRhdXRoX3Bhc3NbID1cdF0rLis7L2kiO31zOjIxOiJkb2N1bWVudC53cml0ZSBpZnJhbWUiO2E6Mjp7aTowO3M6NToiQ0NJR0ciO2k6MTtzOjUyOiIvZG9jdW1lbnRcLndyaXRlXChbJyJdPGlmcmFtZSAuKzxcL2lmcmFtZT5bJyJdXCk7Ki9pIjt9czoxNToicHJlZ19yZXBsYWNlIC9lIjthOjI6e2k6MDtzOjU6IkNDSUdHIjtpOjE7czo1MDoiL3ByZWdfcmVwbGFjZVsgXHRdKlwoLitbXC9cI1x8XVtpXSplW2ldKlsnIl0uK1wpL2kiO31zOjIwOiJleGVjIHN5c3RlbSBwYXNzdGhydSI7YToyOntpOjA7czo1OiJDQ0lHRyI7aToxO3M6NTg6Ii9cPFw_KC4rPylleGVjXCgoLis_KXN5c3RlbVwoKC4rPylwYXNzdGhydVwoLitmd3JpdGVcKC4rL3MiO31zOjI5OiJFeHRlcm5hbCBSZWRpcmVjdCBSZXdyaXRlUnVsZSI7YToyOntpOjA7czo1OiJDQ1ZFNCI7aToxO3M6MzA6Ii9SZXdyaXRlUnVsZSBbXiBdKyBodHRwXDpcL1wvLyI7fXM6MzU6Im5vIGVycm9yX3JlcG9ydGluZyBsb25nIGxpbmVzIGFsb25lIjthOjI6e2k6MDtzOjU6IkQzNUJhIjtpOjE7czo3OToiLzxcPyhwaHApKltcclxuXHQgXEBdKmVycm9yX3JlcG9ydGluZ1woMFwpOy4rP1thLXowLTlcL1wtXD0nIlwuXF17MjAwMH0uKj9cPz4vaSI7fXM6MjI6InByb3RlY3RlZCBieSBjb3B5cmlnaHQiO2E6Mjp7aTowO3M6NToiRDhNQ3ciO2k6MTtzOjEzNjoiL1wvXCogVGhpcyBmaWxlIGlzIHByb3RlY3RlZCBieSBjb3B5cmlnaHQgbGF3IGFuZCBwcm92aWRlZCB1bmRlciBsaWNlbnNlLiBSZXZlcnNlIGVuZ2luZWVyaW5nIG9mIHRoaXMgZmlsZSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBcKlwvLyI7fXM6MTk6ImEgc3BhbiBjb2xvciBGMUVGRTQiO2E6Mjp7aTowO3M6NToiRDhSQVAiO2k6MTtzOjExODoiL1w8YSBbXlw-XStcPlw8c3BhbiBzdHlsZT0iY29sb3JcOlwjRjFFRkU0OyJcPiguKz8pXDxcL3NwYW5cPlw8XC9hXD5cPHNwYW4gc3R5bGU9ImNvbG9yXDpcI0YxRUZFNDsiXD4oLis_KVw8XC9zcGFuXD4vaSI7fXM6MTc6IlZhcmlhYmxlIEZ1bmN0aW9uIjthOjI6e2k6MDtzOjU6IkU4NTZMIjtpOjE7czo2NzoiLyg8IVxkKVwkW1wkXHtdKlthLXpcLVxfMC05XStbXH0gXHRdKihcW1teXF1dK1xdWyBcdF0qKSpcKC4qP1wpXDsvaSI7fXM6MTE6IlRhZ2dlZCBDb2RlIjthOjI6e2k6MDtzOjU6IkU0TE1HIjtpOjE7czoyNDoiL1wjKFx3KylcIy4rP1wjXC9cMVwjL2lzIjt9fXM6OToid2hpdGVsaXN0IjthOjI6e3M6MzoicGhwIjthOjE3OntpOjA7czo1OiJFN0VNdiI7czozODoiNTg3M2NkMWNlYTYxMDgyMDJkMjEzNDdmMDFmMDRkY2ZPODE3MjgiO3M6NToiRDc1OXAiO3M6Mzk6IjAxMzYzNzI4Yzg0M2ZmOTNlOTZiNjk4M2NlMzhlYmE2TzE5NTYxOCI7czo1OiJENUE4MyI7czozODoiZDVmM2M5Y2FmZjE0ZDU3Yzg2MDhkNzhkYjAwOTRiZTBPNzM2NDMiO3M6NToiRDc1RDkiO3M6Mzg6IjU3YWY0OTgxOGJiYjk0OWRjMGFjNjM4NjczODY1NWJiTzI1ODUyIjtzOjU6IkQ3SkQ5IjtzOjM4OiJkNDk0MDQyNjBkNzlhNGNjMzc1NWMwMGY1NWRlMjA4OU8yNTY2MiI7czo1OiJEOFY4QSI7czozNzoiODY2MWZlMmJmYTU5OTVmNTQ2YTMzMDQ3ZTkwMzg1NmNPMTEzNiI7czo1OiJESUNGQyI7czozODoiODEyNWQ0MmM0YmU1NDNmODc0ZWE1ZjZhMWI1YmRlNTVPMjU4OTQiO3M6NToiRElDRkQiO3M6Mzk6ImVkZGI1ZmRhNzRkNDFkYmRhYzAxODE2NzUzNmQ4ZDUzTzIzMTMzOCI7czo1OiJESUNGRSI7czozODoiYzE1YTRkNWMzODM0NDRiOTVkMjg1NTlmODM0ODExMWRPMjI1ODgiO3M6NToiRTFSMnYiO3M6Mzg6ImUyMDgzOWM1NTlhNjZjN2NmNjI4NjUzYmEyNDg0ZWFlTzI2Mzk1IjtzOjU6IkUxUjJ4IjtzOjM4OiJmMzM4MmVjMTVjMDMwYmQzMmUyOTNmYWYzNDk3ZTI1M08xMTIyNiI7czo1OiJFMjMwQyI7czozNzoiMjhhOTJmNDY0OThkMzJiOWE3NGM1ODQ3Zjc1YzkxMmVPNzM5OSI7czo1OiJFMjMwQyI7czozNzoiZjAwYWFmMDFmZjAyZDU3NTZjMjY3YmNmOTIwZTRjMjhPMTU0MCI7czo1OiJFMkFNZiI7czozODoiNTdjNjQ3ZDkzZmJkNDc4NjhiODdiOTIxYmVlNjNhZjhPMjYzNzYiO3M6NToiRTVFRG8iO3M6Mzk6IjhlMmFmNDg4NmRjODFhNWQ5Mjg5ODY1YmJiODEzZWQxTzE5NTYxNyI7czo1OiJFNUlOUCI7czozNzoiZjgwZDllZjRiN2JmZDllZjU0MmQ5MDg3YTFkYjJhZTlPMjAxMCI7czo1OiJFN0VNdiI7fXM6MjoianMiO2E6Mjk6e2k6MDtzOjU6IkU5RzhqIjtzOjM3OiI1NTRiYzc2YzcwMzUxMTg3ZjRjZTA1ZGRjMDEyYWFlZE80Nzc2IjtzOjU6IkQ2NjdYIjtzOjM3OiI5YTljMTI1ODE0Yjk3MTU5ODJkMjQ2YTFlZTc4MDg0Zk81MzQ1IjtzOjU6IkQ2NjdYIjtzOjM4OiJlMzZhMDg2MTIzNzU2NDEyMjkzMjMxYWVhZDE3ZjI0Zk8zNzYyOSI7czo1OiJENzVBSCI7czozNzoiYTM4YWM1MjY2OTI0OTM4YTRmZjU1MTQzNjljNmI0MGRPNDY3NCI7czo1OiJENzVBSiI7czozNzoiMTA0M2ExZDdkODRlZTU2Zjg4MzFhNjBjZGZjNWRjMjhPNzA3NyI7czo1OiJENzVEUyI7czozODoiNmVjMTUwYjc5ODdjYWFlZjk4YjU5Yzg3YjlmNDcxYmVPMTE4NDIiO3M6NToiRTFSMm4iO3M6Mzg6IjYxNDdjY2VlN2FlZjlkYzBjNmViMTBkOGQ3YjMxMWY5TzcwODgzIjtzOjU6IkUxUjJ3IjtzOjM3OiJiYTMyOTM5NzBlMTNiMDNhMmVhOTJmNWI2YjViZjU0NE8zMzc3IjtzOjU6IkUyMk5xIjtzOjM3OiI2M2IwYWVkOWIwMmY4NzlhNmUwMjk1ZmJlYTdkYjg1NE80NzAyIjtzOjU6IkUyMzBEIjtzOjM3OiJlZjQxODhjYjBiNjBhNzIwMTdmNGM4YTFlODQwYWIxZU8yOTUwIjtzOjU6IkUyNDlMIjtzOjM3OiJmYjhiZjY3ODVlNTVlOWUzOWJlYTU1MjYzNWM0MmE2NE8zMjcwIjtzOjU6IkUyNjBDIjtzOjM5OiJhY2IzMzMyOWI5ZWY4YWFiZDhiZDczMTQyNjgwM2U0ZU8yMzI0ODIiO3M6NToiRTI2MEUiO3M6Mzg6IjZjZWI2NDc1OTI1ODhiY2Y0NjNiZWZkOTQwOGUyN2FkTzEyMDI1IjtzOjU6IkUyNjBIIjtzOjM3OiI1YTMxODI3N2ZlZGY0OTFhMDMwMWUxNzdhOWVmMTBiM080OTA4IjtzOjU6IkUyNjBKIjtzOjM4OiJkYmMzODA4NDczZGVmMDBmY2U0NWZlNTY0ZGM3MmRjYk8xNDcyMCI7czo1OiJFMjYwSyI7czozNzoiYjk4OWE1YmQ4NGY2ZWJjYmMxMzkzZWMwMDNlNmU5OTFPNDk2OSI7czo1OiJFMjdFRyI7czozODoiMDMwYjgzODkzNzZhNDJmZjNkYTE4NmJmNjU4MDYyMTdPMTY1MzEiO3M6NToiRTI5RDIiO3M6Mzc6ImRlZjI1N2RiYjBhYjgwNWM0OTk2ZmQ4YWJiMWE2YjQ5TzY3MTciO3M6NToiRTJINW4iO3M6Mzg6Ijc0ZDkwMzA0OTY4M2U1YmJlYTljY2I3NTQ0YTQyYmNhTzE3NDEzIjtzOjU6IkU1RURxIjtzOjM4OiI2MDNiZDE0Mjk5ZjYxYTczMjliMmQzNTNiMmI1NmMyZk8zNzY4OSI7czo1OiJFNUVEcCI7czozNzoiMDQyNmIzOTc1NGFhNmJjNzY2ZDg5ZWE0YzQxYmJkMDZPMzQ1NyI7czo1OiJFNUVEeCI7czozODoiZWFkYzU4MzI1MTNkNTY3MDg4NGE5NzVjNmRlMTBmMDFPMTk2MTUiO3M6NToiRTdVTUEiO3M6Mzg6IjM4ZGJjYzkyNTUyOTM2ODgxMmY1YzJmYmNiMzg5NjE2TzE0OTY1IjtzOjU6IkU3VU1CIjtzOjM3OiJhMWMxODIyN2U2ZTkzNzk4YzQ5M2FlZDk2ZWU2Y2M4NE8zMjY3IjtzOjU6IkU3VU1CIjtzOjM3OiIwNzgzODhhNjQzMWFhNWIwODM4YTg3MzJkMTg3ZmUyOU84OTEzIjtzOjU6IkU4QUFwIjtzOjM3OiJmM2IxYjI4NDI0MzZmN2EzMTFiMzllNGVmNGI0N2Y1OU80MzUyIjtzOjU6IkU4QkJVIjtzOjM3OiJkNzA5NDA2MTlhOTlkNTU1MTE2MTY3ZDRmYjM5Y2ExNU80Mzk3IjtzOjU6IkU5Q0x4IjtzOjM4OiJjYmRiZmM5MTg0ZDI4YWM1NWY4M2MwYjBkZjQwZmQ0M083OTQxNCI7czo1OiJFOUc4aiI7fX191'));
713
 
741
  $time = floor($time/$units[$ukeys[$key]]);
742
  if (1 == $time)
743
  $unit = substr($unit, 0, -1);
744
+ $LastScan .= " and ran for $time $unit";
745
  } else
746
+ $LastScan .= " and has not finish";
747
  } else
748
  $LastScan = "never started ";
749
  return "Last ".(isset($GOTMLS_scan_log["scan"]["type"])?$GOTMLS_scan_log["scan"]["type"]:"Scan")." $LastScan.";
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.14.47
12
  */
13
  /* ___
14
  * / /\ GOTMLS Main Plugin File
@@ -31,7 +31,7 @@ Version: 4.14.47
31
  * \ \::/ with this program; if not, write to the Free Software Foundation,
32
  * \__\/ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
33
 
34
- if (isset($_SERVER["SCRIPT_FILENAME"]) && __FILE__ == $_SERVER["SCRIPT_FILENAME"]) die('You are not allowed to call this page directly.<p>You could try starting <a href="http://'.$_SERVER["SERVER_NAME"].'">here</a>.');
35
 
36
  define("GOTMLS_plugin_path", dirname(__FILE__).'/');
37
  load_plugin_textdomain('gotmls', false, basename(GOTMLS_plugin_path).'/languages');
@@ -46,39 +46,70 @@ register_activation_hook(__FILE__, "GOTMLS_install");
46
 
47
  function GOTMLS_menu() {
48
  global $GOTMLS_settings_array;
49
- if (isset($_POST["GOTMLS_menu_group"]) && is_numeric($_POST["GOTMLS_menu_group"]) && $_POST["GOTMLS_menu_group"] != $GOTMLS_settings_array["menu_group"]) {
 
 
 
 
 
50
  $GOTMLS_settings_array["menu_group"] = $_POST["GOTMLS_menu_group"];
 
 
 
 
 
 
51
  update_option('GOTMLS_settings_array', $GOTMLS_settings_array);
52
  }
53
  $GOTMLS_Full_plugin_logo_URL = GOTMLS_images_path.'GOTMLS-16x16.gif';
54
  $base_page = "GOTMLS-settings";
55
  $base_function = "GOTMLS_settings";
56
- $user_can = "activate_plugins";
57
  $pluginTitle = "Anti-Malware";
58
  $pageTitle = "$pluginTitle ".GOTMLS_Scan_Settings_LANGUAGE;
59
- if ($GOTMLS_settings_array["menu_group"] == 2)
60
- add_submenu_page("tools.php", $pageTitle, "<span style=\"background: url('$GOTMLS_Full_plugin_logo_URL') no-repeat; vertical-align: middle; border: 0 none; display: inline-block; height: 16px; width: 16px;\"></span> $pluginTitle", $user_can, $base_page, str_replace("-", "_", $base_page));
61
- else {
62
- if (is_multisite() && $GOTMLS_settings_array["menu_group"] > 2)
63
- $user_can = "manage_network";
64
- if (!function_exists("add_object_page") || $GOTMLS_settings_array["menu_group"])
65
- add_menu_page($pageTitle, $pluginTitle, $user_can, $base_page, $base_function, $GOTMLS_Full_plugin_logo_URL);
66
- else
67
- add_object_page($pageTitle, $pluginTitle, $user_can, $base_page, $base_function, $GOTMLS_Full_plugin_logo_URL);
68
- add_submenu_page($base_page, "$pluginTitle ".GOTMLS_Scan_Settings_LANGUAGE, GOTMLS_Scan_Settings_LANGUAGE, $user_can, $base_page, $base_function);
69
- add_submenu_page($base_page, "$pluginTitle ".GOTMLS_Run_Quick_Scan_LANGUAGE, GOTMLS_Run_Quick_Scan_LANGUAGE, $user_can, "$base_page&scan_type=Quick+Scan", $base_function);
70
- add_submenu_page($base_page, "$pluginTitle ".GOTMLS_View_Quarantine_LANGUAGE, GOTMLS_View_Quarantine_LANGUAGE, $user_can, "$base_page&scan_type=Quarantine", $base_function);
71
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  }
73
 
74
- function GOTMLS_display_header($pTitle, $optional_box = "") {
75
- global $GOTMLS_onLoad, $GOTMLS_loop_execution_time, $GOTMLS_update_home, $GOTMLS_plugin_home, $GOTMLS_definitions_versions, $wp_version, $current_user, $GOTMLS_protocol, $GOTMLS_settings_array;
76
  get_currentuserinfo();
77
  $GOTMLS_url_parts = explode('/', GOTMLS_siteurl);
78
  if (isset($_GET["check_site"]) && $_GET["check_site"] == 1)
79
- echo '<br /><br /><div class="updated" id="check_site" style="z-index: 1234567; position: absolute; top: 1px; left: 1px; margin: 15px;"><img src="'.GOTMLS_images_path.'checked.gif" height=16 width=16 alt="&#x2714;"> '.GOTMLS_Tested_your_site_LANGUAGE.' ;-)</div><script type="text/javascript">window.parent.document.getElementById("check_site_warning").style.backgroundColor=\'#0C0\';</script><iframe style="width: 230px; height: 110px; position: absolute; right: 4px; bottom: 4px; border: none;" scrolling="no" src="http://wordpress.org/extend/plugins/GOTMLS/stats/?compatibility[version]='.$wp_version.'&compatibility[topic_version]='.GOTMLS_Version.'&compatibility[compatible]=1#compatibility-works"></iframe><a target="_blank" href="http://wordpress.org/extend/plugins/gotmls/faq/?compatibility[version]='.$wp_version.'&compatibility[topic_version]='.GOTMLS_Version.'&compatibility[compatible]=1#compatibility-works"><span style="width: 234px; height: 82px; position: absolute; right: 4px; bottom: 36px;"></span><span style="width: 345px; height: 32px; position: absolute; right: 84px; bottom: 4px;">Vote "Works" on WordPress.org -&gt;</span></a><style>#footer, #GOTMLS-Settings, #right-sidebar, #admin-page-container, #wpadminbar, #adminmenuback, #adminmenuwrap, #adminmenu {display: none !important;} #wpbody-content {padding-bottom: 0;} #wpcontent, #footer {margin-left: 5px !important;}';
80
  else
81
- echo '<style>#right-sidebar {float: right; margin-right: 10px; width: 290px;}';
82
  $ver_info = GOTMLS_Version.'&p='.strtoupper(GOTMLS_plugin_dir).'&wp='.$wp_version.'&ts='.date("YmdHis").'&key='.GOTMLS_installation_key.'&d='.ur1encode(GOTMLS_siteurl);
83
  $Update_Link = '<div style="text-align: center;"><a href="';
84
  $new_version = "";
@@ -96,9 +127,9 @@ function GOTMLS_display_header($pTitle, $optional_box = "") {
96
  .rounded-corners {margin: 10px; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border: 1px solid #000;}
97
  .shadowed-box {box-shadow: -3px 3px 3px #666; -moz-box-shadow: -3px 3px 3px #666; -webkit-box-shadow: -3px 3px 3px #666;}
98
  .sidebar-box {background-color: #CCC;}
99
- .sidebar-links {padding: 2px 5px; list-style: none;}
100
- .sidebar-links li img {margin: 3px; height: 16px; vertical-align: middle;}
101
- .sidebar-links li {margin-bottom: 0 !important}
102
  .popup-box {background-color: #FFC; display: none; position: absolute; left: 0px; z-index: 10;}
103
  .shadowed-text {text-shadow: #00F -1px 1px 1px;}
104
  .sub-option {float: left; margin: 3px 5px;}
@@ -111,10 +142,10 @@ function GOTMLS_display_header($pTitle, $optional_box = "") {
111
  .GOTMLS h2 {margin: 0 0 10px;}
112
  .postbox {margin-right: 10px;}
113
  #pastDonations li {list-style: none;}
114
- #main-section {margin-right: 310px;}
115
  #main-page-title {
116
- background: url("'.$GOTMLS_protocol.'://1.gravatar.com/avatar/5feb789dd3a292d563fea3b885f786d6?s=64&r=G") no-repeat scroll 0 0 transparent;
117
- line-height: 22px;
 
118
  margin: 10px 0 0;
119
  padding: 0 0 0 84px;}
120
  </style>
@@ -133,10 +164,57 @@ function showhide(id) {
133
  }
134
  }
135
  }
 
 
 
 
 
 
 
 
 
 
 
 
136
  function loadIframe(title) {
137
  showhide("GOTMLS_iFrame", true);
138
  showhide("GOTMLS_iFrame");
139
  document.getElementById("windowTitle").innerHTML = title;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  showhide("div_file", true);
141
  }
142
  function cancelserver(divid) {
@@ -228,17 +306,35 @@ function releaseCorner() {
228
  }
229
  setDiv("div_file");
230
  </script>
231
- <h1 id="main-page-title">'.$pTitle.'</h1>
232
- <div id="right-sidebar" class="metabox-holder">
233
- <div id="pluginupdates" class="shadowed-box stuffbox"><h3 class="hndle"><span>'.GOTMLS_Plugin_Updates_LANGUAGE.' '.$wp_version.'</span></h3>
234
- <div id="findUpdates" class="inside"><center>'.GOTMLS_Searching_updates_LANGUAGE.'<br /><img src="'.GOTMLS_images_path.'wait.gif" height=16 width=16 alt="Wait..." /><br /><input type="button" value="Cancel" onclick="cancelserver(\'findUpdates\');" /></center></div>
235
- '.$Update_Link.'
236
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
  <script type="text/javascript">
238
  stopCheckingUpdates = checkupdateserver("'.$GOTMLS_plugin_home.GOTMLS_update_images_path.'?js='.$ver_info.'", "findUpdates", "'.str_replace("://", "://www.", $GOTMLS_plugin_home).GOTMLS_update_images_path.'?js='.$ver_info.'");
239
- </script>
240
- <div id="definitionupdates" class="stuffbox shadowed-box"><h3 class="hndle"><span>'.GOTMLS_Definition_Updates_LANGUAGE.' ('.$definition_version.')</span></h3>
241
- <script type="text/javascript">
242
  function check_for_updates(chk) {
243
  if (auto_img = document.getElementById("autoUpdateDownload")) {
244
  auto_img.style.display="";
@@ -286,32 +382,6 @@ setDiv("div_file");
286
  if (foundUpdates)
287
  foundUpdates.style.display = "";
288
  }
289
- </script>
290
- <form id="updateform" method="post" name="updateform" action="'.GOTMLS_script_URI.'">
291
- <img style="display: none; float: right; margin-right: 14px;" src="'.GOTMLS_images_path.'checked.gif" height=16 width=16 alt="definitions file updated" id="autoUpdateDownload" onclick="downloadUpdates(\'UpdateDownload\');">
292
- <div id="Definition_Updates" class="inside"><center>'.__("Searching for updates ...",'gotmls').'<br /><img src="'.GOTMLS_images_path.'wait.gif" height=16 width=16 alt="Wait..." /><br /><input type="button" value="Cancel" onclick="cancelserver(\'Definition_Updates\');" /></center></div>
293
- <div id="autoUpdateForm" style="display: none;" class="inside">
294
- <input type="submit" name="auto_update" value="'.__("Download new definitions!",'gotmls').'">
295
- </div>
296
- </form>
297
- <div id="registerKeyForm" style="display: none;" class="inside">
298
- '.__("If you have not already registered your Key then register now and get instant access to definition updates.<p>*All fields are required and I will NOT share your registration information with anyone.</p>",'gotmls').'
299
- <form id="registerform" onsubmit="return sinupFormValidate(this);" action="'.$GOTMLS_update_home.'wp-login.php?action=register" method="post" name="registerform" target="GOTMLS_iFrame"><input type="hidden" name="redirect_to" id="register_redirect_to" value="/donate/"><input type="hidden" name="user_login" id="register_user_login" value="">
300
- <div>'.__("Your Full Name:",'gotmls').'</div>
301
- <div style="float: left; width: 50%;"><input style="width: 100%;" id="first_name" type="text" name="first_name" value="'.$current_user->user_firstname.'" /></div>
302
- <div style="float: left; width: 50%;"><input style="width: 100%;" id="last_name" type="text" name="last_name" value="'.$current_user->user_lastname.'" /></div>
303
- <div style="clear: left; width: 100%;">
304
- <div>'.__("A password will be e-mailed to this address:",'gotmls').'</div>
305
- <input style="width: 100%;" id="user_email" type="text" name="user_email" value="'.$current_user->user_email.'" /></div>
306
- <div>
307
- <div>'.__("Your WordPress Site URL:",'gotmls').'</div>
308
- <input style="width: 100%;" id="user_url" type="text" name="user_url" value="'.GOTMLS_siteurl.'" readonly /></div>
309
- <div>
310
- <div>'.__("Plugin Installation Key:",'gotmls').'</div>
311
- <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>
312
- <input style="width: 100%;" id="wp-submit" type="submit" name="wp-submit" value="Register Now!" /></form></div>
313
- </div>
314
- <script type="text/javascript">
315
  var divNAtext = false;
316
  function loadGOTMLS() {
317
  clearTimeout(divNAtext);
@@ -331,8 +401,7 @@ setDiv("div_file");
331
  else
332
  divNAtext=true;
333
  </script>
334
- <div id="pluginlinks" class="shadowed-box stuffbox"><h3 class="hndle"><span>'.__("Plugin Links",'gotmls').'</span></h3>
335
- <div class="inside">
336
  <div id="pastDonations"></div>
337
  <form name="ppdform" id="ppdform" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
338
  <input type="hidden" name="cmd" value="_donations">
@@ -357,33 +426,108 @@ setDiv("div_file");
357
  <input type="hidden" name="cancel_return" value="'.$GOTMLS_update_home.GOTMLS_installation_key.'/donate/?donation-source=cancel">
358
  <input type="image" id="pp_button" src="'.GOTMLS_images_path.'btn_donateCC_WIDE.gif" border="0" name="submitc" alt="'.__("Make a Donation with PayPal",'gotmls').'">
359
  <div>
360
- <ul class="sidebar-links">
361
- <li style="float: right;"><b>on <a target="_blank" href="http://profiles.wordpress.org/scheeeli">WordPress.org</a></b><ul class="sidebar-links">
362
- <li><a target="_blank" href="http://wordpress.org/extend/plugins/'.GOTMLS_plugin_dir.'/faq/">Plugin FAQs</a></li>
363
- <li><a target="_blank" href="http://wordpress.org/support/plugin/'.GOTMLS_plugin_dir.'">Forum Posts</a></li>
364
- <li><a target="_blank" href="http://wordpress.org/support/view/plugin-reviews/gotmls'.GOTMLS_plugin_dir.'">Plugin Reviews</a></li>
365
  </ul></li>
366
  <li><img src="'.$GOTMLS_update_home.'/favicon.ico" border="0" alt="Plugin site:"><b><a target="_blank" href="'.$GOTMLS_update_home.'">GOTMLS.NET</a></b></li>
367
  <li><img src="'.$GOTMLS_plugin_home.'/favicon.ico" border="0" alt="Developer site:"><b><a target="_blank" href="'.$GOTMLS_plugin_home.'/category/my-plugins/anti-malware/">Eli\'s Blog</a></b></li>
368
- <li><img src="//ssl.gstatic.com/ui/v1/icons/mail/favicon.ico" border="0" alt="mail:"><b><a target="_blank" href="mailto:eli@gotmls.net">Email Eli</a></b></li>
369
- <li><iframe allowtransparency="true" frameborder="0" scrolling="no" src="//platform.twitter.com/widgets/follow_button.html?screen_name=GOTMLS&amp;show_count=false" style="width:125px; height:20px;"></iframe></li>
370
  </ul>
371
  </div>
372
  </form>
373
- <a target="_blank" href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site='.urlencode(GOTMLS_siteurl).'">Google Safe Browsing Diagnostic</a>
374
- </div>
375
- </div>
376
  '.$optional_box.'
377
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
378
  <div id="admin-page-container">
379
- <div id="main-section">';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
380
  }
381
 
382
  function GOTMLS_settings() {
383
- global $GOTMLS_quarantine_dir, $GOTMLS_definitions_array, $GOTMLS_threat_levels, $GOTMLS_scanfiles, $GOTMLS_loop_execution_time, $GOTMLS_skip_ext, $GOTMLS_skip_dirs, $GOTMLS_settings_array, $GOTMLS_dirs_at_depth, $GOTMLS_dir_at_depth, $GOTMLS_protocol;
384
- $GOTMLS_menu_groups = array(__("Main Menu Item placed below <b>Comments</b> and above <b>Appearance</b>",'gotmls'),__("Main Menu Item placed below <b>Settings</b>",'gotmls'),__("Sub-Menu inside the <b>Tools</b> Menu Item",'gotmls'));
385
- if (is_multisite() && current_user_can("manage_network"))
386
- $GOTMLS_menu_groups[] = __("ONLY SHOW for <b>Network Admins</b>",'gotmls');
387
  $GOTMLS_scan_groups = array();
388
  $dirs = GOTMLS_explode_dir(__file__);
389
  $scan_level = intval($GOTMLS_settings_array["scan_level"]);
@@ -430,50 +574,73 @@ function GOTMLS_settings() {
430
  $GOTMLS_settings_array['check_potential'] = $_POST['check_potential'];
431
  GOTMLS_update_scan_log(array("settings" => $GOTMLS_settings_array));
432
  $scan_opts = '';
433
- $scan_optjs = "<script type=\"text/javascript\">\nfunction showOnly(what) {\n";
434
  foreach ($GOTMLS_scan_groups as $mg => $GOTMLS_scan_group) {
435
  $scan_optjs .= "document.getElementById('only$mg').style.display = 'none';\n";
436
- $scan_opts .= '<div style="position: relative; float: right; padding: 2px 0px 4px 30px;" id="scan_group_div_'.$mg.'"><input type="radio" name="scan_what" id="not-only'.$mg.'" value="'.$mg.'"'.($GOTMLS_settings_array["scan_what"]==$mg?' checked':'').' /><a style="text-decoration: none;" href="#scan_what" onclick="showOnly(\''.$mg.'\');document.getElementById(\'not-only'.$mg.'\').checked=true;">'.$GOTMLS_scan_group.'</a><br /><div class="rounded-corners" style="position: absolute; display: none; background-color: #CCF; padding: 10px; z-index: 10;" id="only'.$mg.'"><div style="position: relative; padding: 0 40px 0 0;"><a class="rounded-corners" style="position: absolute; right: 0; margin: 0; padding: 0 4px; text-decoration: none; color: #C00; background-color: #FCC; border: solid #F00 1px;" href="#scan_what" onclick="showhide(\'only'.$mg.'\');">X</a><b>'.str_replace(" ", "&nbsp;", __("Only Scan These Folders:",'gotmls')).'</b></div>';
 
 
437
  $dir = implode(GOTMLS_slash(), array_slice($dirs, 0, -1 * (2 + $mg)));
438
  $files = GOTMLS_getfiles($dir);
439
  if (is_array($files))
440
  foreach ($files as $file)
441
  if (is_dir(GOTMLS_trailingslashit($dir).$file))
442
- $scan_opts .= '<br /><input type="checkbox" name="scan_only[]" value="'.$file.'" />'.$file;
443
- $scan_opts .= '</div></div>';
 
 
 
444
  }
445
  $scan_optjs .= "document.getElementById('only'+what).style.display = 'block';\n}\n</script>";
446
- $scan_opts = '><form method="POST" name="GOTMLS_Form" action="'.str_replace('&mt=', '&last_mt=', str_replace('&scan_type=', '&last_type=', GOTMLS_script_URI)).'"><input type="hidden" name="scan_type" id="scan_type" value="Complete Scan" /><div style="float: left;"><b>'.__("What to scan:",'gotmls').'</b></div><div style="float: left;">'.$scan_opts.$scan_optjs.'</div><div style="float: left;" id="scanwhatfolder"></div><br style="clear: left;" /><p><b>'.__("Scan Depth:",'gotmls').'</b> ('.__("how far do you want to drill down from your starting directory?",'gotmls').')</p><div style="padding: 0 30px;"><input type="text" value="'.$GOTMLS_settings_array["scan_depth"].'" name="scan_depth"> ('.__("-1 is infinite depth",'gotmls').')</div><p><b>'.__("What to look for:",'gotmls').'</b></p><div style="padding: 0 30px;">';//.print_r(array('<pre>',$GOTMLS_settings_array,'</pre>'),1);
 
 
 
 
 
 
 
447
  foreach ($GOTMLS_threat_levels as $threat_level_name=>$threat_level) {
448
- $scan_opts .= '<div style="padding: 0; position: relative;" id="check_'.$threat_level.'_div">';
 
449
  if (isset($GOTMLS_definitions_array[$threat_level]))
450
- $scan_opts .= '<input type="checkbox" name="check[]" id="check_'.$threat_level.'_Yes" value="'.$threat_level.'"'.(in_array($threat_level,$GLOBALS["GOTMLS"]["settings"]["check"])?' checked':'').' /> <a style="text-decoration: none;" href="#check_'.$threat_level.'_div_0" onclick="document.getElementById(\'check_'.$threat_level.'_Yes\').checked=true;showhide(\'dont_check_'.$threat_level.'\');">';
 
451
  else
452
- $scan_opts .= '<a title="'.__("Download Definition Updates to Use this feature",'gotmls').'"><img src="'.GOTMLS_images_path.'blocked.gif" height=16 width=16 alt="X">';
 
453
  $scan_opts .= (isset($_GET['eli']) && isset($_SESSION['GOTMLS_'.$_GET['eli']][$threat_level])?print_r($_SESSION['GOTMLS_'.$_GET['eli']][$threat_level],1):"")."<b>$threat_level_name</b></a>";
454
  if (!isset($GOTMLS_definitions_array[$threat_level]))
455
- $scan_opts .= '<br /><div style="padding: 14px;" id="check_'.$threat_level.'_div_NA">'.__("Registration of your Installation Key is required for this feature",'gotmls').'</div>';
 
456
  elseif (isset($_GET['eli'])) {
457
- $scan_opts .= '<div style="padding: 0 20px; position: relative; top: -18px; display: none;" id="dont_check_'.$threat_level.'"><a class="rounded-corners" style="position: absolute; left: 0; margin: 0; padding: 0 4px; text-decoration: none; color: #C00; background-color: #FCC; border: solid #F00 1px;" href="#check_'.$threat_level.'_div_0" onclick="showhide(\'dont_check_'.$threat_level.'\');">X</a>';
 
458
  foreach ($GOTMLS_definitions_array[$threat_level] as $threat_name => $threat_regex)
459
- $scan_opts .= '<br /><input type="checkbox" name="dont_check[]" value="'.htmlspecialchars($threat_name).'"'.(in_array($threat_name, $GOTMLS_settings_array["dont_check"])?' checked /><script>showhide("dont_check_'.$threat_level.'", true);</script>':' />').(isset($_GET['eli']) && isset($_SESSION['GOTMLS_'.$_GET['eli']][$threat_name])?print_r($_SESSION['GOTMLS_'.$_GET['eli']][$threat_name],1):"").$threat_name;
460
- $scan_opts .= '</div>';
 
 
461
  }
462
- $scan_opts .= '</div>';
 
463
  }
464
- if (isset($_GET['eli'])) { if (isset($_SESSION['GOTMLS_'.$_GET['eli']]['total'])) {$scan_opts .=print_r($_SESSION['GOTMLS_'.$_GET['eli']]['total'],1); unset($_SESSION['GOTMLS_'.$_GET['eli']]);} $scan_opts .= '<div style="padding: 10px;"><b>'.__("Custom RegExp:",'gotmls').'</b> ('.__("For very advanced users only. Do not use this without talking to Eli first. If used incorrectly you could easily break your site.",'gotmls').')<br /><input type="text" name="check_custom" style="width: 100%;" value="'.htmlspecialchars($GOTMLS_settings_array["check_custom"]).'" /></div>';}//still testing this option
465
- $scan_opts .= '</div><p>'.__("<b>Skip files with the following extentions:</b> (a comma separated list of file extentions to be excluded from the scan)",'gotmls').'</p><div style="padding: 0 30px;"><input type="text" name="exclude_ext" value="'.implode(",", $GOTMLS_settings_array["exclude_ext"]).'" style="width: 100%;" /></div><p>'.__("<b>Skip directories with the following names:</b> (a comma separated list of folders to be excluded from the scan)",'gotmls').'</p><div style="padding: 0 30px;"><input type="text" name="exclude_dir" value="'.implode(",", $GOTMLS_settings_array["exclude_dir"]).'" style="width: 100%;" /></div><p style="text-align: right;"><input type="submit" id="complete_scan" value="'.GOTMLS_Run_Complete_Scan_LANGUAGE.'" class="button-primary" /></p></form></div></div>';
466
- $menu_opts = '<div class="stuffbox shadowed-box">
467
- <h3 class="hndle"><span>'.__("Menu Item Placement Options",'gotmls').'</span></h3>
468
- <div class="inside"><form method="POST" name="GOTMLS_menu_Form">';
469
- foreach ($GOTMLS_menu_groups as $mg => $GOTMLS_menu_group)
470
- $menu_opts .= '<div style="padding: 4px;" id="menu_group_div_'.$mg.'"><input type="radio" name="GOTMLS_menu_group" value="'.$mg.'"'.($GOTMLS_settings_array["menu_group"]==$mg?' checked':'').' onchange="document.GOTMLS_menu_Form.submit();" />'.$GOTMLS_menu_group.'</div>';
 
 
 
471
  @ob_start();
472
  $OB_default_handlers = array("default output handler", "zlib output compression");
473
  foreach (ob_list_handlers() as $OB_last_handler)
474
  if (!in_array($OB_last_handler, $OB_default_handlers))
475
  echo '<div class="error">'.sprintf(__("Another Plugin or Theme is using '%s' to handle output buffers. <br />This prevents actively outputing the buffer on-the-fly and will severely degrade the performance of this (and many other) Plugins. <br />Consider disabling caching and compression plugins (at least during the scanning process).",'gotmls'), $OB_last_handler).'</div>';
476
- GOTMLS_display_header('Anti-Malware by <img style="vertical-align: middle;" alt="ELI" src="'.$GOTMLS_protocol.'://0.gravatar.com/avatar/69ad8428e97469d0dcd64f1f60c07bd8?s=64" /> at GOTMLS.NET', $menu_opts.'</form><br style="clear: left;" /></div></div>');
477
  $scan_groups = array_merge(array(__("Scanned Files",'gotmls')=>"scanned",__("Selected Folders",'gotmls')=>"dirs",__("Scanned Folders",'gotmls')=>"dir",__("Skipped Folders",'gotmls')=>"skipdirs",__("Skipped Files",'gotmls')=>"skipped",__("Read/Write Errors",'gotmls')=>"errors",__("Quarantined Files",'gotmls')=>"bad"), $GOTMLS_threat_levels);
478
  echo '<script type="text/javascript">
479
  var percent = 0;
@@ -555,15 +722,15 @@ function update_status(title, time) {
555
  foreach ($scan_groups as $scan_name => $scan_group) {
556
  $vars .= ", $scan_group=0";
557
  if ($MAX++ == 6) {
558
- echo "/*-->*"."/\n\tif ($scan_group > 0)\n\t\tscan_state = ' potential'; \n\telse\n\t\tscan_state = '';\n\tdivHTML += '</ul><ul style=\"text-align: left;\"><li class=\"GOTMLS_li\"><a href=\"admin.php?page=GOTMLS-settings&scan_type=Quarantine\" title=\"View Quarantine\" class=\"GOTMLS_plugin'+scan_state+'\">'+$scan_group+' '+($scan_group==1?('$scan_name').slice(0,-1):'$scan_name')+'</a></li>';\n/*<!--*"."/";
559
  $found = "Found ";
560
  $fix_button_js = "\n\t\tdis='block';";
561
  } else {
562
- if ($found && !in_array($scan_group, $GLOBALS["GOTMLS"]["settings"]["check"]))
563
  $potential_threat = ' potential" title="'.__("You are not currently scanning for this type of threat!",'gotmls');
564
  else
565
  $potential_threat = "";
566
- echo "/*-->*"."/\n\tif ($scan_group > 0) {\n\t\tscan_state = ' href=\"#found_$scan_group\" onclick=\"$li_js showhide(\\'found_$scan_group\\', true);\" class=\"GOTMLS_plugin $scan_group\"';$fix_button_js".($MAX>6?"\n\tshowhide('found_$scan_group', true);":"")."\n\t} else\n\t\tscan_state = ' class=\"GOTMLS_plugin$potential_threat\"';\n\tdivHTML += '<li class=\"GOTMLS_li\"><a'+scan_state+'>$found'+$scan_group+' '+($scan_group==1?('$scan_name').slice(0,-1):'$scan_name')+'</a></li>';\n/*<!--*"."/";
567
  }
568
  $li_js = "";
569
  if ($MAX > 11)
@@ -578,163 +745,156 @@ function showOnly(what) {
578
  document.getElementById("only_what").innerHTML = document.getElementById("only"+what).innerHTML;
579
  }
580
  var startTime = 0;
581
- </script>
582
- <div class="metabox-holder GOTMLS" style="width: 100%;" id="GOTMLS-Settings"><div class="postbox shadowed-box">
583
- <div title="Click to toggle" onclick="showhide(\'GOTMLS-Settings-Form\');" class="handlediv"><br></div>
584
- <h3 title="Click to toggle" onclick="showhide(\'GOTMLS-Settings-Form\');" style="cursor: pointer;" class="hndle"><span>'.GOTMLS_Scan_Settings_LANGUAGE.'</span></h3>
585
- <div id="GOTMLS-Settings-Form" class="inside"';
586
- if ((isset($_REQUEST["scan_type"]) && ($_REQUEST["scan_type"] == "Quarantine")) || (isset($_REQUEST["scan_what"]) && is_numeric($_REQUEST["scan_what"]))) {
587
  if (!isset($_REQUEST["scan_type"]))
588
  $_REQUEST["scan_type"] = "Complete Scan";
589
  update_option('GOTMLS_settings_array', $GOTMLS_settings_array);
590
- echo ' style="display: none;"'.$scan_opts.'<form method="POST" target="GOTMLS_iFrame" name="GOTMLS_Form_clean"><input type="hidden" id="GOTMLS_fixing" name="GOTMLS_fixing" value="1"><div class="postbox shadowed-box"><div title="Click to toggle" onclick="showhide(\'GOTMLS-Scan-Progress\');" class="handlediv"><br></div><h3 title="Click to toggle" onclick="showhide(\'GOTMLS-Scan-Progress\');" style="cursor: pointer;" class="hndle"><span>'.$_REQUEST["scan_type"].' Status</span></h3>';
591
- if ($_REQUEST["scan_type"] != "Quarantine") {
592
- if ($_REQUEST["scan_what"] > -1)
593
- GOTMLS_update_scan_log(array("scan" => array("dir" => implode(GOTMLS_slash(), array_slice($dirs, 0, -1 * (2 + $_REQUEST["scan_what"]))))));
594
- echo '<div id="GOTMLS-Scan-Progress" class="inside">';
595
- foreach ($_POST as $name => $value) {
596
- if (substr($name, 0, 10) != 'GOTMLS_fix') {
597
- if (is_array($value)) {
598
- foreach ($value as $val)
599
- echo '<input type="hidden" name="'.$name.'[]" value="'.htmlspecialchars($val).'">';
600
- } else
601
- echo '<input type="hidden" name="'.$name.'" value="'.htmlspecialchars($value).'">';
602
- }
603
  }
604
- echo '<div id="status_text"><img src="'.GOTMLS_images_path.'wait.gif" height=16 width=16 alt="..."> '.GOTMLS_Loading_LANGUAGE.'</div><div id="status_bar"></div><p id="pause_button" style="display: none; position: absolute; left: 0; text-align: center; margin-left: -30px; padding-left: 50%;"><input type="button" value="Pause" class="button-primary" onclick="pauseresume(this);" id="resume_button" /></p><div id="status_counts"></div><p id="fix_button" style="display: none; text-align: center;"><input id="repair_button" type="submit" value="'.__("Automatically Fix SELECTED Files Now",'gotmls').'" class="button-primary" onclick="loadIframe(\'Examine Results\');" /></p></div></div>
605
- <div class="postbox shadowed-box"><div title="Click to toggle" onclick="showhide(\'GOTMLS-Scan-Details\');" class="handlediv"><br></div><h3 title="Click to toggle" onclick="showhide(\'GOTMLS-Scan-Details\');" style="cursor: pointer;" class="hndle"><div style="float: right;">&nbsp;('.$GLOBALS["GOTMLS"]["scan"]["dir"].')&nbsp;</div><span>'.__("Scan Details:",'gotmls').'</span></h3>';
606
  }
607
- echo '<div id="GOTMLS-Scan-Details" class="inside">
608
- <script type="text/javascript">
609
- function checkAllFiles(check) {
610
- var checkboxes = new Array();
611
- checkboxes = document["GOTMLS_Form_clean"].getElementsByTagName("input");
612
- for (var i=0; i<checkboxes.length; i++)
613
- if (checkboxes[i].type == "checkbox")
614
- checkboxes[i].checked = check;
615
- }
616
- function setvalAllFiles(val) {
617
- var checkboxes = document.getElementById("GOTMLS_fixing");
618
- if (checkboxes)
619
- checkboxes.value = val;
620
- }
621
- </script>';
622
- if ($_REQUEST["scan_type"] == "Quarantine") {
623
- $entries = GOTMLS_getfiles($GOTMLS_quarantine_dir);
624
- echo GOTMLS_scan_log()."\n<ul name=\"found_Quarantine\" id=\"found_Quarantine\" class=\"GOTMLS_plugin known\" style=\"background-color: #ccc; padding: 0;\"><h3>";
625
- if (is_array($entries) && ($key = array_search(".htaccess", $entries)))
626
- unset($entries[$key]);
627
- if (is_array($entries) && ($key = array_search("index.php", $entries)))
628
- unset($entries[$key]);
629
- if (is_array($entries) && count($entries)) {
630
- echo (count($entries)?'<input type="checkbox" onchange="checkAllFiles(this.checked); document.getElementById(\'fix_button\').style.display = \'block\';"> Check all ':'').count($entries).' Item'.(count($entries)==1?'':'s').' in Quarantine<span style="float: right;">Date Quarantined</span></h3><p id="fix_button" style="display: none; float: right;"><input id="repair_button" type="submit" value="'.__("Restore SELECTED files from Quarantine",'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;" /><br /><input id="delete_button" type="submit" class="button-primary" value="'.__("Delete SELECTED files from Quarantine",'gotmls').'" style="background-color: #C33; color: #FFF; background-image: linear-gradient(to bottom, #C22, #933); border-color: #933 #933 #900; box-shadow: 0 1px 0 rgba(230, 120, 120, 0.5) inset; text-decoration: none; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); margin-top: 10px;" 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.</b></p> FYI - these files are found in:",'gotmls').' '.$GOTMLS_quarantine_dir;
631
- sort($entries);
632
- foreach ($entries as $entry) {
633
- $file = GOTMLS_trailingslashit($GOTMLS_quarantine_dir).$entry;
634
- $date = date("y-m-d-H-i",filemtime($file));
635
- echo '<li><img src="'.GOTMLS_images_path.'/blocked.gif" height=16 width=16 alt="Q" style="float: left;">';
636
- if (is_file($file) && GOTMLS_get_ext($entry) == "gotmls") {
637
- $file_date = explode(".", $entry);
638
- if (count($file_date) > 2 && strlen($file_date[0]) == 5)
639
- $date = GOTMLS_sexagesimal($file_date[0]);
640
- elseif (@rename($file, GOTMLS_trailingslashit($GOTMLS_quarantine_dir).GOTMLS_sexagesimal($date).".$entry"))
641
- $file = GOTMLS_trailingslashit($GOTMLS_quarantine_dir).GOTMLS_sexagesimal($date).".$entry";
642
- echo '<input type="checkbox" name="GOTMLS_fix[]" value="'.GOTMLS_encode($file).'" id="check_'.GOTMLS_encode($file).'" onchange="document.getElementById(\'fix_button\').style.display = \'block\';" />'.GOTMLS_error_link("View Quarantined File", $file).str_replace($root_path, "", GOTMLS_decode($file_date[count($file_date)-2]));
643
- } else
644
- echo '<li><img src="'.GOTMLS_images_path.'/blocked.gif" height=16 width=16 alt="?" style="float: left;">'.GOTMLS_error_link("Foreign File in Quarantine", $file).$file;
645
- $date = explode("-", $date);
646
- echo "</a> <span style='float: right; margin-right: 8px;'>(20$date[0]-$date[1]-$date[2] at $date[3]:$date[4])</span></li>";
647
- }
648
- } else
649
- echo __("No Items in Quarantine",'gotmls').'</h3>';
650
- echo "</ul>";
651
- } elseif ($_REQUEST["scan_what"] > -1) {
652
- if (!($dir = implode(GOTMLS_slash(), array_slice($dirs, 0, -1 * (2 + $_REQUEST["scan_what"]))))) $dir = "/";
653
- foreach ($scan_groups as $scan_name => $scan_group)
654
- echo "\n<ul name=\"found_$scan_group\" id=\"found_$scan_group\" class=\"GOTMLS_plugin $scan_group\" style=\"background-color: #ccc; display: none; padding: 0;\"><a class=\"rounded-corners\" name=\"link_$scan_group\" style=\"float: right; padding: 0 4px; margin: 5px 5px 0 30px; line-height: 16px; text-decoration: none; color: #C00; background-color: #FCC; border: solid #F00 1px;\" href=\"#found_top\" onclick=\"showhide('found_$scan_group');\">X</a><h3>$scan_name</h3>\n".($scan_group=='potential'?'<p> &nbsp; * '.__("NOTE: These are probably not malicious scripts (but it's a good place to start looking <u>IF</u> your site is infected and no Known Threats were found).",'gotmls').'</p>':($scan_group=='wp_login'?'<p> &nbsp; * '.__("NOTE: 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. For more information on brute force attack prevention and the WordPress wp-login-php file ",'gotmls').' <a target="_blank" href="http://gotmls.net/tag/wp-login-php/">'.__("read my blog",'gotmls').'</a>.</p>':'<br />')).'</ul>';
655
- GOTMLS_update_scan_log(array("scan" => array("start" => time(), "type" => $_REQUEST["scan_type"])));
656
- while (in_array($OB_last_handler, $OB_default_handlers) && @ob_end_flush())
657
- foreach (ob_list_handlers() as $OB_handler)
658
- $OB_last_handler = $OB_handler;
659
- @ob_start();
660
- if ($_REQUEST["scan_type"] == "Quick Scan")
661
- $li_js = "\nfunction testComplete() {\n\tif (percent != 100)\n\t\talert('".__("The Quick Scan was unable to finish because of a shortage of memory or a problem accessing a file. Please try using the Complete Scan, it is slower but it will handle these errors better and continue scanning the rest of the files.",'gotmls')."');\n}\nwindow.onload=testComplete;\n</script>\n<script type=\"text/javascript\">";
662
- echo "\n<script type=\"text/javascript\">$li_js\n/*<!--*"."/";
663
- if (is_dir($dir)) {
664
- $GOTMLS_dirs_at_depth[0] = 1;
665
- $GOTMLS_dir_at_depth[0] = 0;
666
- if (!(isset($_GET["eli"]) && $_GET["eli"] == "NOQ")) {
667
- $GOTMLS_dirs_at_depth[0]++;
668
- GOTMLS_readdir($GOTMLS_quarantine_dir);
669
- }
670
- if (isset($_POST['scan_only']) && is_array($_POST['scan_only'])) {
671
- $GOTMLS_dirs_at_depth[0] += (count($_POST['scan_only']) - 1);
672
- foreach ($_POST['scan_only'] as $only_dir)
673
- if (is_dir(GOTMLS_trailingslashit($dir).$only_dir))
674
- GOTMLS_readdir(GOTMLS_trailingslashit($dir).$only_dir);
675
- } else
676
- GOTMLS_readdir($dir);
677
  } else
678
- echo GOTMLS_return_threat("errors", "blocked", $dir, GOTMLS_error_link("Not a valid directory!"));
679
- if ($_REQUEST["scan_type"] == "Quick Scan")
680
- echo GOTMLS_update_status(__("Completed!",'gotmls'), 100);
681
- else {
682
- echo GOTMLS_update_status(__("Starting Scan ...",'gotmls'))."/*-->*"."/";
683
- echo "\nvar scriptSRC = '".GOTMLS_script_URI."&no_error_reporting&GOTMLS_scan=';\nvar scanfilesArKeys = new Array('".implode("','", array_keys($GOTMLS_scanfiles))."');\nvar scanfilesArNames = new Array('Scanning ".implode("','Scanning ", $GOTMLS_scanfiles)."');".'
 
 
684
  var scanfilesI = 0;
685
  var stopScanning;
686
  var gotStuckOn = "";
687
  function scanNextDir(gotStuck) {
688
- clearTimeout(stopScanning);
689
- if (gotStuck > -1) {
690
- if (scanfilesArNames[gotStuck].substr(0, 3) != "Re-") {
691
- if (scanfilesArNames[gotStuck].substr(0, 9) == "Checking ") {
692
- scanfilesArNames.push(scanfilesArNames[gotStuck]);
693
- scanfilesArKeys.push(scanfilesArKeys[gotStuck]+"&GOTMLS_skip_file[]="+encodeURIComponent(scanfilesArNames[gotStuck].substr(9)));
694
- } else {
695
- scanfilesArNames.push("Re-"+scanfilesArNames[gotStuck]);
696
- scanfilesArKeys.push(scanfilesArKeys[gotStuck]+"&GOTMLS_only_file=");
697
- }
698
  } else {
699
- scanfilesArNames.push("Got Stuck "+scanfilesArNames[gotStuck]);
700
- scanfilesArKeys.push(scanfilesArKeys[gotStuck]+"&GOTMLS_skip_dir="+scanfilesArKeys[gotStuck]);
701
  }
702
- }
703
- if (document.getElementById("resume_button").value != "Pause") {
704
- stopScanning=setTimeout("scanNextDir(-1)", 1000);
705
- startTime++;
706
- }
707
- else if (scanfilesI < scanfilesArKeys.length) {
708
- document.getElementById("status_text").innerHTML = scanfilesArNames[scanfilesI];
709
- var newscript = document.createElement("script");
710
- newscript.setAttribute("src", scriptSRC+scanfilesArKeys[scanfilesI]);
711
- divx = document.getElementById("found_scanned");
712
- if (divx)
713
- divx.appendChild(newscript);
714
- stopScanning=setTimeout("scanNextDir("+(scanfilesI++)+")",'.$GOTMLS_loop_execution_time.'000);
715
  }
716
  }
717
- startTime = ('.ceil(time()-$GLOBALS["GOTMLS"]["scan"]["start"]).'+3);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
718
  stopScanning=setTimeout("scanNextDir(-1)",3000);
719
  function pauseresume(butt) {
720
- if (butt.value == "Resume")
721
- butt.value = "Pause";
722
- else
723
- butt.value = "Resume";
724
  }
725
  showhide("pause_button", true);'."\n/*<!--*"."/";
726
- }
727
- if (@ob_get_level()) {
728
- GOTMLS_flush('script');
729
- @ob_end_flush();
730
- }
731
- echo "/*-->*"."/\n</script>";
732
  }
733
- echo "\n</div></div></form>";
 
 
 
 
734
  } else {
735
- echo $scan_opts.'<div class="postbox shadowed-box"><div title="Click to toggle" onclick="showhide(\'GOTMLS-Scan-Progress\');" class="handlediv"><br></div><h3 title="Click to toggle" onclick="showhide(\'GOTMLS-Scan-Progress\');" style="cursor: pointer;" class="hndle"><span>'.__("Last Scan Status",'gotmls').'</span></h3><div id="GOTMLS-Scan-Progress" class="inside">'.GOTMLS_scan_log()."\n</div></div>";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
736
  }
737
- echo "\n</div></div></div>";
738
  }
739
 
740
  function GOTMLS_set_plugin_action_links($links_array, $plugin_file) {
@@ -861,8 +1021,18 @@ function GOTMLS_init() {
861
  $_GET["eli"] = "quarantine";
862
  }
863
  GOTMLS_scanfile($file);
864
- if (isset($GOTMLS_threats_found) && is_array($GOTMLS_threats_found) && count($GOTMLS_threats_found)) {
865
- $fa = '';
 
 
 
 
 
 
 
 
 
 
866
  $f = 1;
867
  foreach ($GOTMLS_threats_found as $threats_found=>$threats_name) {
868
  $fpos = 0;
@@ -877,6 +1047,9 @@ function GOTMLS_init() {
877
  }
878
  } else
879
  $fa = " No Threats Found";
 
 
 
880
  die("\n".'<script type="text/javascript">
881
  function select_text_range(ta_id, start, end) {
882
  ta_element = document.getElementById(ta_id);
@@ -906,7 +1079,7 @@ window.parent.showhide("GOTMLS_iFrame", true);
906
  $li_js = "<script type=\"text/javascript\">\n/*<!--*"."/";
907
  }
908
  }
909
- die('<div id="check_site_warning" style="background-color: #F00;">'.sprintf(__("Because some threats were automatically fixed we need to check to make sure the removal did not break your site. If this stays Red and the frame below does not load please <a %s>revert the changes</a> made during the automated fix process.",'gotmls'), 'target="test_frame" href="admin.php?page=GOTMLS-settings&scan_type=Quarantine"').' <span style="color: #F00;">'.__("Never mind, it worked!",'gotmls').'</span></div><br /><iframe id="test_frame" name="test_frame" src="'.GOTMLS_script_URI.'&check_site=1" style="width: 100%; height: 200px"></iframe>'.$li_js."/*-->*"."/\nalert_repaired(0);\n</script>\n");
910
  } elseif (isset($_POST["GOTMLS_fixing"]))
911
  die("<script type=\"text/javascript\">\nwindow.parent.showhide('GOTMLS_iFrame', true);\nalert('".__("Nothing Selected to be Changed!",'gotmls')."');\n</script>".__("Done!",'gotmls'));
912
  if (isset($_POST["scan_level"]) && is_numeric($_POST["scan_level"]))
@@ -929,6 +1102,7 @@ window.parent.showhide("GOTMLS_iFrame", true);
929
  update_option('GOTMLS_settings_array', $GOTMLS_settings_array);
930
  if (isset($_GET["GOTMLS_msg"]))
931
  die('<body style="margin: 0; padding: 0;">'.$_GET["GOTMLS_msg"].'</body>');
 
932
  }
933
  if (function_exists("is_admin") && is_admin() && ((isset($_POST['GOTMLS_whitelist']) && isset($_POST['GOTMLS_chksum'])) || (isset($_GET["GOTMLS_scan"]) && is_dir(GOTMLS_decode($_GET["GOTMLS_scan"]))))) {
934
  @set_time_limit($GOTMLS_loop_execution_time-5);
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.14.50
12
  */
13
  /* ___
14
  * / /\ GOTMLS Main Plugin File
31
  * \ \::/ with this program; if not, write to the Free Software Foundation,
32
  * \__\/ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
33
 
34
+ if (isset($_SERVER["SCRIPT_FILENAME"]) && __FILE__ == $_SERVER["SCRIPT_FILENAME"]) die('You are not allowed to call this page directly.<p>You could try starting <a href="/">here</a>.');
35
 
36
  define("GOTMLS_plugin_path", dirname(__FILE__).'/');
37
  load_plugin_textdomain('gotmls', false, basename(GOTMLS_plugin_path).'/languages');
46
 
47
  function GOTMLS_menu() {
48
  global $GOTMLS_settings_array;
49
+ if ($GOTMLS_settings_array["menu_group"] > 2 && is_multisite()) {
50
+ $_POST["GOTMLS_menu_group"] = 1;
51
+ $GOTMLS_settings_array["user_can"] = "manage_network";
52
+ } elseif (!isset($GOTMLS_settings_array["user_can"]))
53
+ $GOTMLS_settings_array["user_can"] = "activate_plugins";
54
+ if (isset($_POST["GOTMLS_menu_group"]) && is_numeric($_POST["GOTMLS_menu_group"])) {
55
  $GOTMLS_settings_array["menu_group"] = $_POST["GOTMLS_menu_group"];
56
+ $capabilities = array();
57
+ if (current_user_can($GOTMLS_settings_array["user_can"]))
58
+ foreach (get_editable_roles() as $role)
59
+ $capabilities = array_merge($capabilities, $role["capabilities"]);
60
+ if (isset($_POST["GOTMLS_user_can"]) && in_array($_POST["GOTMLS_user_can"], $capabilities))
61
+ $GOTMLS_settings_array["user_can"] = $_POST["GOTMLS_user_can"];
62
  update_option('GOTMLS_settings_array', $GOTMLS_settings_array);
63
  }
64
  $GOTMLS_Full_plugin_logo_URL = GOTMLS_images_path.'GOTMLS-16x16.gif';
65
  $base_page = "GOTMLS-settings";
66
  $base_function = "GOTMLS_settings";
 
67
  $pluginTitle = "Anti-Malware";
68
  $pageTitle = "$pluginTitle ".GOTMLS_Scan_Settings_LANGUAGE;
69
+ if (!function_exists("add_object_page") || $GOTMLS_settings_array["menu_group"])
70
+ $my_admin_page = add_menu_page($pageTitle, $pluginTitle, $GOTMLS_settings_array["user_can"], $base_page, $base_function, $GOTMLS_Full_plugin_logo_URL);
71
+ else
72
+ $my_admin_page = add_object_page($pageTitle, $pluginTitle, $GOTMLS_settings_array["user_can"], $base_page, $base_function, $GOTMLS_Full_plugin_logo_URL);
73
+ add_action('load-'.$my_admin_page, 'GOTMLS_admin_add_help_tab');
74
+ add_submenu_page($base_page, "$pluginTitle ".GOTMLS_Scan_Settings_LANGUAGE, GOTMLS_Scan_Settings_LANGUAGE, $GOTMLS_settings_array["user_can"], $base_page, $base_function);
75
+ add_submenu_page($base_page, "$pluginTitle ".GOTMLS_Run_Quick_Scan_LANGUAGE, GOTMLS_Run_Quick_Scan_LANGUAGE, $GOTMLS_settings_array["user_can"], "$base_page&scan_type=Quick+Scan", $base_function);
76
+ add_submenu_page($base_page, "$pluginTitle ".GOTMLS_View_Quarantine_LANGUAGE, GOTMLS_View_Quarantine_LANGUAGE, $GOTMLS_settings_array["user_can"], "GOTMLS-View-Quarantine", "GOTMLS_View_Quarantine");
77
+ }
78
+
79
+ function GOTMLS_admin_add_help_tab() {
80
+ global $GOTMLS_settings_array;
81
+ $GOTMLS_menu_groups = array(__("Main Menu Item placed below <b>Comments</b> and above <b>Appearance</b>",'gotmls'),__("Main Menu Item placed below <b>Settings</b>",'gotmls'));
82
+ if (is_multisite() && current_user_can("manage_network"))
83
+ $GOTMLS_menu_groups[] = __("ONLY SHOW for <b>Network Admins</b>",'gotmls');
84
+ $menu_opts = '<h5>'.__("Menu Item Placement Options",'gotmls').'</h5>';
85
+ foreach ($GOTMLS_menu_groups as $mg => $GOTMLS_menu_group)
86
+ $menu_opts .= '<div style="padding: 4px;" id="menu_group_div_'.$mg.'"><input type="radio" name="GOTMLS_menu_group" value="'.$mg.'"'.($GOTMLS_settings_array["menu_group"]==$mg?' checked':'').' onchange="document.GOTMLS_menu_Form.submit();" />'.$GOTMLS_menu_group.'</div>';
87
+ $screen = get_current_screen();
88
+ $screen->add_help_tab(array(
89
+ 'id' => "GOTMLS_Getting_Started",
90
+ 'title' => __("Getting Started", 'gotmls'),
91
+ 'content' => '<p>'.__("Make sure the Definition Updates are current and Run a Complete Scan.").'</p><p>'.sprintf(__("If Known Threats are found and displayed in red then there will be a button to '%s'. If only Potentional Threats are found then there is no automatic fix because those are probably not malicious."), GOTMLS_Automatically_Fix_LANGUAGE).'</p>'
92
+ ));
93
+ $screen->add_help_tab(array(
94
+ 'id' => "GOTMLS_The_Quarantine",
95
+ 'title' => __("The Quarantine", 'gotmls'),
96
+ 'content' => '<p>'.__("A backup of the original infected files are placed in the Quarantine in case you need to restore them or just want to look at them later. You can delete these files if you don't want to save more.").'</p>'
97
+ ));
98
+ $screen->add_help_tab(array(
99
+ 'id' => 'GOTMLS_Menu_Placement',
100
+ 'title' => __("Menu Placement", 'gotmls'),
101
+ 'content' => '<form method="POST" name="GOTMLS_menu_Form">'.$menu_opts.'</form>'
102
+ ));
103
  }
104
 
105
+ function GOTMLS_display_header($optional_box = "") {
106
+ global $GOTMLS_onLoad, $GOTMLS_loop_execution_time, $GOTMLS_update_home, $GOTMLS_plugin_home, $GOTMLS_definitions_versions, $wp_version, $current_user, $GOTMLS_settings_array;
107
  get_currentuserinfo();
108
  $GOTMLS_url_parts = explode('/', GOTMLS_siteurl);
109
  if (isset($_GET["check_site"]) && $_GET["check_site"] == 1)
110
+ echo '<br /><br /><div class="updated" id="check_site" style="z-index: 1234567; position: absolute; top: 1px; left: 1px; margin: 15px;"><img src="'.GOTMLS_images_path.'checked.gif" height=16 width=16 alt="&#x2714;"> '.GOTMLS_Tested_your_site_LANGUAGE.' ;-)</div><script type="text/javascript">window.parent.document.getElementById("check_site_warning").style.backgroundColor=\'#0C0\';</script><iframe style="width: 230px; height: 110px; position: absolute; right: 4px; bottom: 4px; border: none;" scrolling="no" src="https://wordpress.org/plugins/gotmls/stats/?compatibility%5Bversion%5D='.$wp_version.'&compatibility%5Btopic_version%5D='.GOTMLS_Version.'&compatibility%5Bcompatible%5D=1#compatibility-works"></iframe><a target="_blank" href="https://wordpress.org/plugins/gotmls/stats/?compatibility%5Bversion%5D='.$wp_version.'&compatibility%5Btopic_version%5D='.GOTMLS_Version.'&compatibility%5Bcompatible%5D=1#compatibility-works"><span style="width: 234px; height: 82px; position: absolute; right: 4px; bottom: 36px;"></span><span style="width: 345px; height: 32px; position: absolute; right: 84px; bottom: 4px;">Vote "Works" on WordPress.org -&gt;</span></a><style>#footer, #GOTMLS-metabox-container, #GOTMLS-right-sidebar, #admin-page-container, #wpadminbar, #adminmenuback, #adminmenuwrap, #adminmenu {display: none !important;} #wpbody-content {padding-bottom: 0;} #wpcontent, #footer {margin-left: 5px !important;}';
111
  else
112
+ echo '<style>#GOTMLS-right-sidebar {float: right; margin-right: 0px;}';
113
  $ver_info = GOTMLS_Version.'&p='.strtoupper(GOTMLS_plugin_dir).'&wp='.$wp_version.'&ts='.date("YmdHis").'&key='.GOTMLS_installation_key.'&d='.ur1encode(GOTMLS_siteurl);
114
  $Update_Link = '<div style="text-align: center;"><a href="';
115
  $new_version = "";
127
  .rounded-corners {margin: 10px; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border: 1px solid #000;}
128
  .shadowed-box {box-shadow: -3px 3px 3px #666; -moz-box-shadow: -3px 3px 3px #666; -webkit-box-shadow: -3px 3px 3px #666;}
129
  .sidebar-box {background-color: #CCC;}
130
+ .GOTMLS-sidebar-links {list-style: none;}
131
+ .GOTMLS-sidebar-links li img {margin: 3px; height: 16px; vertical-align: middle;}
132
+ .GOTMLS-sidebar-links li {margin-bottom: 0 !important}
133
  .popup-box {background-color: #FFC; display: none; position: absolute; left: 0px; z-index: 10;}
134
  .shadowed-text {text-shadow: #00F -1px 1px 1px;}
135
  .sub-option {float: left; margin: 3px 5px;}
142
  .GOTMLS h2 {margin: 0 0 10px;}
143
  .postbox {margin-right: 10px;}
144
  #pastDonations li {list-style: none;}
 
145
  #main-page-title {
146
+ background: url("'.$GLOBALS["GOTMLS"]["tmp"]["protocol"].'//gravatar.com/avatar/5feb789dd3a292d563fea3b885f786d6?s=64") no-repeat scroll 0 0 transparent;
147
+ height: 64px;
148
+ line-height: 58px;
149
  margin: 10px 0 0;
150
  padding: 0 0 0 84px;}
151
  </style>
164
  }
165
  }
166
  }
167
+ function checkAllFiles(check) {
168
+ var checkboxes = new Array();
169
+ checkboxes = document["GOTMLS_Form_clean"].getElementsByTagName("input");
170
+ for (var i=0; i<checkboxes.length; i++)
171
+ if (checkboxes[i].type == "checkbox")
172
+ checkboxes[i].checked = check;
173
+ }
174
+ function setvalAllFiles(val) {
175
+ var checkboxes = document.getElementById("GOTMLS_fixing");
176
+ if (checkboxes)
177
+ checkboxes.value = val;
178
+ }
179
  function loadIframe(title) {
180
  showhide("GOTMLS_iFrame", true);
181
  showhide("GOTMLS_iFrame");
182
  document.getElementById("windowTitle").innerHTML = title;
183
+ windowW = 0;
184
+ windowH = 0;
185
+ if (typeof window.innerWidth != "undefined") {
186
+ // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
187
+ windowW = window.innerWidth;
188
+ windowH = window.innerHeight;
189
+ } else if (typeof document.documentElement != "undefined" && typeof document.documentElement.clientWidth != "undefined" && document.documentElement.clientWidth != 0) {
190
+ // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
191
+ windowW = document.documentElement.clientWidth;
192
+ windowH = document.documentElement.clientHeight;
193
+ } else {
194
+ // older versions of IE
195
+ windowW = document.getElementsByTagName("body")[0].clientWidth;
196
+ windowH = document.getElementsByTagName("body")[0].clientHeight;
197
+ }
198
+ if (windowW > 200)
199
+ windowW -= 20;
200
+ else
201
+ windowW = 200;
202
+ if (windowH > 200)
203
+ windowH -= 20;
204
+ else
205
+ windowH = 200;
206
+ if (px2num("'.$GOTMLS_settings_array["msg_position"][3].'") > windowW) {
207
+ curDiv.style.width = windowW + "px";
208
+ curDiv.style.left = "0px";
209
+ } else if ((px2num("'.$GOTMLS_settings_array["msg_position"][0].'") + px2num("'.$GOTMLS_settings_array["msg_position"][3].'")) > windowW) {
210
+ curDiv.style.left = (windowW - px2num("'.$GOTMLS_settings_array["msg_position"][3].'")) + "px";
211
+ }
212
+ if (px2num("'.$GOTMLS_settings_array["msg_position"][2].'") > windowH) {
213
+ curDiv.style.height = windowH + "px";
214
+ curDiv.style.top = "0px";
215
+ } else if ((px2num("'.$GOTMLS_settings_array["msg_position"][1].'") + px2num("'.$GOTMLS_settings_array["msg_position"][2].'")) > windowH) {
216
+ curDiv.style.top = (windowH - px2num("'.$GOTMLS_settings_array["msg_position"][2].'")) + "px";
217
+ }
218
  showhide("div_file", true);
219
  }
220
  function cancelserver(divid) {
306
  }
307
  setDiv("div_file");
308
  </script>
309
+ <h1 id="main-page-title">Anti-Malware by <img style="vertical-align: middle;" alt="ELI" src="'.$GLOBALS["GOTMLS"]["tmp"]["protocol"].'//gravatar.com/avatar/69ad8428e97469d0dcd64f1f60c07bd8?s=64" /> at GOTMLS.NET</h1>
310
+ <div id="GOTMLS-right-sidebar" style="width: 300px;" class="metabox-holder">
311
+ '.GOTMLS_box(GOTMLS_Plugin_Updates_LANGUAGE.' '.$wp_version, '<div id="findUpdates"><center>'.GOTMLS_Searching_updates_LANGUAGE.'<br /><img src="'.GOTMLS_images_path.'wait.gif" height=16 width=16 alt="Wait..." /><br /><input type="button" value="Cancel" onclick="cancelserver(\'findUpdates\');" /></center></div>'.$Update_Link, "stuffbox").'
312
+ '.GOTMLS_box(GOTMLS_Definition_Updates_LANGUAGE.' ('.$definition_version.')', '
313
+ <form id="updateform" method="post" name="updateform" action="'.GOTMLS_script_URI.'">
314
+ <img style="display: none; float: right; margin-right: 14px;" src="'.GOTMLS_images_path.'checked.gif" height=16 width=16 alt="definitions file updated" id="autoUpdateDownload" onclick="downloadUpdates(\'UpdateDownload\');">
315
+ <div id="Definition_Updates"><center>'.__("Searching for updates ...",'gotmls').'<br /><img src="'.GOTMLS_images_path.'wait.gif" height=16 width=16 alt="Wait..." /><br /><input type="button" value="Cancel" onclick="cancelserver(\'Definition_Updates\');" /></center></div>
316
+ <div id="autoUpdateForm" style="display: none;">
317
+ <input type="submit" name="auto_update" value="'.__("Download new definitions!",'gotmls').'">
318
+ </div>
319
+ </form>
320
+ <div id="registerKeyForm" style="display: none;">
321
+ '.__("If you have not already registered your Key then register now and get instant access to definition updates.<p>*All fields are required and I will NOT share your registration information with anyone.</p>",'gotmls').'
322
+ <form id="registerform" onsubmit="return sinupFormValidate(this);" action="'.$GOTMLS_update_home.'wp-login.php?action=register" method="post" name="registerform" target="GOTMLS_iFrame"><input type="hidden" name="redirect_to" id="register_redirect_to" value="/donate/"><input type="hidden" name="user_login" id="register_user_login" value="">
323
+ <div>'.__("Your Full Name:",'gotmls').'</div>
324
+ <div style="float: left; width: 50%;"><input style="width: 100%;" id="first_name" type="text" name="first_name" value="'.$current_user->user_firstname.'" /></div>
325
+ <div style="float: left; width: 50%;"><input style="width: 100%;" id="last_name" type="text" name="last_name" value="'.$current_user->user_lastname.'" /></div>
326
+ <div style="clear: left; width: 100%;">
327
+ <div>'.__("A password will be e-mailed to this address:",'gotmls').'</div>
328
+ <input style="width: 100%;" id="user_email" type="text" name="user_email" value="'.$current_user->user_email.'" /></div>
329
+ <div>
330
+ <div>'.__("Your WordPress Site URL:",'gotmls').'</div>
331
+ <input style="width: 100%;" id="user_url" type="text" name="user_url" value="'.GOTMLS_siteurl.'" readonly /></div>
332
+ <div>
333
+ <div>'.__("Plugin Installation Key:",'gotmls').'</div>
334
+ <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>
335
+ <input style="width: 100%;" id="wp-submit" type="submit" name="wp-submit" value="Register Now!" /></form></div>', "stuffbox").'
336
  <script type="text/javascript">
337
  stopCheckingUpdates = checkupdateserver("'.$GOTMLS_plugin_home.GOTMLS_update_images_path.'?js='.$ver_info.'", "findUpdates", "'.str_replace("://", "://www.", $GOTMLS_plugin_home).GOTMLS_update_images_path.'?js='.$ver_info.'");
 
 
 
338
  function check_for_updates(chk) {
339
  if (auto_img = document.getElementById("autoUpdateDownload")) {
340
  auto_img.style.display="";
382
  if (foundUpdates)
383
  foundUpdates.style.display = "";
384
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
385
  var divNAtext = false;
386
  function loadGOTMLS() {
387
  clearTimeout(divNAtext);
401
  else
402
  divNAtext=true;
403
  </script>
404
+ '.GOTMLS_box(__("Links & External Resources",'gotmls'), '
 
405
  <div id="pastDonations"></div>
406
  <form name="ppdform" id="ppdform" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
407
  <input type="hidden" name="cmd" value="_donations">
426
  <input type="hidden" name="cancel_return" value="'.$GOTMLS_update_home.GOTMLS_installation_key.'/donate/?donation-source=cancel">
427
  <input type="image" id="pp_button" src="'.GOTMLS_images_path.'btn_donateCC_WIDE.gif" border="0" name="submitc" alt="'.__("Make a Donation with PayPal",'gotmls').'">
428
  <div>
429
+ <ul class="GOTMLS-sidebar-links">
430
+ <li style="float: right;"><b>on <a target="_blank" href="https://profiles.wordpress.org/scheeeli#content-plugins">WordPress.org</a></b><ul class="GOTMLS-sidebar-links">
431
+ <li><a target="_blank" href="https://wordpress.org/plugins/'.GOTMLS_plugin_dir.'/faq/">Plugin FAQs</a></li>
432
+ <li><a target="_blank" href="https://wordpress.org/support/plugin/'.GOTMLS_plugin_dir.'">Forum Posts</a></li>
433
+ <li><a target="_blank" href="https://wordpress.org/support/view/plugin-reviews/'.GOTMLS_plugin_dir.'">Plugin Reviews</a></li>
434
  </ul></li>
435
  <li><img src="'.$GOTMLS_update_home.'/favicon.ico" border="0" alt="Plugin site:"><b><a target="_blank" href="'.$GOTMLS_update_home.'">GOTMLS.NET</a></b></li>
436
  <li><img src="'.$GOTMLS_plugin_home.'/favicon.ico" border="0" alt="Developer site:"><b><a target="_blank" href="'.$GOTMLS_plugin_home.'/category/my-plugins/anti-malware/">Eli\'s Blog</a></b></li>
437
+ <li><img src="https://ssl.gstatic.com/ui/v1/icons/mail/favicon.ico" border="0" alt="mail:"><b><a target="_blank" href="mailto:eli@gotmls.net">Email Eli</a></b></li>
438
+ <li><iframe allowtransparency="true" frameborder="0" scrolling="no" src="https://platform.twitter.com/widgets/follow_button.html?screen_name=GOTMLS&amp;show_count=false" style="width:125px; height:20px;"></iframe></li>
439
  </ul>
440
  </div>
441
  </form>
442
+ <a target="_blank" href="http://safebrowsing.clients.google.com/safebrowsing/diagnostic?site='.urlencode(GOTMLS_siteurl).'">Google Safe Browsing Diagnostic</a>', "stuffbox").'
443
+ '.GOTMLS_box(GOTMLS_Last_Scan_Status_LANGUAGE, GOTMLS_scan_log(), "stuffbox").'
 
444
  '.$optional_box.'
445
+ </div>';
446
+ if (isset($GLOBALS["GOTMLS"]["tmp"]["stuffbox"]) && is_array($GLOBALS["GOTMLS"]["tmp"]["stuffbox"])) {
447
+ echo '
448
+ <script type="text/javascript">
449
+ function stuffbox_showhide(id) {
450
+ divx = document.getElementById(id);
451
+ if (divx) {
452
+ if (divx.style.display == "none" || arguments[1]) {';
453
+ $else = '
454
+ if (divx = document.getElementById("GOTMLS-right-sidebar"))
455
+ divx.style.width = "30px";
456
+ if (divx = document.getElementById("GOTMLS-main-section"))
457
+ divx.style.marginRight = "30px";';
458
+ foreach ($GLOBALS["GOTMLS"]["tmp"]["stuffbox"] as $md5 => $bTitle) {
459
+ echo "\nif (divx = document.getElementById('inside_$md5'))\n\tdivx.style.display = 'block';\nif (divx = document.getElementById('title_$md5'))\n\tdivx.innerHTML = '".GOTMLS_strip4java($bTitle)."';";
460
+ $else .= "\nif (divx = document.getElementById('inside_$md5'))\n\tdivx.style.display = 'none';\nif (divx = document.getElementById('title_$md5'))\n\tdivx.innerHTML = '".substr($bTitle, 0, 1)."';";
461
+ }
462
+ echo '
463
+ if (divx = document.getElementById("GOTMLS-right-sidebar"))
464
+ divx.style.width = "300px";
465
+ if (divx = document.getElementById("GOTMLS-main-section"))
466
+ divx.style.marginRight = "300px";
467
+ return true;
468
+ } else {'.$else.'
469
+ return false;
470
+ }
471
+ }
472
+ }
473
+ </script>';
474
+ }
475
+ echo '
476
  <div id="admin-page-container">
477
+ <div id="GOTMLS-main-section" style="margin-right: 300px;">
478
+ <div class="metabox-holder GOTMLS" style="width: 100%;" id="GOTMLS-metabox-container">';
479
+ }
480
+
481
+ function GOTMLS_box($bTitle, $bContents, $bType = "postbox") {
482
+ $md5 = md5($bTitle);
483
+ if (isset($GLOBALS["GOTMLS"]["tmp"]["$bType"]) && is_array($GLOBALS["GOTMLS"]["tmp"]["$bType"]))
484
+ $GLOBALS["GOTMLS"]["tmp"]["$bType"]["$md5"] = "$bTitle";
485
+ else
486
+ $GLOBALS["GOTMLS"]["tmp"]["$bType"] = array("$md5"=>"$bTitle");
487
+ return '
488
+ <div id="box_'.$md5.'" class="'.$bType.'"><h3 title="Click to toggle" onclick="if (typeof '.$bType.'_showhide == \'function\'){'.$bType.'_showhide(\'inside_'.$md5.'\');}else{showhide(\'inside_'.$md5.'\');}" style="cursor: pointer;" class="hndle"><span id="title_'.$md5.'">'.$bTitle.'</span></h3>
489
+ <div id="inside_'.$md5.'" class="inside">
490
+ '.$bContents.'
491
+ </div>
492
+ </div>';
493
+ }
494
+
495
+ function GOTMLS_View_Quarantine() {
496
+ $entries = GOTMLS_getfiles($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]);
497
+ GOTMLS_display_header();
498
+ $Q_Page = '
499
+ <form method="POST" target="GOTMLS_iFrame" name="GOTMLS_Form_clean"><input type="hidden" id="GOTMLS_fixing" name="GOTMLS_fixing" value="1">
500
+ <ul name="found_Quarantine" id="found_Quarantine" class="GOTMLS_plugin known" style="background-color: #ccc; padding: 0;"><h3>';
501
+ if (is_array($entries) && ($key = array_search(".htaccess", $entries)))
502
+ unset($entries[$key]);
503
+ if (is_array($entries) && ($key = array_search("index.php", $entries)))
504
+ unset($entries[$key]);
505
+ if (is_array($entries) && count($entries)) {
506
+ $Q_Page .= (count($entries)?'<input type="checkbox" onchange="checkAllFiles(this.checked); document.getElementById(\'fix_button\').style.display = \'block\';"> Check all ':'').count($entries).' Item'.(count($entries)==1?'':'s').' in Quarantine<span style="float: right;">Date Quarantined</span></h3><p id="fix_button" style="display: none; float: right;"><input id="repair_button" type="submit" value="'.__("Restore SELECTED files from Quarantine",'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;" /><br /><input id="delete_button" type="submit" class="button-primary" value="'.__("Delete SELECTED files from Quarantine",'gotmls').'" style="background-color: #C33; color: #FFF; background-image: linear-gradient(to bottom, #C22, #933); border-color: #933 #933 #900; box-shadow: 0 1px 0 rgba(230, 120, 120, 0.5) inset; text-decoration: none; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); margin-top: 10px;" 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.</b></p> FYI - these files are found in:",'gotmls').' '.$GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"];
507
+ sort($entries);
508
+ foreach ($entries as $entry) {
509
+ $file = GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]).$entry;
510
+ $date = date("y-m-d-H-i",filemtime($file));
511
+ $Q_Page .= '<li><img src="'.GOTMLS_images_path.'/blocked.gif" height=16 width=16 alt="Q" style="float: left;">';
512
+ if (is_file($file) && GOTMLS_get_ext($entry) == "gotmls") {
513
+ $file_date = explode(".", $entry);
514
+ if (count($file_date) > 2 && strlen($file_date[0]) == 5)
515
+ $date = GOTMLS_sexagesimal($file_date[0]);
516
+ elseif (@rename($file, GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]).GOTMLS_sexagesimal($date).".$entry"))
517
+ $file = GOTMLS_trailingslashit($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]).GOTMLS_sexagesimal($date).".$entry";
518
+ $Q_Page .= '<input type="checkbox" name="GOTMLS_fix[]" value="'.GOTMLS_encode($file).'" id="check_'.GOTMLS_encode($file).'" onchange="document.getElementById(\'fix_button\').style.display = \'block\';" />'.GOTMLS_error_link("View Quarantined File", $file).str_replace($root_path, "", GOTMLS_decode($file_date[count($file_date)-2]));
519
+ } else
520
+ $Q_Page .= '<li><img src="'.GOTMLS_images_path.'/blocked.gif" height=16 width=16 alt="?" style="float: left;">'.GOTMLS_error_link("Foreign File in Quarantine", $file).$file;
521
+ $date = explode("-", $date);
522
+ $Q_Page .= "</a> <span style='float: right; margin-right: 8px;'>(20$date[0]-$date[1]-$date[2] at $date[3]:$date[4])</span></li>";
523
+ }
524
+ } else
525
+ $Q_Page .= __("No Items in Quarantine",'gotmls').'</h3>';
526
+ echo GOTMLS_box("Quarantine", "$Q_Page</ul>\n</form>\n")."\n</div></div></div>";
527
  }
528
 
529
  function GOTMLS_settings() {
530
+ global $current_user, $wp_version, $GOTMLS_definitions_array, $GOTMLS_threat_levels, $GOTMLS_scanfiles, $GOTMLS_loop_execution_time, $GOTMLS_skip_ext, $GOTMLS_skip_dirs, $GOTMLS_settings_array, $GOTMLS_dirs_at_depth, $GOTMLS_dir_at_depth;
 
 
 
531
  $GOTMLS_scan_groups = array();
532
  $dirs = GOTMLS_explode_dir(__file__);
533
  $scan_level = intval($GOTMLS_settings_array["scan_level"]);
574
  $GOTMLS_settings_array['check_potential'] = $_POST['check_potential'];
575
  GOTMLS_update_scan_log(array("settings" => $GOTMLS_settings_array));
576
  $scan_opts = '';
577
+ $scan_optjs = "\n<script type=\"text/javascript\">\nfunction showOnly(what) {\n";
578
  foreach ($GOTMLS_scan_groups as $mg => $GOTMLS_scan_group) {
579
  $scan_optjs .= "document.getElementById('only$mg').style.display = 'none';\n";
580
+ $scan_opts .= '
581
+ <div style="position: relative; float: right; padding: 2px 0px 4px 30px;" id="scan_group_div_'.$mg.'"><input type="radio" name="scan_what" id="not-only'.$mg.'" value="'.$mg.'"'.($GOTMLS_settings_array["scan_what"]==$mg?' checked':'').' /><a style="text-decoration: none;" href="#scan_what" onclick="showOnly(\''.$mg.'\');document.getElementById(\'not-only'.$mg.'\').checked=true;">'.$GOTMLS_scan_group.'</a><br />
582
+ <div class="rounded-corners" style="position: absolute; display: none; background-color: #CCF; padding: 10px; z-index: 10;" id="only'.$mg.'"><div style="position: relative; padding: 0 40px 0 0;"><a class="rounded-corners" style="position: absolute; right: 0; margin: 0; padding: 0 4px; text-decoration: none; color: #C00; background-color: #FCC; border: solid #F00 1px;" href="#scan_what" onclick="showhide(\'only'.$mg.'\');">X</a><b>'.str_replace(" ", "&nbsp;", __("Only Scan These Folders:",'gotmls')).'</b></div>';
583
  $dir = implode(GOTMLS_slash(), array_slice($dirs, 0, -1 * (2 + $mg)));
584
  $files = GOTMLS_getfiles($dir);
585
  if (is_array($files))
586
  foreach ($files as $file)
587
  if (is_dir(GOTMLS_trailingslashit($dir).$file))
588
+ $scan_opts .= '
589
+ <br /><input type="checkbox" name="scan_only[]" value="'.$file.'" />'.$file;
590
+ $scan_opts .= '
591
+ </div>
592
+ </div>';
593
  }
594
  $scan_optjs .= "document.getElementById('only'+what).style.display = 'block';\n}\n</script>";
595
+ $scan_opts = '
596
+ <form method="POST" name="GOTMLS_Form" action="'.str_replace('&mt=', '&last_mt=', str_replace('&scan_type=', '&last_type=', GOTMLS_script_URI)).'"><input type="hidden" name="scan_type" id="scan_type" value="Complete Scan" />
597
+ <div style="float: left;"><b>'.__("What to scan:",'gotmls').'</b></div>
598
+ <div style="float: left;">'.$scan_opts.$scan_optjs.'</div>
599
+ <div style="float: left;" id="scanwhatfolder"></div><br style="clear: left;" />
600
+ <p><b>'.__("Scan Depth:",'gotmls').'</b> ('.__("how far do you want to drill down from your starting directory?",'gotmls').')</p>
601
+ <div style="padding: 0 30px;"><input type="text" value="'.$GOTMLS_settings_array["scan_depth"].'" name="scan_depth"> ('.__("-1 is infinite depth",'gotmls').')</div><p><b>'.__("What to look for:",'gotmls').'</b></p>
602
+ <div style="padding: 0 30px;">';
603
  foreach ($GOTMLS_threat_levels as $threat_level_name=>$threat_level) {
604
+ $scan_opts .= '
605
+ <div style="padding: 0; position: relative;" id="check_'.$threat_level.'_div">';
606
  if (isset($GOTMLS_definitions_array[$threat_level]))
607
+ $scan_opts .= '
608
+ <input type="checkbox" name="check[]" id="check_'.$threat_level.'_Yes" value="'.$threat_level.'"'.(in_array($threat_level,$GLOBALS["GOTMLS"]["log"]["settings"]["check"])?' checked':'').' /> <a style="text-decoration: none;" href="#check_'.$threat_level.'_div_0" onclick="document.getElementById(\'check_'.$threat_level.'_Yes\').checked=true;showhide(\'dont_check_'.$threat_level.'\');">';
609
  else
610
+ $scan_opts .= '
611
+ <a title="'.__("Download Definition Updates to Use this feature",'gotmls').'"><img src="'.GOTMLS_images_path.'blocked.gif" height=16 width=16 alt="X">';
612
  $scan_opts .= (isset($_GET['eli']) && isset($_SESSION['GOTMLS_'.$_GET['eli']][$threat_level])?print_r($_SESSION['GOTMLS_'.$_GET['eli']][$threat_level],1):"")."<b>$threat_level_name</b></a>";
613
  if (!isset($GOTMLS_definitions_array[$threat_level]))
614
+ $scan_opts .= '<br />
615
+ <div style="padding: 14px;" id="check_'.$threat_level.'_div_NA">'.__("Registration of your Installation Key is required for this feature",'gotmls').'</div>';
616
  elseif (isset($_GET['eli'])) {
617
+ $scan_opts .= '
618
+ <div style="padding: 0 20px; position: relative; top: -18px; display: none;" id="dont_check_'.$threat_level.'"><a class="rounded-corners" style="position: absolute; left: 0; margin: 0; padding: 0 4px; text-decoration: none; color: #C00; background-color: #FCC; border: solid #F00 1px;" href="#check_'.$threat_level.'_div_0" onclick="showhide(\'dont_check_'.$threat_level.'\');">X</a>';
619
  foreach ($GOTMLS_definitions_array[$threat_level] as $threat_name => $threat_regex)
620
+ $scan_opts .= '<br />
621
+ <input type="checkbox" name="dont_check[]" value="'.htmlspecialchars($threat_name).'"'.(in_array($threat_name, $GOTMLS_settings_array["dont_check"])?' checked /><script>showhide("dont_check_'.$threat_level.'", true);</script>':' />').(isset($_GET['eli']) && isset($_SESSION['GOTMLS_'.$_GET['eli']][$threat_name])?print_r($_SESSION['GOTMLS_'.$_GET['eli']][$threat_name],1):"").$threat_name;
622
+ $scan_opts .= '
623
+ </div>';
624
  }
625
+ $scan_opts .= '
626
+ </div>';
627
  }
628
+ if (isset($_GET['eli'])) { if (isset($_SESSION['GOTMLS_'.$_GET['eli']]['total'])) {$scan_opts .=print_r($_SESSION['GOTMLS_'.$_GET['eli']]['total'],1); unset($_SESSION['GOTMLS_'.$_GET['eli']]);} $scan_opts .= '
629
+ <div style="padding: 10px;"><b>'.__("Custom RegExp:",'gotmls').'</b> ('.__("For very advanced users only. Do not use this without talking to Eli first. If used incorrectly you could easily break your site.",'gotmls').')<br /><input type="text" name="check_custom" style="width: 100%;" value="'.htmlspecialchars($GOTMLS_settings_array["check_custom"]).'" /></div>';}//still testing this option
630
+ $scan_opts .= '
631
+ </div>
632
+ <p>'.__("<b>Skip files with the following extentions:</b> (a comma separated list of file extentions to be excluded from the scan)",'gotmls').'</p>
633
+ <div style="padding: 0 30px;"><input type="text" name="exclude_ext" value="'.implode(",", $GOTMLS_settings_array["exclude_ext"]).'" style="width: 100%;" /></div>
634
+ <p>'.__("<b>Skip directories with the following names:</b> (a comma separated list of folders to be excluded from the scan)",'gotmls').'</p>
635
+ <div style="padding: 0 30px;"><input type="text" name="exclude_dir" value="'.implode(",", $GOTMLS_settings_array["exclude_dir"]).'" style="width: 100%;" /></div>
636
+ <p style="text-align: right;"><input type="submit" id="complete_scan" value="'.GOTMLS_Run_Complete_Scan_LANGUAGE.'" class="button-primary" /></p>
637
+ </form>';
638
  @ob_start();
639
  $OB_default_handlers = array("default output handler", "zlib output compression");
640
  foreach (ob_list_handlers() as $OB_last_handler)
641
  if (!in_array($OB_last_handler, $OB_default_handlers))
642
  echo '<div class="error">'.sprintf(__("Another Plugin or Theme is using '%s' to handle output buffers. <br />This prevents actively outputing the buffer on-the-fly and will severely degrade the performance of this (and many other) Plugins. <br />Consider disabling caching and compression plugins (at least during the scanning process).",'gotmls'), $OB_last_handler).'</div>';
643
+ GOTMLS_display_header();
644
  $scan_groups = array_merge(array(__("Scanned Files",'gotmls')=>"scanned",__("Selected Folders",'gotmls')=>"dirs",__("Scanned Folders",'gotmls')=>"dir",__("Skipped Folders",'gotmls')=>"skipdirs",__("Skipped Files",'gotmls')=>"skipped",__("Read/Write Errors",'gotmls')=>"errors",__("Quarantined Files",'gotmls')=>"bad"), $GOTMLS_threat_levels);
645
  echo '<script type="text/javascript">
646
  var percent = 0;
722
  foreach ($scan_groups as $scan_name => $scan_group) {
723
  $vars .= ", $scan_group=0";
724
  if ($MAX++ == 6) {
725
+ echo "/*-->*"."/\n\tif ($scan_group > 0)\n\t\tscan_state = ' potential'; \n\telse\n\t\tscan_state = '';\n\tdivHTML += '</ul><ul style=\"text-align: left;\"><li class=\"GOTMLS_li\"><a href=\"admin.php?page=GOTMLS-View-Quarantine\" title=\"".GOTMLS_View_Quarantine_LANGUAGE."\" class=\"GOTMLS_plugin'+scan_state+'\">'+$scan_group+'&nbsp;'+($scan_group==1?('$scan_name').slice(0,-1):'$scan_name')+'</a></li>';\n/*<!--*"."/";
726
  $found = "Found ";
727
  $fix_button_js = "\n\t\tdis='block';";
728
  } else {
729
+ if ($found && !in_array($scan_group, $GLOBALS["GOTMLS"]["log"]["settings"]["check"]))
730
  $potential_threat = ' potential" title="'.__("You are not currently scanning for this type of threat!",'gotmls');
731
  else
732
  $potential_threat = "";
733
+ echo "/*-->*"."/\n\tif ($scan_group > 0) {\n\t\tscan_state = ' href=\"#found_$scan_group\" onclick=\"$li_js showhide(\\'found_$scan_group\\', true);\" class=\"GOTMLS_plugin $scan_group\"';$fix_button_js".($MAX>6?"\n\tshowhide('found_$scan_group', true);":"")."\n\t} else\n\t\tscan_state = ' class=\"GOTMLS_plugin$potential_threat\"';\n\tdivHTML += '<li class=\"GOTMLS_li\"><a'+scan_state+'>$found'+$scan_group+'&nbsp;'+($scan_group==1?('$scan_name').slice(0,-1):'$scan_name')+'</a></li>';\n/*<!--*"."/";
734
  }
735
  $li_js = "";
736
  if ($MAX > 11)
745
  document.getElementById("only_what").innerHTML = document.getElementById("only"+what).innerHTML;
746
  }
747
  var startTime = 0;
748
+ </script>'.GOTMLS_box(GOTMLS_Scan_Settings_LANGUAGE, $scan_opts);
749
+ if (isset($_REQUEST["scan_what"]) && is_numeric($_REQUEST["scan_what"]) && ($_REQUEST["scan_what"] > -1)) {
 
 
 
 
750
  if (!isset($_REQUEST["scan_type"]))
751
  $_REQUEST["scan_type"] = "Complete Scan";
752
  update_option('GOTMLS_settings_array', $GOTMLS_settings_array);
753
+ foreach ($_POST as $name => $value) {
754
+ if (substr($name, 0, 10) != 'GOTMLS_fix') {
755
+ if (is_array($value)) {
756
+ foreach ($value as $val)
757
+ echo '<input type="hidden" name="'.$name.'[]" value="'.htmlspecialchars($val).'">';
758
+ } else
759
+ echo '<input type="hidden" name="'.$name.'" value="'.htmlspecialchars($value).'">';
 
 
 
 
 
 
760
  }
 
 
761
  }
762
+ echo '
763
+ <form method="POST" target="GOTMLS_iFrame" name="GOTMLS_Form_clean"><input type="hidden" id="GOTMLS_fixing" name="GOTMLS_fixing" value="1">
764
+ <script type="text/javascript">
765
+ showhide("inside_'.md5(GOTMLS_Scan_Settings_LANGUAGE).'");
766
+ </script>'.GOTMLS_box($_REQUEST["scan_type"].' Status', '<div id="status_text"><img src="'.GOTMLS_images_path.'wait.gif" height=16 width=16 alt="..."> '.GOTMLS_Loading_LANGUAGE.'</div><div id="status_bar"></div><p id="pause_button" style="display: none; position: absolute; left: 0; text-align: center; margin-left: -30px; padding-left: 50%;"><input type="button" value="Pause" class="button-primary" onclick="pauseresume(this);" id="resume_button" /></p><div id="status_counts"></div><p id="fix_button" style="display: none; text-align: center;"><input id="repair_button" type="submit" value="'.GOTMLS_Automatically_Fix_LANGUAGE.'" class="button-primary" onclick="loadIframe(\'Examine Results\');" /></p>');
767
+ $scan_groups_UL = "";
768
+ foreach ($scan_groups as $scan_name => $scan_group)
769
+ $scan_groups_UL .= "\n<ul name=\"found_$scan_group\" id=\"found_$scan_group\" class=\"GOTMLS_plugin $scan_group\" style=\"background-color: #ccc; display: none; padding: 0;\"><a class=\"rounded-corners\" name=\"link_$scan_group\" style=\"float: right; padding: 0 4px; margin: 5px 5px 0 30px; line-height: 16px; text-decoration: none; color: #C00; background-color: #FCC; border: solid #F00 1px;\" href=\"#found_top\" onclick=\"showhide('found_$scan_group');\">X</a><h3>$scan_name</h3>\n".($scan_group=='potential'?'<p> &nbsp; * '.__("NOTE: These are probably not malicious scripts (but it's a good place to start looking <u>IF</u> your site is infected and no Known Threats were found).",'gotmls').'</p>':($scan_group=='wp_login'?'<p> &nbsp; * '.__("NOTE: 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. For more information on brute force attack prevention and the WordPress wp-login-php file ",'gotmls').' <a target="_blank" href="http://gotmls.net/tag/wp-login-php/">'.__("read my blog",'gotmls').'</a>.</p>':'<br />')).'</ul>';
770
+ if (!($dir = implode(GOTMLS_slash(), array_slice($dirs, 0, -1 * (2 + $_REQUEST["scan_what"]))))) $dir = "/";
771
+ GOTMLS_update_scan_log(array("scan" => array("dir" => $dir, "start" => time(), "type" => $_REQUEST["scan_type"])));
772
+ echo GOTMLS_box('<div style="float: right;">&nbsp;('.$GLOBALS["GOTMLS"]["log"]["scan"]["dir"].')&nbsp;</div>'.GOTMLS_Scan_Details_LANGUAGE, $scan_groups_UL);
773
+ while (in_array($OB_last_handler, $OB_default_handlers) && @ob_end_flush())
774
+ foreach (ob_list_handlers() as $OB_handler)
775
+ $OB_last_handler = $OB_handler;
776
+ @ob_start();
777
+ if ($_REQUEST["scan_type"] == "Quick Scan")
778
+ $li_js = "\nfunction testComplete() {\n\tif (percent != 100)\n\t\talert('".__("The Quick Scan was unable to finish because of a shortage of memory or a problem accessing a file. Please try using the Complete Scan, it is slower but it will handle these errors better and continue scanning the rest of the files.",'gotmls')."');\n}\nwindow.onload=testComplete;\n</script>\n<script type=\"text/javascript\">";
779
+ echo "\n<script type=\"text/javascript\">$li_js\n/*<!--*"."/";
780
+ if (is_dir($dir)) {
781
+ $GOTMLS_dirs_at_depth[0] = 1;
782
+ $GOTMLS_dir_at_depth[0] = 0;
783
+ if (!(isset($_GET["eli"]) && $_GET["eli"] == "NOQ")) {
784
+ $GOTMLS_dirs_at_depth[0]++;
785
+ GOTMLS_readdir($GLOBALS["GOTMLS"]["tmp"]["quarantine_dir"]);
786
+ }
787
+ if (isset($_POST['scan_only']) && is_array($_POST['scan_only'])) {
788
+ $GOTMLS_dirs_at_depth[0] += (count($_POST['scan_only']) - 1);
789
+ foreach ($_POST['scan_only'] as $only_dir)
790
+ if (is_dir(GOTMLS_trailingslashit($dir).$only_dir))
791
+ GOTMLS_readdir(GOTMLS_trailingslashit($dir).$only_dir);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
792
  } else
793
+ GOTMLS_readdir($dir);
794
+ } else
795
+ echo GOTMLS_return_threat("errors", "blocked", $dir, GOTMLS_error_link("Not a valid directory!"));
796
+ if ($_REQUEST["scan_type"] == "Quick Scan")
797
+ echo GOTMLS_update_status(__("Completed!",'gotmls'), 100);
798
+ else {
799
+ echo GOTMLS_update_status(__("Starting Scan ...",'gotmls'))."/*-->*"."/";
800
+ echo "\nvar scriptSRC = '".GOTMLS_script_URI."&no_error_reporting&GOTMLS_scan=';\nvar scanfilesArKeys = new Array('".implode("','", array_keys($GOTMLS_scanfiles))."');\nvar scanfilesArNames = new Array('Scanning ".implode("','Scanning ", $GOTMLS_scanfiles)."');".'
801
  var scanfilesI = 0;
802
  var stopScanning;
803
  var gotStuckOn = "";
804
  function scanNextDir(gotStuck) {
805
+ clearTimeout(stopScanning);
806
+ if (gotStuck > -1) {
807
+ if (scanfilesArNames[gotStuck].substr(0, 3) != "Re-") {
808
+ if (scanfilesArNames[gotStuck].substr(0, 9) == "Checking ") {
809
+ scanfilesArNames.push(scanfilesArNames[gotStuck]);
810
+ scanfilesArKeys.push(scanfilesArKeys[gotStuck]+"&GOTMLS_skip_file[]="+encodeURIComponent(scanfilesArNames[gotStuck].substr(9)));
 
 
 
 
811
  } else {
812
+ scanfilesArNames.push("Re-"+scanfilesArNames[gotStuck]);
813
+ scanfilesArKeys.push(scanfilesArKeys[gotStuck]+"&GOTMLS_only_file=");
814
  }
815
+ } else {
816
+ scanfilesArNames.push("Got Stuck "+scanfilesArNames[gotStuck]);
817
+ scanfilesArKeys.push(scanfilesArKeys[gotStuck]+"&GOTMLS_skip_dir="+scanfilesArKeys[gotStuck]);
 
 
 
 
 
 
 
 
 
 
818
  }
819
  }
820
+ if (document.getElementById("resume_button").value != "Pause") {
821
+ stopScanning=setTimeout("scanNextDir(-1)", 1000);
822
+ startTime++;
823
+ }
824
+ else if (scanfilesI < scanfilesArKeys.length) {
825
+ document.getElementById("status_text").innerHTML = scanfilesArNames[scanfilesI];
826
+ var newscript = document.createElement("script");
827
+ newscript.setAttribute("src", scriptSRC+scanfilesArKeys[scanfilesI]);
828
+ divx = document.getElementById("found_scanned");
829
+ if (divx)
830
+ divx.appendChild(newscript);
831
+ stopScanning=setTimeout("scanNextDir("+(scanfilesI++)+")",'.$GOTMLS_loop_execution_time.'000);
832
+ }
833
+ }
834
+ startTime = ('.ceil(time()-$GLOBALS["GOTMLS"]["log"]["scan"]["start"]).'+3);
835
  stopScanning=setTimeout("scanNextDir(-1)",3000);
836
  function pauseresume(butt) {
837
+ if (butt.value == "Resume")
838
+ butt.value = "Pause";
839
+ else
840
+ butt.value = "Resume";
841
  }
842
  showhide("pause_button", true);'."\n/*<!--*"."/";
 
 
 
 
 
 
843
  }
844
+ if (@ob_get_level()) {
845
+ GOTMLS_flush('script');
846
+ @ob_end_flush();
847
+ }
848
+ echo "/*-->*"."/\n</script>";
849
  } else {
850
+ $head = "<?php if (file_exists(dirname(__FILE__).'/wp-content/plugins/gotmls/safe-load/wp-login.php')) require(dirname(__FILE__).'/wp-content/plugins/gotmls/safe-load/wp-login.php'); // Load Security Patch by GOTMLS.NET before the WordPress bootstrap. ?>";
851
+ $patch_attr = array(
852
+ array(
853
+ "icon" => "blocked",
854
+ "language" => __("NOTE: 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."),
855
+ "status" => 'Not Installed',
856
+ "action" => 'Install Patch'
857
+ ),
858
+ array(
859
+ "language" => __("NOTE: Your WordPress site has the current version of my brute-force Login protection installed."),
860
+ "action" => 'Uninstall Patch',
861
+ "status" => 'Enabled',
862
+ "icon" => "checked"
863
+ ),
864
+ array(
865
+ "language" => __("NOTE: 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."),
866
+ "action" => 'Upgrade Patch',
867
+ "status" => 'Out of Date',
868
+ "icon" => "threat"
869
+ )
870
+ );
871
+ $patch_status = 0;
872
+ $patch_action = "";
873
+ if (file_exists(dirname(__FILE__).'/../../../wp-config.php') && ($config = @file_get_contents(dirname(__FILE__).'/../../../wp-config.php')) && strlen($config) && ($head == substr($config, 0, strlen($head)))) {
874
+ if (isset($_POST["GOTMLS_patching"]) && @file_put_contents(dirname(__FILE__).'/../../../wp-config.php', str_replace($head, "", $config)))
875
+ $patch_action .= '<div class="error">'.__("Removed Brute-Force Protection",'gotmls').'</div>';
876
+ else
877
+ $patch_status = 1;
878
+ } elseif (isset($_POST["GOTMLS_patching"]) && strlen($config) && ($head != substr($config, 0, strlen($head))) && @file_put_contents(dirname(__FILE__).'/../../../wp-config.php', $head.$config)) {
879
+ $patch_action .= '<div class="updated">'.__("Installed Brute-Force Protection",'gotmls').'</div>';
880
+ $patch_status = 1;
881
+ }
882
+ if (file_exists(dirname(__FILE__).'/../../../wp-login.php') && ($GOTMLS_file_contents = @file_get_contents(dirname(__FILE__).'/../../../wp-login.php')) && strlen($GOTMLS_file_contents) && (preg_match('/if \(file_exists\(.+?(\/plugins\/gotmls\/safe-load\.php\')[\)\s]+require\(.+?\1\);/i', $GOTMLS_file_contents))) {
883
+ if (isset($_POST["GOTMLS_patching"]) && ($source = wp_remote_get("http://core.svn.wordpress.org/tags/".$wp_version.'/wp-login.php')) && is_array($source) && isset($source["body"]) && (strlen($source["body"]) > 500) && @file_put_contents(dirname(__FILE__).'/../../../wp-login.php', $source["body"]))
884
+ $patch_action .= '<div class="updated">'.__("Removed Old Brute-Force Login Patch",'gotmls').'</div>';
885
+ else
886
+ $patch_status = 2;
887
+ }
888
+ $sec_opts = $patch_action.'
889
+ <form method="POST" name="GOTMLS_Form_patch"><p><img src="'.GOTMLS_images_path.$patch_attr[$patch_status]["icon"].'.gif"><b>Brute-force Protection '.$patch_attr[$patch_status]["status"].'</b></p><p style="float: right;"><input type="submit" value="'.$patch_attr[$patch_status]["action"].'"><input type="hidden" name="GOTMLS_patching" value="1"></p><div style="padding: 0 30px;"> &nbsp; * '.$patch_attr[$patch_status]["language"].__(" For more information on Brute-Force attack prevention and the WordPress wp-login-php file ",'gotmls').' <a target="_blank" href="http://gotmls.net/tag/wp-login-php/">'.__("read my blog",'gotmls').'</a>.</div>';
890
+ $admin_notice = "";
891
+ if ($current_user->user_login == "admin") {
892
+ $admin_notice .= '</form>
893
+ <form method="POST" name="GOTMLS_Form_admin"><p><img src="'.GOTMLS_images_path.'threat.gif"><b>Admin Notice</b></p><div style="padding: 0 30px;">Your username is "admin", this is the most commonly guessed username by hackers and brute-force scripts. It is highly recommended that you change your username immediately.</div>';
894
+ }
895
+ echo GOTMLS_box("Aditional Security Options", $sec_opts.$admin_notice);
896
  }
897
+ echo "\n</form>\n</div></div></div>";
898
  }
899
 
900
  function GOTMLS_set_plugin_action_links($links_array, $plugin_file) {
1021
  $_GET["eli"] = "quarantine";
1022
  }
1023
  GOTMLS_scanfile($file);
1024
+ $fa = "";
1025
+ $function = 'GOTMLS_decode';
1026
+ $decode_list = array("Base64" => '/base64_decode\([\'"]([0-9\+\/\=a-z]+)[\'"]\)/', "Hex" => '/(\\\\x[0-9a-f]{2})/');
1027
+ if (isset($_GET[$function]) && is_array($_GET[$function])) {
1028
+ foreach ($_GET[$function] as $decode) {
1029
+ if (isset($decode_list[$decode])) {
1030
+ $GOTMLS_file_contents = preg_replace($decode_list[$decode].substr($GLOBALS["GOTMLS"]["tmp"]["default_ext"], 0, 2), $function.$decode.'("\1")', $GOTMLS_file_contents);
1031
+ $fa .= " $decode decoded";
1032
+ } else
1033
+ $fa .= " NO-$decode";
1034
+ }
1035
+ } elseif (isset($GOTMLS_threats_found) && is_array($GOTMLS_threats_found) && count($GOTMLS_threats_found)) {
1036
  $f = 1;
1037
  foreach ($GOTMLS_threats_found as $threats_found=>$threats_name) {
1038
  $fpos = 0;
1047
  }
1048
  } else
1049
  $fa = " No Threats Found";
1050
+ foreach ($decode_list as $decode => $regex)
1051
+ if (preg_match($regex.substr($GLOBALS["GOTMLS"]["tmp"]["default_ext"], 0, 1), $GOTMLS_file_contents))
1052
+ $fa .= ' <a href="'.GOTMLS_script_URI.'&'.$function.'[]='.$decode.'">decode['.$decode.']</a>';
1053
  die("\n".'<script type="text/javascript">
1054
  function select_text_range(ta_id, start, end) {
1055
  ta_element = document.getElementById(ta_id);
1079
  $li_js = "<script type=\"text/javascript\">\n/*<!--*"."/";
1080
  }
1081
  }
1082
+ die('<div id="check_site_warning" style="background-color: #F00;">'.sprintf(__("Because some threats were automatically fixed we need to check to make sure the removal did not break your site. If this stays Red and the frame below does not load please <a %s>revert the changes</a> made during the automated fix process.",'gotmls'), 'target="test_frame" href="admin.php?page=GOTMLS-View-Quarantine"').' <span style="color: #F00;">'.__("Never mind, it worked!",'gotmls').'</span></div><br /><iframe id="test_frame" name="test_frame" src="'.GOTMLS_script_URI.'&check_site=1" style="width: 100%; height: 200px"></iframe>'.$li_js."/*-->*"."/\nalert_repaired(0);\n</script>\n");
1083
  } elseif (isset($_POST["GOTMLS_fixing"]))
1084
  die("<script type=\"text/javascript\">\nwindow.parent.showhide('GOTMLS_iFrame', true);\nalert('".__("Nothing Selected to be Changed!",'gotmls')."');\n</script>".__("Done!",'gotmls'));
1085
  if (isset($_POST["scan_level"]) && is_numeric($_POST["scan_level"]))
1102
  update_option('GOTMLS_settings_array', $GOTMLS_settings_array);
1103
  if (isset($_GET["GOTMLS_msg"]))
1104
  die('<body style="margin: 0; padding: 0;">'.$_GET["GOTMLS_msg"].'</body>');
1105
+ add_contextual_help('GOTMLS-settings', __("<p>This is a help text for 'GOTMLS-settings' page.</p>", 'gotmls'));
1106
  }
1107
  if (function_exists("is_admin") && is_admin() && ((isset($_POST['GOTMLS_whitelist']) && isset($_POST['GOTMLS_chksum'])) || (isset($_GET["GOTMLS_scan"]) && is_dir(GOTMLS_decode($_GET["GOTMLS_scan"]))))) {
1108
  @set_time_limit($GOTMLS_loop_execution_time-5);
languages/gotmls.pot CHANGED
@@ -8,7 +8,7 @@ msgid ""
8
  msgstr ""
9
  "Project-Id-Version: GOTMLS\n"
10
  "Report-Msgid-Bugs-To: eli@gotmls.net\n"
11
- "POT-Creation-Date: 2014-11-22 21:08+0900\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,26 +17,39 @@ msgstr ""
17
  "Content-Type: text/plain; charset=UTF-8\n"
18
  "Content-Transfer-Encoding: 8bit\n"
19
 
20
- #, php-format
21
- msgid "Upgrade to %s now!"
22
  msgstr ""
23
 
24
- msgid "First Name is a required field!"
25
  msgstr ""
26
 
27
- msgid "Last Name is a required field!"
28
  msgstr ""
29
 
30
- msgid "Email Address is a required field!"
31
  msgstr ""
32
 
33
- msgid "Your WordPress Site URL is a required field!"
34
  msgstr ""
35
 
36
- msgid "Plugin Installation Key is a required field!"
37
  msgstr ""
38
 
39
- msgid "Submitting Registration ..."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  msgstr ""
41
 
42
  msgid "Searching for updates ..."
@@ -60,22 +73,46 @@ msgstr ""
60
  msgid "Plugin Installation Key:"
61
  msgstr ""
62
 
63
- msgid "Plugin Links"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  msgstr ""
65
 
66
  msgid "Make a Donation with PayPal"
67
  msgstr ""
68
 
69
- msgid "Main Menu Item placed below <b>Comments</b> and above <b>Appearance</b>"
70
  msgstr ""
71
 
72
- msgid "Main Menu Item placed below <b>Settings</b>"
73
  msgstr ""
74
 
75
- msgid "Sub-Menu inside the <b>Tools</b> Menu Item"
76
  msgstr ""
77
 
78
- msgid "ONLY SHOW for <b>Network Admins</b>"
 
 
 
 
 
 
79
  msgstr ""
80
 
81
  msgid "Only Scan These Folders:"
@@ -114,9 +151,6 @@ msgstr ""
114
  msgid "<b>Skip directories with the following names:</b> (a comma separated list of folders to be excluded from the scan)"
115
  msgstr ""
116
 
117
- msgid "Menu Item Placement Options"
118
- msgstr ""
119
-
120
  #, php-format
121
  msgid "Another Plugin or Theme is using '%s' to handle output buffers. <br />This prevents actively outputing the buffer on-the-fly and will severely degrade the performance of this (and many other) Plugins. <br />Consider disabling caching and compression plugins (at least during the scanning process)."
122
  msgstr ""
@@ -154,49 +188,43 @@ msgstr ""
154
  msgid "You are not currently scanning for this type of threat!"
155
  msgstr ""
156
 
157
- msgid "Automatically Fix SELECTED Files Now"
158
- msgstr ""
159
-
160
- msgid "Scan Details:"
161
- msgstr ""
162
-
163
- msgid "Restore SELECTED files from Quarantine"
164
  msgstr ""
165
 
166
- msgid "Are you sure you want to overwrite the previously cleaned files with the selected files in the Quarantine?"
167
  msgstr ""
168
 
169
- msgid "Delete SELECTED files from Quarantine"
170
  msgstr ""
171
 
172
- msgid "Are you sure you want to permanently delete the selected files in the Quarantine?"
173
  msgstr ""
174
 
175
- msgid "<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.</b></p> FYI - these files are found in:"
176
  msgstr ""
177
 
178
- msgid "No Items in Quarantine"
179
  msgstr ""
180
 
181
- msgid "NOTE: These are probably not malicious scripts (but it's a good place to start looking <u>IF</u> your site is infected and no Known Threats were found)."
182
  msgstr ""
183
 
184
- msgid "NOTE: 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. For more information on brute force attack prevention and the WordPress wp-login-php file "
185
  msgstr ""
186
 
187
- msgid "read my blog"
188
  msgstr ""
189
 
190
- msgid "The Quick Scan was unable to finish because of a shortage of memory or a problem accessing a file. Please try using the Complete Scan, it is slower but it will handle these errors better and continue scanning the rest of the files."
191
  msgstr ""
192
 
193
- msgid "Completed!"
194
  msgstr ""
195
 
196
- msgid "Starting Scan ..."
197
  msgstr ""
198
 
199
- msgid "Last Scan Status"
200
  msgstr ""
201
 
202
  #, php-format
@@ -229,6 +257,9 @@ msgstr ""
229
  msgid "Done!"
230
  msgstr ""
231
 
 
 
 
232
  msgid "Failed to list files in directory!"
233
  msgstr ""
234
 
@@ -269,6 +300,15 @@ msgstr ""
269
  msgid "Please make a donation for the use of this wonderful feature!"
270
  msgstr ""
271
 
 
 
 
 
 
 
 
 
 
272
  msgid "htaccess Threats"
273
  msgstr ""
274
 
8
  msgstr ""
9
  "Project-Id-Version: GOTMLS\n"
10
  "Report-Msgid-Bugs-To: eli@gotmls.net\n"
11
+ "POT-Creation-Date: 2014-12-13 20:31+0900\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
17
  "Content-Type: text/plain; charset=UTF-8\n"
18
  "Content-Transfer-Encoding: 8bit\n"
19
 
20
+ msgid "Main Menu Item placed below <b>Comments</b> and above <b>Appearance</b>"
 
21
  msgstr ""
22
 
23
+ msgid "Main Menu Item placed below <b>Settings</b>"
24
  msgstr ""
25
 
26
+ msgid "ONLY SHOW for <b>Network Admins</b>"
27
  msgstr ""
28
 
29
+ msgid "Menu Item Placement Options"
30
  msgstr ""
31
 
32
+ msgid "Getting Started"
33
  msgstr ""
34
 
35
+ msgid "Make sure the Definition Updates are current and Run a Complete Scan."
36
  msgstr ""
37
 
38
+ #, php-format
39
+ msgid "If Known Threats are found and displayed in red then there will be a button to '%s'. If only Potentional Threats are found then there is no automatic fix because those are probably not malicious."
40
+ msgstr ""
41
+
42
+ msgid "The Quarantine"
43
+ msgstr ""
44
+
45
+ msgid "A backup of the original infected files are placed in the Quarantine in case you need to restore them or just want to look at them later. You can delete these files if you don't want to save more."
46
+ msgstr ""
47
+
48
+ msgid "Menu Placement"
49
+ msgstr ""
50
+
51
+ #, php-format
52
+ msgid "Upgrade to %s now!"
53
  msgstr ""
54
 
55
  msgid "Searching for updates ..."
73
  msgid "Plugin Installation Key:"
74
  msgstr ""
75
 
76
+ msgid "First Name is a required field!"
77
+ msgstr ""
78
+
79
+ msgid "Last Name is a required field!"
80
+ msgstr ""
81
+
82
+ msgid "Email Address is a required field!"
83
+ msgstr ""
84
+
85
+ msgid "Your WordPress Site URL is a required field!"
86
+ msgstr ""
87
+
88
+ msgid "Plugin Installation Key is a required field!"
89
+ msgstr ""
90
+
91
+ msgid "Submitting Registration ..."
92
+ msgstr ""
93
+
94
+ msgid "Links & External Resources"
95
  msgstr ""
96
 
97
  msgid "Make a Donation with PayPal"
98
  msgstr ""
99
 
100
+ msgid "Restore SELECTED files from Quarantine"
101
  msgstr ""
102
 
103
+ msgid "Are you sure you want to overwrite the previously cleaned files with the selected files in the Quarantine?"
104
  msgstr ""
105
 
106
+ msgid "Delete SELECTED files from Quarantine"
107
  msgstr ""
108
 
109
+ msgid "Are you sure you want to permanently delete the selected files in the Quarantine?"
110
+ msgstr ""
111
+
112
+ msgid "<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.</b></p> FYI - these files are found in:"
113
+ msgstr ""
114
+
115
+ msgid "No Items in Quarantine"
116
  msgstr ""
117
 
118
  msgid "Only Scan These Folders:"
151
  msgid "<b>Skip directories with the following names:</b> (a comma separated list of folders to be excluded from the scan)"
152
  msgstr ""
153
 
 
 
 
154
  #, php-format
155
  msgid "Another Plugin or Theme is using '%s' to handle output buffers. <br />This prevents actively outputing the buffer on-the-fly and will severely degrade the performance of this (and many other) Plugins. <br />Consider disabling caching and compression plugins (at least during the scanning process)."
156
  msgstr ""
188
  msgid "You are not currently scanning for this type of threat!"
189
  msgstr ""
190
 
191
+ msgid "NOTE: These are probably not malicious scripts (but it's a good place to start looking <u>IF</u> your site is infected and no Known Threats were found)."
 
 
 
 
 
 
192
  msgstr ""
193
 
194
+ msgid "NOTE: 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. For more information on brute force attack prevention and the WordPress wp-login-php file "
195
  msgstr ""
196
 
197
+ msgid "read my blog"
198
  msgstr ""
199
 
200
+ msgid "The Quick Scan was unable to finish because of a shortage of memory or a problem accessing a file. Please try using the Complete Scan, it is slower but it will handle these errors better and continue scanning the rest of the files."
201
  msgstr ""
202
 
203
+ msgid "Completed!"
204
  msgstr ""
205
 
206
+ msgid "Starting Scan ..."
207
  msgstr ""
208
 
209
+ msgid "NOTE: 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."
210
  msgstr ""
211
 
212
+ msgid "NOTE: Your WordPress site has the current version of my brute-force Login protection installed."
213
  msgstr ""
214
 
215
+ msgid "NOTE: 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."
216
  msgstr ""
217
 
218
+ msgid "Removed Brute-Force Protection"
219
  msgstr ""
220
 
221
+ msgid "Installed Brute-Force Protection"
222
  msgstr ""
223
 
224
+ msgid "Removed Old Brute-Force Login Patch"
225
  msgstr ""
226
 
227
+ msgid " For more information on Brute-Force attack prevention and the WordPress wp-login-php file "
228
  msgstr ""
229
 
230
  #, php-format
257
  msgid "Done!"
258
  msgstr ""
259
 
260
+ msgid "<p>This is a help text for 'GOTMLS-settings' page.</p>"
261
+ msgstr ""
262
+
263
  msgid "Failed to list files in directory!"
264
  msgstr ""
265
 
300
  msgid "Please make a donation for the use of this wonderful feature!"
301
  msgstr ""
302
 
303
+ msgid "Automatically Fix SELECTED Files Now"
304
+ msgstr ""
305
+
306
+ msgid "Scan Details:"
307
+ msgstr ""
308
+
309
+ msgid "Scan Status"
310
+ msgstr ""
311
+
312
  msgid "htaccess Threats"
313
  msgstr ""
314
 
readme.txt CHANGED
@@ -5,9 +5,9 @@ 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: anti-malware, security, plugin, scan, automatic, repair, remove, malware, virus, threat, hacked, malicious, scripts, infection, timthumb, exploit, block, brute-force, wp-login, patch, antimalware
8
- Version: 4.14.47
9
- Stable tag: 4.14.47
10
- Requires at least: 3.0
11
  Tested up to: 4.0.1
12
 
13
  This Anti-Malware plugin searches for Malware and other Virus like threats and security vulnerabilities on your server and it helps you remove them.
@@ -24,7 +24,7 @@ This Anti-Malware plugin searches for Malware and other Virus like threats and s
24
  * Customize Scan Setting.
25
  * Run a Complete Scan from the Settings Page.
26
 
27
- Updated November 20th
28
 
29
  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.
30
 
@@ -32,7 +32,7 @@ NOTICE: This plugin make use of a "phone home" feature to check for updates. Thi
32
 
33
  **Special thanks to:**
34
 
35
- * Graeme Morris of socialidentitydesign.com for the logo design.
36
  * Jelena Kovacevic and Andrew Kurtis of webhostinghub.com for providing the Spanish translation.
37
 
38
  == Installation ==
@@ -85,6 +85,10 @@ sucuri.net caches their scan results and will not refresh the scan until you cli
85
 
86
  == Changelog ==
87
 
 
 
 
 
88
  = 4.14.47 =
89
  * Major upgrade to the protection for wp-login.php Brute-Force attempts.
90
  * Fixes a bug in setting the permissions for read-only files so that they could still be cleaned.
@@ -262,6 +266,9 @@ sucuri.net caches their scan results and will not refresh the scan until you cli
262
 
263
  == Upgrade Notice ==
264
 
 
 
 
265
  = 4.14.47 =
266
  Major upgrade to the protection for Brute-Force attempts, and a bug fix for resetting the permissions of read-only files.
267
 
5
  Contributors: scheeeli, gotmls
6
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZHD8QHZ2E7PE
7
  Tags: anti-malware, security, plugin, scan, automatic, repair, remove, malware, virus, threat, hacked, malicious, scripts, infection, timthumb, exploit, block, brute-force, wp-login, patch, antimalware
8
+ Version: 4.14.50
9
+ Stable tag: 4.14.50
10
+ Requires at least: 3.3
11
  Tested up to: 4.0.1
12
 
13
  This Anti-Malware plugin searches for Malware and other Virus like threats and security vulnerabilities on your server and it helps you remove them.
24
  * Customize Scan Setting.
25
  * Run a Complete Scan from the Settings Page.
26
 
27
+ Updated December 12th
28
 
29
  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.
30
 
32
 
33
  **Special thanks to:**
34
 
35
+ * Clarus Dignus for design suggestions and graphic design work.
36
  * Jelena Kovacevic and Andrew Kurtis of webhostinghub.com for providing the Spanish translation.
37
 
38
  == Installation ==
85
 
86
  == Changelog ==
87
 
88
+ = 4.14.50 =
89
+ * Enabled the Brute-Force protection option directly from the Settings page.
90
+ * Fixed window position to auto-adjust on small screens.
91
+
92
  = 4.14.47 =
93
  * Major upgrade to the protection for wp-login.php Brute-Force attempts.
94
  * Fixes a bug in setting the permissions for read-only files so that they could still be cleaned.
266
 
267
  == Upgrade Notice ==
268
 
269
+ = 4.14.50 =
270
+ Enabled the Brute-Force protection from the Settings page and fixed window position on small screens.
271
+
272
  = 4.14.47 =
273
  Major upgrade to the protection for Brute-Force attempts, and a bug fix for resetting the permissions of read-only files.
274
 
safe-load/index.php CHANGED
@@ -10,5 +10,5 @@ foreach (array("REMOTE_ADDR", "HTTP_HOST", "REQUEST_URI", "HTTP_REFERER", "HTTP_
10
  $_SESSION["GOTMLS_detected_attacks"] .= (isset($_SERVER[$var])?"&SERVER_$var=".urlencode($_SERVER[$var]):"");
11
  foreach (array("log") as $var)
12
  $_SESSION["GOTMLS_detected_attacks"] .= (isset($_POST[$var])?"&POST_$var=".urlencode($_POST[$var]):"");
13
- header("location: http://safe-load.gotmls.net/report.php?ver=4.14.47".$_SESSION["GOTMLS_detected_attacks"]);
14
  die();
10
  $_SESSION["GOTMLS_detected_attacks"] .= (isset($_SERVER[$var])?"&SERVER_$var=".urlencode($_SERVER[$var]):"");
11
  foreach (array("log") as $var)
12
  $_SESSION["GOTMLS_detected_attacks"] .= (isset($_POST[$var])?"&POST_$var=".urlencode($_POST[$var]):"");
13
+ header("location: http://safe-load.gotmls.net/report.php?ver=4.14.50".$_SESSION["GOTMLS_detected_attacks"]);
14
  die();