id; } if ( 'tools_page_nsc-3rd-party-request-manager' === $current_screen_id ) { wp_enqueue_style( 'NSC3PPM_bootstrap5', NSC3PPM_PLUGIN_URL . 'admin/assets/css/bootstrap.min.css', array(), '5.3.0' ); wp_enqueue_style( 'NSC3PPM_custom_css', NSC3PPM_PLUGIN_URL . 'admin/assets/css/nsc3ppm.css', array(), NSC3PPM_PLUGIN_VERSION ); wp_enqueue_script( 'NSC3PPM_bootstrap5', NSC3PPM_PLUGIN_URL . 'admin/assets/js/bootstrap.bundle.min.js', array(), '5.3.0', true ); } } public function add_admin_menu() { add_management_page( '3rd Party Request Manager', '3rd Party Request Manager', 'manage_options', 'nsc-3rd-party-request-manager', array( $this, 'render_plugin_page' ) ); } /** * Renders the main plugin page with tabs. * Only the content for the active tab is loaded. */ public function render_plugin_page() { $active_tab = $this->get_url_parameter( 'tab', 'summary' ); ?>

3rd Party Request Manager

enabled'; $disabled_pill = 'disabled'; $logging_3rd_party = empty( get_option( 'nsc3ppm_monitoring_enabled', '0' ) ) ? $disabled_pill : $enabled_pill; $blocking_csp = empty( get_option( 'nsc3ppm_enable_csp_rules', '0' ) ) ? $disabled_pill : $enabled_pill; ?>
Logging 3rd Party Requests settings
Blocking Hostnames by CSP settings
render_admin_summary_page(); } elseif ( 'intercepts' === $active_tab ) { $this->render_admin_page(); } elseif ( 'settings' === $active_tab ) { $this->render_settings_page(); } elseif ( 'block-setttings' === $active_tab ) { $this->render_block_settings_page(); } else { echo '

Invalid tab.

'; } ?>
get_url_parameter( 'paged', 1 ) > 1 ? max( 1, intval( $this->get_url_parameter( 'paged', 1 ) ) ) : 1; $sld_filter = $this->get_url_parameter( 'sld', '' ); $orderby = $this->get_url_parameter( 'orderby', 'intercepted_at' ); $order = $this->get_url_parameter( 'order', 'DESC' ); $allowed_orderby = array( 'id', 'original_url', 'hostname', 'hostname', 'page_url', 'method', 'type', 'intercepted_at' ); if ( in_array( $orderby, $allowed_orderby, true ) === false ) { $orderby = 'intercepted_at'; } if ( 'ASC' !== $order ) { $order = 'DESC'; } $where = ''; if ( ! empty( $sld_filter ) ) { $where = $wpdb->prepare( 'WHERE hostname = %s', $sld_filter ); echo ''; } // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching $total = $wpdb->get_var( 'SELECT COUNT(*) FROM ' . esc_sql( $wpdb->prefix ) . 'nsc3ppm_intercepts ' . $where ); $offset = ( $paged - 1 ) * $per_page; // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching $results = $wpdb->get_results( 'SELECT * FROM ' . esc_sql( $wpdb->prefix ) . "nsc3ppm_intercepts $where ORDER BY $orderby $order LIMIT $offset, $per_page" ); ?>

Detected 3rd Party Requests

Show all requests

nsc3ppm_sort_link( 'id', 'ID' ) ); ?> nsc3ppm_sort_link( 'original_url', 'Original URL' ) ); ?> nsc3ppm_sort_link( 'hostname', 'Hostname' ) ); ?> nsc3ppm_sort_link( 'second_level_domain', 'Second-Level Domain' ) ); ?> nsc3ppm_sort_link( 'page_url', 'Page URL' ) ); ?> nsc3ppm_sort_link( 'method', 'Method' ) ); ?> nsc3ppm_sort_link( 'type', 'Type' ) ); ?> nsc3ppm_sort_link( 'intercepted_at', 'Intercepted At' ) ); ?>
id ); ?> original_url ); ?> hostname ); ?> second_level_domain ); ?> page_url ); ?> method ); ?> type ); ?> intercepted_at ); ?>
No intercepted requests found.
add_query_arg( 'paged', '%#%' ), 'format' => '', 'current' => $paged, 'total' => ceil( $total / $per_page ), 'prev_text' => __( '«', '3rd-party-request-manager' ), 'next_text' => __( '»', '3rd-party-request-manager' ), ) ); if ( $pagination ) { echo wp_kses_post( '' ); } ?> get_url_parameter( 'paged', 1 ) > 1 ? max( 1, intval( $this->get_url_parameter( 'paged', 1 ) ) ) : 1; $orderby = $this->get_url_parameter( 'orderby', 'count_7_days' ); $order = $this->get_url_parameter( 'order', 'DESC' ); $allowed_orderby = array( 'hostname', 'count_1_hour', 'count_24_hours', 'count_7_days', 'first_detected', 'last_detected' ); if ( in_array( $orderby, $allowed_orderby, true ) === false ) { $orderby = 'count_7_days'; } if ( 'ASC' !== $order ) { $order = 'DESC'; } // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.DirectDatabaseQuery.DirectQuery $total = $wpdb->get_var( "SELECT COUNT(DISTINCT hostname) FROM {$wpdb->prefix}nsc3ppm_intercepts" ); $offset = ( $paged - 1 ) * $per_page; $query = "SELECT hostname, MIN(intercepted_at) AS first_detected, MAX(intercepted_at) AS last_detected, SUM(CASE WHEN intercepted_at >= DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN 1 ELSE 0 END) AS count_1_hour, SUM(CASE WHEN intercepted_at >= DATE_SUB(NOW(), INTERVAL 24 HOUR) THEN 1 ELSE 0 END) AS count_24_hours, SUM(CASE WHEN intercepted_at >= DATE_SUB(NOW(), INTERVAL 7 DAY) THEN 1 ELSE 0 END) AS count_7_days FROM {$wpdb->prefix}nsc3ppm_intercepts GROUP BY hostname ORDER BY {$orderby} {$order} LIMIT %d, %d"; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.PreparedSQL.NotPrepared $summary = $wpdb->get_results( $wpdb->prepare( $query, array( $offset, $per_page ) ) ); ?>

