Below is a differential between the unpatched vulnerable code and the patched update, for reference.
--- a/independent-analytics/IAWP/AJAX/Export_Reports.php
+++ b/independent-analytics/IAWP/AJAX/Export_Reports.php
@@ -41,6 +41,6 @@
}
$reports[] = $report->to_array();
}
- wp_send_json_success(['json' => json_encode(['plugin_version' => '2.15.0', 'database_version' => '52', 'export_version' => '1', 'reports' => $reports])]);
+ wp_send_json_success(['json' => json_encode(['plugin_version' => '2.15.1', 'database_version' => '52', 'export_version' => '1', 'reports' => $reports])]);
}
}
--- a/independent-analytics/IAWP/Admin_Page/Analytics_Page.php
+++ b/independent-analytics/IAWP/Admin_Page/Analytics_Page.php
@@ -94,31 +94,31 @@
echo Security::string($table->group()->singular());
?>"
data-report-relative-range-id-value="<?php
- echo Security::attr($options->relative_range_id());
+ echo esc_attr($options->relative_range_id());
?>"
data-report-exact-start-value="<?php
- echo Security::attr($options->start());
+ echo esc_attr($options->start());
?>"
data-report-exact-end-value="<?php
- echo Security::attr($options->end());
+ echo esc_attr($options->end());
?>"
data-report-group-value="<?php
- echo Security::attr($table->group()->id());
+ echo esc_attr($table->group()->id());
?>"
data-report-filters-value="<?php
echo esc_attr(Security::json_encode($options->raw_filters()));
?>"
data-report-filter-logic-value="<?php
- echo Security::attr($options->filter_logic());
+ echo esc_attr($options->filter_logic());
?>"
data-report-chart-interval-value="<?php
- echo Security::attr($options->chart_interval()->id());
+ echo esc_attr($options->chart_interval()->id());
?>"
data-report-sort-column-value="<?php
- echo Security::attr($sort_configuration->column());
+ echo esc_attr($sort_configuration->column());
?>"
data-report-sort-direction-value="<?php
- echo Security::attr($sort_configuration->direction());
+ echo esc_attr($sort_configuration->direction());
?>"
data-report-columns-value="<?php
echo esc_attr(Security::json_encode($table->visible_column_ids()));
@@ -182,31 +182,31 @@
echo Security::string($table->group()->singular());
?>"
data-report-relative-range-id-value="<?php
- echo Security::attr($options->relative_range_id());
+ echo esc_attr($options->relative_range_id());
?>"
data-report-exact-start-value="<?php
- echo Security::attr($options->start());
+ echo esc_attr($options->start());
?>"
data-report-exact-end-value="<?php
- echo Security::attr($options->end());
+ echo esc_attr($options->end());
?>"
data-report-group-value="<?php
- echo Security::attr($table->group()->id());
+ echo esc_attr($table->group()->id());
?>"
data-report-filters-value="<?php
echo esc_attr(Security::json_encode($options->raw_filters()));
?>"
data-report-filter-logic-value="<?php
- echo Security::attr($options->filter_logic());
+ echo esc_attr($options->filter_logic());
?>"
data-report-chart-interval-value="<?php
- echo Security::attr($options->chart_interval()->id());
+ echo esc_attr($options->chart_interval()->id());
?>"
data-report-sort-column-value="<?php
- echo Security::attr($sort_configuration->column());
+ echo esc_attr($sort_configuration->column());
?>"
data-report-sort-direction-value="<?php
- echo Security::attr($sort_configuration->direction());
+ echo esc_attr($sort_configuration->direction());
?>"
data-report-columns-value="<?php
echo esc_attr(Security::json_encode($table->visible_column_ids()));
--- a/independent-analytics/IAWP/Data_Pruning/Pruning_Scheduler.php
+++ b/independent-analytics/IAWP/Data_Pruning/Pruning_Scheduler.php
@@ -40,7 +40,7 @@
$scheduled_at->setTimestamp(wp_next_scheduled('iawp_prune'));
$day = $scheduled_at->format(Format::date());
$time = $scheduled_at->format(Format::time());
- return sprintf(__('Next data pruning scheduled for %s at %s.', 'independent-analytics'), '<span>' . $day . '</span>', '<span>' . $time . '</span>');
+ return sprintf(__('Next data pruning scheduled for %s at %s.', 'independent-analytics'), '<strong>' . $day . '</strong>', '<strong>' . $time . '</strong>');
}
public function get_pruning_description(string $cutoff) : string
{
--- a/independent-analytics/IAWP/Email_Reports/Email_Reports.php
+++ b/independent-analytics/IAWP/Email_Reports/Email_Reports.php
@@ -72,7 +72,7 @@
$date = $this->interval()->next_interval_start();
$day = $date->format(Format::date());
$time = $date->format(Format::time());
- return sprintf(__('Next email scheduled for %s at %s.', 'independent-analytics'), '<span>' . $day . '</span>', '<span>' . $time . '</span>');
+ return sprintf(__('Next email scheduled for %s at %s.', 'independent-analytics'), '<strong>' . $day . '</strong>', '<strong>' . $time . '</strong>');
}
public function maybe_reschedule()
{
--- a/independent-analytics/IAWP/Filters.php
+++ b/independent-analytics/IAWP/Filters.php
@@ -19,7 +19,7 @@
echo esc_attr(json_encode($options->raw_filters()));
?>"
data-filters-filter-logic-value="<?php
- echo Security::attr($options->filter_logic());
+ echo esc_attr($options->filter_logic());
?>"
>
<span class="dashicons dashicons-filter"></span>
@@ -146,7 +146,7 @@
<button class="filters-condition-button"
data-action="filters#toggleModal"
data-filters-target="modalButton"><?php
- echo wp_kses_post($filters[$i]->html_description());
+ echo Security::strong_tags_only($filters[$i]->html_description());
?></button>
<?php
}
--- a/independent-analytics/IAWP/Tables/Table.php
+++ b/independent-analytics/IAWP/Tables/Table.php
@@ -137,12 +137,12 @@
return Number_Formatter::percent($row->{$column_id}(), 2);
} elseif ($column_id == 'url') {
if ($row->is_deleted()) {
- return urldecode(esc_url($row->url()));
+ return esc_html(urldecode($row->url()));
} else {
- return '<a href="' . esc_url($row->url(true)) . '" target="_blank" class="external-link">' . urldecode(esc_url($row->url())) . '<span class="dashicons dashicons-external"></span></a>';
+ return '<a href="' . esc_url($row->url(true)) . '" target="_blank" class="external-link">' . esc_html(urldecode($row->url())) . '<span class="dashicons dashicons-external"></span></a>';
}
} elseif ($column_id == 'author') {
- return Security::html($row->avatar()) . ' ' . Security::string($row->author());
+ return Security::table_cell_content($row->avatar()) . ' ' . Security::string($row->author());
} elseif ($column_id == 'date') {
return Security::string(date(Format::date(), strtotime($row->date())));
} elseif ($column_id == 'type' && method_exists($row, 'icon') && method_exists($row, 'type')) {
@@ -166,7 +166,7 @@
} elseif ($column_id === 'link_target') {
$value = $row->{$column_id}();
if (is_string($value) && URL::new($value)->is_valid_url()) {
- return '<a href="' . esc_url($value) . '" target="_blank" class="external-link">' . esc_url(urldecode($value)) . '<span class="dashicons dashicons-external"></span></a>';
+ return '<a href="' . esc_url($value) . '" target="_blank" class="external-link">' . esc_html(urldecode($value)) . '<span class="dashicons dashicons-external"></span></a>';
}
return Security::string($value);
} else {
--- a/independent-analytics/IAWP/Utils/Request.php
+++ b/independent-analytics/IAWP/Utils/Request.php
@@ -148,10 +148,14 @@
}
private static function url()
{
- if (!empty($_SERVER['HTTP_HOST']) && !empty($_SERVER['REQUEST_URI'])) {
- return esc_url_raw(self::scheme() . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
- } else {
+ if (empty($_SERVER['HTTP_HOST']) || empty($_SERVER['REQUEST_URI'])) {
return null;
}
+ $url = self::scheme() . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+ $decoded_url = rawurldecode($url);
+ if (str_contains($decoded_url, '<') || str_contains($decoded_url, '>')) {
+ return null;
+ }
+ return esc_url_raw($url);
}
}
--- a/independent-analytics/IAWP/Utils/Security.php
+++ b/independent-analytics/IAWP/Utils/Security.php
@@ -13,18 +13,6 @@
{
return trim(sanitize_text_field($string));
}
- public static function attr($att)
- {
- return esc_attr($att);
- }
- public static function hex($hex)
- {
- return sanitize_hex_color($hex);
- }
- public static function html($html)
- {
- return wp_kses_post($html);
- }
public static function array($array)
{
if (is_string($array)) {
@@ -52,4 +40,20 @@
{
return wp_kses($html, ['svg' => ['height' => [], 'width' => [], 'fill' => [], 'viewbox' => [], 'style' => []], 'path' => ['d' => []]]);
}
+ public static function table_cell_content($html)
+ {
+ return wp_kses($html, ['span' => ['class' => []], 'a' => ['href' => [], 'target' => [], 'class' => []], 'img' => ['alt' => [], 'src' => [], 'class' => [], 'height' => [], 'width' => [], 'loading' => []], 'div' => ['class' => []]]);
+ }
+ public static function user_journey_event_contents($html)
+ {
+ return wp_kses($html, ['p' => [], 'a' => ['href' => [], 'target' => []], 'span' => ['class' => []]]);
+ }
+ public static function strong_tags_only($html)
+ {
+ return wp_kses($html, ['strong' => []]);
+ }
+ public static function span_tags_only($html)
+ {
+ return wp_kses($html, ['span' => ['class' => []]]);
+ }
}
--- a/independent-analytics/iawp-bootstrap.php
+++ b/independent-analytics/iawp-bootstrap.php
@@ -33,7 +33,7 @@
use IAWPWP_Option_Cache_Bust;
define( 'IAWP_DIRECTORY', rtrim( plugin_dir_path( __FILE__ ), DIRECTORY_SEPARATOR ) );
define( 'IAWP_URL', rtrim( plugin_dir_url( __FILE__ ), '/' ) );
-define( 'IAWP_VERSION', '2.15.0' );
+define( 'IAWP_VERSION', '2.15.1' );
define( 'IAWP_DATABASE_VERSION', '52' );
define( 'IAWP_LANGUAGES_DIRECTORY', dirname( plugin_basename( __FILE__ ) ) . '/languages' );
define( 'IAWP_PLUGIN_FILE', __DIR__ . '/iawp.php' );
--- a/independent-analytics/iawp.php
+++ b/independent-analytics/iawp.php
@@ -4,7 +4,7 @@
* Plugin Name: Independent Analytics
* Plugin URI: https://independentwp.com/
* Description: User-friendly website analytics built for WordPress
- * Version: 2.15.0
+ * Version: 2.15.1
* Requires at least: 5.9
* Tested up to: 7.0
* Requires PHP: 8.0.30
--- a/independent-analytics/vendor/composer/installed.php
+++ b/independent-analytics/vendor/composer/installed.php
@@ -2,4 +2,4 @@
namespace IAWPSCOPED;
-return array('root' => array('name' => '__root__', 'pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => 'b96c747c0567e5397c0fc4b1490563c78ce69538', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => false), 'versions' => array('__root__' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => 'b96c747c0567e5397c0fc4b1490563c78ce69538', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => false), 'andrewmead/wordpress-proper' => array('pretty_version' => '4.0.1', 'version' => '4.0.1.0', 'reference' => '8253fd2ba493e5597e28820ed249ce0462c13488', 'type' => 'library', 'install_path' => __DIR__ . '/../andrewmead/wordpress-proper', 'aliases' => array(), 'dev_requirement' => false), 'brick/math' => array('pretty_version' => '0.11.0', 'version' => '0.11.0.0', 'reference' => '0ad82ce168c82ba30d1c01ec86116ab52f589478', 'type' => 'library', 'install_path' => __DIR__ . '/../brick/math', 'aliases' => array(), 'dev_requirement' => false), 'carbonphp/carbon-doctrine-types' => array('pretty_version' => '2.1.0', 'version' => '2.1.0.0', 'reference' => '99f76ffa36cce3b70a4a6abce41dba15ca2e84cb', 'type' => 'library', 'install_path' => __DIR__ . '/../carbonphp/carbon-doctrine-types', 'aliases' => array(), 'dev_requirement' => false), 'doctrine/inflector' => array('pretty_version' => '2.1.0', 'version' => '2.1.0.0', 'reference' => '6d6c96277ea252fc1304627204c3d5e6e15faa3b', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/inflector', 'aliases' => array(), 'dev_requirement' => false), 'eftec/bladeone' => array('pretty_version' => '4.19.1', 'version' => '4.19.1.0', 'reference' => 'a22f6471c01c26fea5f6a0d0aca9b5674fc999be', 'type' => 'library', 'install_path' => __DIR__ . '/../eftec/bladeone', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/collections' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => 'd3710b0b244bfc62c288c1a87eaa62dd28352d1f', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/collections', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/conditionable' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => 'bea24daa0fa84b7e7b0d5b84f62c71b7e2dc3364', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/conditionable', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/container' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => '1641dda2d0750b68bb1264a3b37ff3973f2e6265', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/container', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/contracts' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => '44f65d723b13823baa02ff69751a5948bde60c22', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/contracts', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/database' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => '93cfc8e1f9ac147e6a2851ecabe8d8f21ad85182', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/database', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/macroable' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => 'e3bfaf6401742a9c6abca61b9b10e998e5b6449a', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/macroable', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/support' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => '223c608dbca27232df6213f776bfe7bdeec24874', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/support', 'aliases' => array(), 'dev_requirement' => false), 'league/csv' => array('pretty_version' => '9.8.0', 'version' => '9.8.0.0', 'reference' => '9d2e0265c5d90f5dd601bc65ff717e05cec19b47', 'type' => 'library', 'install_path' => __DIR__ . '/../league/csv', 'aliases' => array(), 'dev_requirement' => false), 'league/uri' => array('pretty_version' => '6.7.2', 'version' => '6.7.2.0', 'reference' => 'd3b50812dd51f3fbf176344cc2981db03d10fe06', 'type' => 'library', 'install_path' => __DIR__ . '/../league/uri', 'aliases' => array(), 'dev_requirement' => false), 'league/uri-interfaces' => array('pretty_version' => '2.3.0', 'version' => '2.3.0.0', 'reference' => '00e7e2943f76d8cb50c7dfdc2f6dee356e15e383', 'type' => 'library', 'install_path' => __DIR__ . '/../league/uri-interfaces', 'aliases' => array(), 'dev_requirement' => false), 'matomo/device-detector' => array('pretty_version' => '6.5.1', 'version' => '6.5.1.0', 'reference' => 'f30457500c6be4c80c8830466f8a746724779fd0', 'type' => 'library', 'install_path' => __DIR__ . '/../matomo/device-detector', 'aliases' => array(), 'dev_requirement' => false), 'maxmind-db/reader' => array('pretty_version' => 'v1.13.1', 'version' => '1.13.1.0', 'reference' => '2194f58d0f024ce923e685cdf92af3daf9951908', 'type' => 'library', 'install_path' => __DIR__ . '/../maxmind-db/reader', 'aliases' => array(), 'dev_requirement' => false), 'mlocati/ip-lib' => array('pretty_version' => '1.22.0', 'version' => '1.22.0.0', 'reference' => '4e40ffd3bf9989db19403d89c4d8be44b87b8a91', 'type' => 'library', 'install_path' => __DIR__ . '/../mlocati/ip-lib', 'aliases' => array(), 'dev_requirement' => false), 'mustangostang/spyc' => array('pretty_version' => '0.6.3', 'version' => '0.6.3.0', 'reference' => '4627c838b16550b666d15aeae1e5289dd5b77da0', 'type' => 'library', 'install_path' => __DIR__ . '/../mustangostang/spyc', 'aliases' => array(), 'dev_requirement' => false), 'nesbot/carbon' => array('pretty_version' => '2.73.0', 'version' => '2.73.0.0', 'reference' => '9228ce90e1035ff2f0db84b40ec2e023ed802075', 'type' => 'library', 'install_path' => __DIR__ . '/../nesbot/carbon', 'aliases' => array(), 'dev_requirement' => false), 'piwik/device-detector' => array('dev_requirement' => false, 'replaced' => array(0 => '6.5.1')), 'psr/clock' => array('pretty_version' => '1.0.0', 'version' => '1.0.0.0', 'reference' => 'e41a24703d4560fd0acb709162f73b8adfc3aa0d', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/clock', 'aliases' => array(), 'dev_requirement' => false), 'psr/clock-implementation' => array('dev_requirement' => false, 'provided' => array(0 => '1.0')), 'psr/container' => array('pretty_version' => '2.0.2', 'version' => '2.0.2.0', 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => false), 'psr/container-implementation' => array('dev_requirement' => false, 'provided' => array(0 => '1.1|2.0')), 'psr/http-message' => array('pretty_version' => '1.1', 'version' => '1.1.0.0', 'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), 'dev_requirement' => false), 'psr/log-implementation' => array('dev_requirement' => false, 'provided' => array(0 => '1.0|2.0|3.0')), 'psr/simple-cache' => array('pretty_version' => '3.0.0', 'version' => '3.0.0.0', 'reference' => '764e0b3939f5ca87cb904f570ef9be2d78a07865', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/simple-cache', 'aliases' => array(), 'dev_requirement' => false), 'symfony/console' => array('pretty_version' => 'v6.0.19', 'version' => '6.0.19.0', 'reference' => 'c3ebc83d031b71c39da318ca8b7a07ecc67507ed', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), 'dev_requirement' => false), 'symfony/polyfill-ctype' => array('pretty_version' => 'v1.37.0', 'version' => '1.37.0.0', 'reference' => '141046a8f9477948ff284fa65be2095baafb94f2', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', 'aliases' => array(), 'dev_requirement' => false), 'symfony/polyfill-intl-grapheme' => array('pretty_version' => 'v1.38.1', 'version' => '1.38.1.0', 'reference' => 'e9247d281d694a5120554d9afaf54e070e88a603', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme', 'aliases' => array(), 'dev_requirement' => false), 'symfony/polyfill-intl-normalizer' => array('pretty_version' => 'v1.38.0', 'version' => '1.38.0.0', 'reference' => '2d446c214bdbe5b71bde5011b060a05fece3ae6b', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', 'aliases' => array(), 'dev_requirement' => false), 'symfony/polyfill-mbstring' => array('pretty_version' => 'v1.38.2', 'version' => '1.38.2.0', 'reference' => 'd3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => false), 'symfony/polyfill-php80' => array('pretty_version' => 'v1.37.0', 'version' => '1.37.0.0', 'reference' => 'dfb55726c3a76ea3b6459fcfda1ec2d80a682411', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), 'dev_requirement' => false), 'symfony/service-contracts' => array('pretty_version' => 'v3.0.2', 'version' => '3.0.2.0', 'reference' => 'd78d39c1599bd1188b8e26bb341da52c3c6d8a66', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), 'dev_requirement' => false), 'symfony/string' => array('pretty_version' => 'v6.0.19', 'version' => '6.0.19.0', 'reference' => 'd9e72497367c23e08bf94176d2be45b00a9d232a', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/string', 'aliases' => array(), 'dev_requirement' => false), 'symfony/translation' => array('pretty_version' => 'v6.0.19', 'version' => '6.0.19.0', 'reference' => '9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation', 'aliases' => array(), 'dev_requirement' => false), 'symfony/translation-contracts' => array('pretty_version' => 'v3.0.2', 'version' => '3.0.2.0', 'reference' => 'acbfbb274e730e5a0236f619b6168d9dedb3e282', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation-contracts', 'aliases' => array(), 'dev_requirement' => false), 'symfony/translation-implementation' => array('dev_requirement' => false, 'provided' => array(0 => '2.3|3.0')), 'voku/portable-ascii' => array('pretty_version' => '2.1.1', 'version' => '2.1.1.0', 'reference' => '8e1051fe39379367aecf014f41744ce7539a856f', 'type' => 'library', 'install_path' => __DIR__ . '/../voku/portable-ascii', 'aliases' => array(), 'dev_requirement' => false)));
+return array('root' => array('name' => '__root__', 'pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '429d6f0ad844d8c4f706eb7ab4c49250438d4c61', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => false), 'versions' => array('__root__' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '429d6f0ad844d8c4f706eb7ab4c49250438d4c61', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => false), 'andrewmead/wordpress-proper' => array('pretty_version' => '4.0.1', 'version' => '4.0.1.0', 'reference' => '8253fd2ba493e5597e28820ed249ce0462c13488', 'type' => 'library', 'install_path' => __DIR__ . '/../andrewmead/wordpress-proper', 'aliases' => array(), 'dev_requirement' => false), 'brick/math' => array('pretty_version' => '0.11.0', 'version' => '0.11.0.0', 'reference' => '0ad82ce168c82ba30d1c01ec86116ab52f589478', 'type' => 'library', 'install_path' => __DIR__ . '/../brick/math', 'aliases' => array(), 'dev_requirement' => false), 'carbonphp/carbon-doctrine-types' => array('pretty_version' => '2.1.0', 'version' => '2.1.0.0', 'reference' => '99f76ffa36cce3b70a4a6abce41dba15ca2e84cb', 'type' => 'library', 'install_path' => __DIR__ . '/../carbonphp/carbon-doctrine-types', 'aliases' => array(), 'dev_requirement' => false), 'doctrine/inflector' => array('pretty_version' => '2.1.0', 'version' => '2.1.0.0', 'reference' => '6d6c96277ea252fc1304627204c3d5e6e15faa3b', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/inflector', 'aliases' => array(), 'dev_requirement' => false), 'eftec/bladeone' => array('pretty_version' => '4.19.1', 'version' => '4.19.1.0', 'reference' => 'a22f6471c01c26fea5f6a0d0aca9b5674fc999be', 'type' => 'library', 'install_path' => __DIR__ . '/../eftec/bladeone', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/collections' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => 'd3710b0b244bfc62c288c1a87eaa62dd28352d1f', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/collections', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/conditionable' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => 'bea24daa0fa84b7e7b0d5b84f62c71b7e2dc3364', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/conditionable', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/container' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => '1641dda2d0750b68bb1264a3b37ff3973f2e6265', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/container', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/contracts' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => '44f65d723b13823baa02ff69751a5948bde60c22', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/contracts', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/database' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => '93cfc8e1f9ac147e6a2851ecabe8d8f21ad85182', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/database', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/macroable' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => 'e3bfaf6401742a9c6abca61b9b10e998e5b6449a', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/macroable', 'aliases' => array(), 'dev_requirement' => false), 'illuminate/support' => array('pretty_version' => 'v9.52.16', 'version' => '9.52.16.0', 'reference' => '223c608dbca27232df6213f776bfe7bdeec24874', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/support', 'aliases' => array(), 'dev_requirement' => false), 'league/csv' => array('pretty_version' => '9.8.0', 'version' => '9.8.0.0', 'reference' => '9d2e0265c5d90f5dd601bc65ff717e05cec19b47', 'type' => 'library', 'install_path' => __DIR__ . '/../league/csv', 'aliases' => array(), 'dev_requirement' => false), 'league/uri' => array('pretty_version' => '6.7.2', 'version' => '6.7.2.0', 'reference' => 'd3b50812dd51f3fbf176344cc2981db03d10fe06', 'type' => 'library', 'install_path' => __DIR__ . '/../league/uri', 'aliases' => array(), 'dev_requirement' => false), 'league/uri-interfaces' => array('pretty_version' => '2.3.0', 'version' => '2.3.0.0', 'reference' => '00e7e2943f76d8cb50c7dfdc2f6dee356e15e383', 'type' => 'library', 'install_path' => __DIR__ . '/../league/uri-interfaces', 'aliases' => array(), 'dev_requirement' => false), 'matomo/device-detector' => array('pretty_version' => '6.5.1', 'version' => '6.5.1.0', 'reference' => 'f30457500c6be4c80c8830466f8a746724779fd0', 'type' => 'library', 'install_path' => __DIR__ . '/../matomo/device-detector', 'aliases' => array(), 'dev_requirement' => false), 'maxmind-db/reader' => array('pretty_version' => 'v1.13.1', 'version' => '1.13.1.0', 'reference' => '2194f58d0f024ce923e685cdf92af3daf9951908', 'type' => 'library', 'install_path' => __DIR__ . '/../maxmind-db/reader', 'aliases' => array(), 'dev_requirement' => false), 'mlocati/ip-lib' => array('pretty_version' => '1.22.0', 'version' => '1.22.0.0', 'reference' => '4e40ffd3bf9989db19403d89c4d8be44b87b8a91', 'type' => 'library', 'install_path' => __DIR__ . '/../mlocati/ip-lib', 'aliases' => array(), 'dev_requirement' => false), 'mustangostang/spyc' => array('pretty_version' => '0.6.3', 'version' => '0.6.3.0', 'reference' => '4627c838b16550b666d15aeae1e5289dd5b77da0', 'type' => 'library', 'install_path' => __DIR__ . '/../mustangostang/spyc', 'aliases' => array(), 'dev_requirement' => false), 'nesbot/carbon' => array('pretty_version' => '2.73.0', 'version' => '2.73.0.0', 'reference' => '9228ce90e1035ff2f0db84b40ec2e023ed802075', 'type' => 'library', 'install_path' => __DIR__ . '/../nesbot/carbon', 'aliases' => array(), 'dev_requirement' => false), 'piwik/device-detector' => array('dev_requirement' => false, 'replaced' => array(0 => '6.5.1')), 'psr/clock' => array('pretty_version' => '1.0.0', 'version' => '1.0.0.0', 'reference' => 'e41a24703d4560fd0acb709162f73b8adfc3aa0d', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/clock', 'aliases' => array(), 'dev_requirement' => false), 'psr/clock-implementation' => array('dev_requirement' => false, 'provided' => array(0 => '1.0')), 'psr/container' => array('pretty_version' => '2.0.2', 'version' => '2.0.2.0', 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => false), 'psr/container-implementation' => array('dev_requirement' => false, 'provided' => array(0 => '1.1|2.0')), 'psr/http-message' => array('pretty_version' => '1.1', 'version' => '1.1.0.0', 'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), 'dev_requirement' => false), 'psr/log-implementation' => array('dev_requirement' => false, 'provided' => array(0 => '1.0|2.0|3.0')), 'psr/simple-cache' => array('pretty_version' => '3.0.0', 'version' => '3.0.0.0', 'reference' => '764e0b3939f5ca87cb904f570ef9be2d78a07865', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/simple-cache', 'aliases' => array(), 'dev_requirement' => false), 'symfony/console' => array('pretty_version' => 'v6.0.19', 'version' => '6.0.19.0', 'reference' => 'c3ebc83d031b71c39da318ca8b7a07ecc67507ed', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), 'dev_requirement' => false), 'symfony/polyfill-ctype' => array('pretty_version' => 'v1.37.0', 'version' => '1.37.0.0', 'reference' => '141046a8f9477948ff284fa65be2095baafb94f2', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', 'aliases' => array(), 'dev_requirement' => false), 'symfony/polyfill-intl-grapheme' => array('pretty_version' => 'v1.38.1', 'version' => '1.38.1.0', 'reference' => 'e9247d281d694a5120554d9afaf54e070e88a603', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme', 'aliases' => array(), 'dev_requirement' => false), 'symfony/polyfill-intl-normalizer' => array('pretty_version' => 'v1.38.0', 'version' => '1.38.0.0', 'reference' => '2d446c214bdbe5b71bde5011b060a05fece3ae6b', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', 'aliases' => array(), 'dev_requirement' => false), 'symfony/polyfill-mbstring' => array('pretty_version' => 'v1.38.2', 'version' => '1.38.2.0', 'reference' => 'd3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => false), 'symfony/polyfill-php80' => array('pretty_version' => 'v1.37.0', 'version' => '1.37.0.0', 'reference' => 'dfb55726c3a76ea3b6459fcfda1ec2d80a682411', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), 'dev_requirement' => false), 'symfony/service-contracts' => array('pretty_version' => 'v3.0.2', 'version' => '3.0.2.0', 'reference' => 'd78d39c1599bd1188b8e26bb341da52c3c6d8a66', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), 'dev_requirement' => false), 'symfony/string' => array('pretty_version' => 'v6.0.19', 'version' => '6.0.19.0', 'reference' => 'd9e72497367c23e08bf94176d2be45b00a9d232a', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/string', 'aliases' => array(), 'dev_requirement' => false), 'symfony/translation' => array('pretty_version' => 'v6.0.19', 'version' => '6.0.19.0', 'reference' => '9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation', 'aliases' => array(), 'dev_requirement' => false), 'symfony/translation-contracts' => array('pretty_version' => 'v3.0.2', 'version' => '3.0.2.0', 'reference' => 'acbfbb274e730e5a0236f619b6168d9dedb3e282', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation-contracts', 'aliases' => array(), 'dev_requirement' => false), 'symfony/translation-implementation' => array('dev_requirement' => false, 'provided' => array(0 => '2.3|3.0')), 'voku/portable-ascii' => array('pretty_version' => '2.1.1', 'version' => '2.1.1.0', 'reference' => '8e1051fe39379367aecf014f41744ce7539a856f', 'type' => 'library', 'install_path' => __DIR__ . '/../voku/portable-ascii', 'aliases' => array(), 'dev_requirement' => false)));
--- a/independent-analytics/views/date-picker/calendar-month.blade.php
+++ b/independent-analytics/views/date-picker/calendar-month.blade.php
@@ -15,7 +15,7 @@
</button>
</div>
<div class="iawp-day-names">
- <?php echo wp_kses_post($month->days_of_week()); ?>
+ <?php echo IAWPUtilsSecurity::span_tags_only($month->days_of_week()); ?>
</div>
<div class="iawp-days"><?php
for ($i = 0; $i < $month->extra_cells(); $i++) {
--- a/independent-analytics/views/journeys/timeline.blade.php
+++ b/independent-analytics/views/journeys/timeline.blade.php
@@ -55,7 +55,7 @@
<?php endif; ?>
<span class="timeline-event-label"><?php echo esc_html($event->label()); ?></span>
<div class="timeline-event-contents">
- <?php echo wp_kses_post($event->html()); ?>
+ <?php echo IAWPUtilsSecurity::user_journey_event_contents($event->html()); ?>
</div>
</div>
<?php endforeach; ?>
@@ -74,7 +74,7 @@
<div class="journey-timeline-event <?php echo esc_attr($event->type()); ?>">
<span class="timeline-event-label"><?php echo esc_html($event->label()); ?></span>
<div class="timeline-event-contents">
- <?php echo wp_kses_post($event->html()); ?>
+ <?php echo IAWPUtilsSecurity::user_journey_event_contents($event->html()); ?>
</div>
</div>
<?php endforeach; ?>
--- a/independent-analytics/views/notices/notice.blade.php
+++ b/independent-analytics/views/notices/notice.blade.php
@@ -7,9 +7,9 @@
</div>
<div class="iawp-message">
<?php if ($plugin == 'minify-html-markup') : ?>
- <p><span class="iawp-message-text"><?php echo wp_kses_post($notice_text); ?></span></p>
+ <p><span class="iawp-message-text"><?php echo esc_html($notice_text); ?></span></p>
<?php else : ?>
- <p><span class="iawp-message-text"><?php echo wp_kses_post($notice_text); ?></span> <a href="<?php echo esc_url($url); ?>" class="link-white" target="_blank"><?php esc_html_e('Learn More', 'independent-analytics'); ?></a></p>
+ <p><span class="iawp-message-text"><?php echo esc_html($notice_text); ?></span> <a href="<?php echo esc_url($url); ?>" class="link-white" target="_blank"><?php esc_html_e('Learn More', 'independent-analytics'); ?></a></p>
<?php endif; ?>
</div>
<?php if ($button_text) : ?>
--- a/independent-analytics/views/settings/email-reports.blade.php
+++ b/independent-analytics/views/settings/email-reports.blade.php
@@ -16,7 +16,7 @@
<?php if($is_scheduled): ?>
<div id="next-email" class="schedule-notification is-scheduled" data-timestamp="<?php echo absint($timestamp); ?>">
<span class="dashicons dashicons-yes-alt"></span>
- <p><?php echo wp_kses_post($scheduled_date); ?></p>
+ <p><?php echo IAWPUtilsSecurity::strong_tags_only($scheduled_date); ?></p>
<button class="iawp-button" type="button" data-controller="pause-emails" data-action="pause-emails#pause"><?php esc_html_e('Pause Emails', 'independent-analytics'); ?></button>
</div>
<?php elseif($is_paused): ?>
@@ -28,7 +28,7 @@
<?php else: ?>
<div id="next-email" class="schedule-notification is-not-scheduled">
<span class="dashicons dashicons-dismiss"></span>
- <p><?php echo wp_kses_post($scheduled_date); ?></p>
+ <p><?php echo IAWPUtilsSecurity::strong_tags_only($scheduled_date); ?></p>
</div>
<?php endif; ?>
<div class="delivery-interval iawp-section">
--- a/independent-analytics/views/settings/pruner.blade.php
+++ b/independent-analytics/views/settings/pruner.blade.php
@@ -16,7 +16,7 @@
<p><?php
$status_message = $pruner->status_message();
if (!is_null($status_message)) {
- echo wp_kses_post($status_message);
+ echo IAWPUtilsSecurity::strong_tags_only($status_message);
} ?>
</p>
</div>
--- a/independent-analytics/views/tables/rows.blade.php
+++ b/independent-analytics/views/tables/rows.blade.php
@@ -68,7 +68,7 @@
<span class="dashicons dashicons-search"></span>
</button>
</div>
- <span class="cell-content"><?php echo wp_kses_post($table->get_cell_content($row, $column)); ?></span>
+ <span class="cell-content"><?php echo IAWPUtilsSecurity::table_cell_content($table->get_cell_content($row, $column)); ?></span>
<span class="animator"></span>
</div><?php
endforeach; ?>
--- a/independent-analytics/views/woocommerce-order-meta-box.blade.php
+++ b/independent-analytics/views/woocommerce-order-meta-box.blade.php
@@ -20,7 +20,7 @@
<?php endif; ?>
<p class="iawp-referrer-box-title"><?php esc_html_e('Landing Page', 'independent-analytics'); ?></p>
-<p class="iawp-referrer-box-value" data-testid="landing-page"><a href="<?php echo $record->initial_page_url ?>" target="_blank"><?php echo $record->initial_page_title ?></a></p>
+<p class="iawp-referrer-box-value" data-testid="landing-page"><a href="<?php echo esc_url($record->initial_page_url); ?>" target="_blank"><?php echo esc_html($record->initial_page_title); ?></a></p>
<p class="iawp-referrer-box-title"><?php esc_html_e('Pages viewed', 'independent-analytics'); ?></p>
<p class="iawp-referrer-box-value" data-testid="pages-viewed"><?php echo $record->total_views ?></p>