Пример #1
0
 /**
  * Verifies an optimizeMember-generated signature; in a full URL, a partial URI, or in just a query string.
  *
  * @package optimizeMember\Utilities
  * @since 111106
  *
  * @param str $url_uri_query A full URL, a partial URI, or just a query string. Must have an optimizeMember-generated signature to validate.
  * @param bool $check_time Optional. Defaults to false. If true, optimizeMember will also check if the signature has expired, based on ``$exp_secs``.
  * @param str|int $exp_secs Optional. Defaults to (int)10. If ``$check_time`` is true, optimizeMember will check if the signature has expired, based on ``$exp_secs``.
  * @param str $sig_var Optional. The name of the optimizeMember-generated signature variable. Defaults to `_optimizemember_sig`.
  * @return bool True if the optimizeMember-generated signature is OK, else false.
  */
 public static function optimizemember_sig_ok($url_uri_query = FALSE, $check_time = FALSE, $exp_secs = FALSE, $sig_var = FALSE)
 {
     $url_uri_query = $query = c_ws_plugin__optimizemember_utils_strings::trim((string) $url_uri_query, false, "?&=");
     if (preg_match("/^(?:[a-z]+\\:\\/\\/|\\/)/i", $url_uri_query)) {
         $query = trim(c_ws_plugin__optimizemember_utils_urls::parse_url($url_uri_query, PHP_URL_QUERY), "?&=");
     }
     /**/
     $check_time = $check_time ? true : false;
     $exp_secs = is_numeric($exp_secs) ? (int) $exp_secs : 10;
     $sig_var = $sig_var && is_string($sig_var) ? $sig_var : "_optimizemember_sig";
     /**/
     $key = c_ws_plugin__optimizemember_utils_encryption::key();
     /**/
     if (preg_match_all("/" . preg_quote($sig_var, "/") . "\\=([0-9]+)-([^&\$]+)/", $query, $sigs)) {
         $query = c_ws_plugin__optimizemember_utils_urls::remove_optimizemember_sigs($query, $sig_var);
         /**/
         wp_parse_str($query, $vars);
         $vars = c_ws_plugin__optimizemember_utils_arrays::remove_0b_strings(c_ws_plugin__optimizemember_utils_strings::trim_deep($vars));
         $vars = serialize(c_ws_plugin__optimizemember_utils_arrays::ksort_deep($vars));
         /**/
         ($time = $sigs[1][$i = count($sigs[1]) - 1]) . ($sig = $sigs[2][$i]) . ($valid_sig = md5($key . $time . $vars));
         /**/
         if ($check_time) {
             return $sig === $valid_sig && $time >= strtotime("-" . $exp_secs . " seconds");
         } else {
             /* Ignoring time? Just need to compare signatures in this case. */
             return $sig === $valid_sig;
         }
     } else {
         /* Return false. No ``$query``, or no ``$sigs``. */
         return false;
     }
 }
Пример #2
0
 /**
  * Removes all 0-byte strings from an array *( or even a multi-dimensional array )*.
  *
  * @package optimizeMember\Utilities
  * @since 111216
  *
  * @param array $array An input array.
  * @return array Returns the ``$array`` after having reduced its set of values.
  */
 public static function remove_0b_strings($array = FALSE)
 {
     $array = (array) $array;
     /**/
     foreach ($array as $key => &$value) {
         if (is_array($value)) {
             $value = c_ws_plugin__optimizemember_utils_arrays::remove_0b_strings($value);
         } else {
             if (is_string($value) && !strlen($value)) {
                 unset($array[$key]);
             }
         }
     }
     return $array;
 }