Detected 3rd Party Domains

hostname ) ) ) ); ?>
nsc3ppm_summary_sort_link( 'hostname', 'Hostname' ) ); ?> nsc3ppm_summary_sort_link( 'count_1_hour', 'Requests (Last 1 Hour)' ) ); ?> nsc3ppm_summary_sort_link( 'count_24_hours', 'Requests (Last 24 Hours)' ) ); ?> nsc3ppm_summary_sort_link( 'count_7_days', 'Requests (Last 7 Days)' ) ); ?> nsc3ppm_summary_sort_link( 'first_detected', 'First Detected' ) ); ?> nsc3ppm_summary_sort_link( 'last_detected', 'Last Detected' ) ); ?>
hostname ); ?> count_1_hour ); ?> count_24_hours ); ?> count_7_days ); ?> first_detected ); ?> last_detected ); ?>
No data available.
add_query_arg( 'paged', '%#%' ), 'format' => '', 'current' => $paged, 'total' => ceil( $total / $per_page ), 'prev_text' => __( '«', '3rd-party-request-manager' ), 'next_text' => __( '»', '3rd-party-request-manager' ), ) ); if ( $pagination ) { echo wp_kses_post( '' ); } ?>
get_url_parameter( 'orderby', '' ); $current_order = $this->get_url_parameter( 'order', 'DESC' ); $new_order = 'ASC'; if ( $current_orderby === $column && 'ASC' === $current_order ) { $new_order = 'DESC'; } $url = add_query_arg( array( 'orderby' => $column, 'order' => $new_order, ) ); return '' . esc_html( $label ) . ''; } private function nsc3ppm_sort_link( $column, $label ) { $current_orderby = $this->get_url_parameter( 'orderby', '' ); $current_order = $this->get_url_parameter( 'order', 'DESC' ); $new_order = 'ASC'; if ( $current_orderby === $column && 'ASC' === $current_order ) { $new_order = 'DESC'; } $url = add_query_arg( array( 'orderby' => $column, 'order' => $new_order, ) ); return '' . esc_html( $label ) . ''; } private function get_url_parameter( string $key, string $default_value ) { $param_value = $default_value; if ( isset( $_GET['_wpnonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['_wpnonce'] ) ) ) ) { $param_value = isset( $_GET[ $key ] ) ? sanitize_text_field( wp_unslash( $_GET[ $key ] ) ) : $default_value; } return $param_value; } }