diff --git a/extras/MySQL_AST_CREATE_tables.sql b/extras/MySQL_AST_CREATE_tables.sql index f9739785..aeaffe8d 100644 --- a/extras/MySQL_AST_CREATE_tables.sql +++ b/extras/MySQL_AST_CREATE_tables.sql @@ -4584,6 +4584,7 @@ length_in_sec INT(10), visibility ENUM('VISIBLE','HIDDEN','LOGIN','NONE') default 'NONE', agent_log_id INT(9) UNSIGNED, index (db_time), +index (agent_log_id), unique index visibleuser (user, visibility, event_end_epoch) ) ENGINE=MyISAM; @@ -5022,4 +5023,4 @@ INSERT INTO vicidial_settings_containers(container_id,container_notes,container_ UPDATE system_settings set vdc_agent_api_active='1'; -UPDATE system_settings SET db_schema_version='1642',db_schema_update_date=NOW(),reload_timestamp=NOW(); +UPDATE system_settings SET db_schema_version='1643',db_schema_update_date=NOW(),reload_timestamp=NOW(); diff --git a/extras/upgrade_2.14.sql b/extras/upgrade_2.14.sql index b2ff16ed..3333febb 100644 --- a/extras/upgrade_2.14.sql +++ b/extras/upgrade_2.14.sql @@ -1809,3 +1809,7 @@ ALTER TABLE vicidial_peer_event_log MODIFY channel_type ENUM('IAX2','SIP','PJSIP ALTER TABLE system_settings ADD allowed_sip_stacks ENUM('SIP','PJSIP','SIP_and_PJSIP') default 'SIP'; UPDATE system_settings SET db_schema_version='1642',db_schema_update_date=NOW() where db_schema_version < 1642; + +CREATE INDEX vavl_agent_log_id on vicidial_agent_visibility_log (agent_log_id); + +UPDATE system_settings SET db_schema_version='1643',db_schema_update_date=NOW() where db_schema_version < 1643; diff --git a/www/vicidial/AST_inbound_forecasting.php b/www/vicidial/AST_inbound_forecasting.php index 5ffd0114..750f0d8f 100644 --- a/www/vicidial/AST_inbound_forecasting.php +++ b/www/vicidial/AST_inbound_forecasting.php @@ -12,6 +12,7 @@ # 180507-2315 - Added new help display # 180712-1508 - Fix for rare allowed reports issue # 191013-0856 - Fixes for PHP7 +# 210823-0948 - Fix for security issue, added NONE option for campaigns # $startMS = microtime(); @@ -404,12 +405,30 @@ $MT[0]=''; $NOW_DATE = date("Y-m-d"); $NOW_TIME = date("Y-m-d H:i:s"); $STARTtime = date("U"); -if (!isset($group)) {$group = array();} +if (!isset($group) || !is_array($group)) {$group = array();} if (!isset($drop_percent)) {$drop_percent = '3';} -if (!isset($campaign)) {$campaign = array();} +if (!isset($campaign) || !is_array($campaign)) {$campaign = array();} if (!isset($query_date)) {$query_date = $NOW_DATE;} if (!isset($end_date)) {$end_date = $NOW_DATE;} +$group=preg_replace('/[^-_0-9\p{L}]/u','',$group); +$campaign=preg_replace('/[^-_0-9\p{L}]/u','',$campaign); +$query_date = preg_replace('/[^-0-9]/','',$query_date); +$end_date = preg_replace('/[^-0-9]/','',$end_date); +$shift=preg_replace('/[^\p{L}]/u', '', $shift); +$erlang_type=preg_replace('/[^\p{L}]/u', '', $erlang_type); +$actual_agents=preg_replace("/[^0-9.]/", "", $actual_agents); +$hourly_pay=preg_replace("/[^0-9.]/", "", $hourly_pay); +$revenue_per_sale=preg_replace("/[^0-9.]/", "", $revenue_per_sale); +$sale_chance=preg_replace("/[^0-9.]/", "", $sale_chance); +$retry_rate=preg_replace("/[^0-9.]/", "", $retry_rate); +$target_pqueue=preg_replace("/[^0-9.]/", "", $target_pqueue); +$DB = preg_replace('/[^0-9]/','',$DB); +$submit=preg_replace('/[^-_0-9\p{L}]/u','',$submit); +$SUBMIT=preg_replace('/[^-_0-9\p{L}]/u','',$SUBMIT); +$file_download = preg_replace('/[^0-9]/','',$file_download); +$report_display_type=preg_replace('/[^_\p{L}]/u','',$report_display_type); + $drop_percent=preg_replace("/[^\.0-9]/", "", $drop_percent); if ($drop_percent>100) {$drop_percent=100;} $drop_rate=$drop_percent/100; @@ -434,7 +453,7 @@ while($i < $group_ct) } $i++; } -if ( (preg_match('/\s\-\-NONE\-\-\s/',$group_string) ) or ($group_ct < 1) ) +if ( (preg_match('/\-\-NONE\-\-/',$group_string) ) or ($group_ct < 1) ) { $group_SQL = "''"; } @@ -463,7 +482,7 @@ while($i < $campaign_ct) } $i++; } -if ( (preg_match('/\s\-\-NONE\-\-\s/',$campaign_string) ) or ($campaign_ct < 1) ) +if ( (preg_match('/\-\-NONE\-\-/',$campaign_string) ) or ($campaign_ct < 1) ) { $campaign_SQL = "''"; } @@ -581,6 +600,7 @@ $MAIN.="\n"; $MAIN.="\n"; +$MAIN.="\n"; $o=0; while ($groups_to_print > $o) @@ -676,12 +697,12 @@ else $campaign_string=preg_replace("/^\||\|$/", "", $campaign_string); $group_string=preg_replace("/^\||\|$/", "", $group_string); - $ASCII_text =" Date range : $query_date to $end_date\n"; + $ASCII_text =" Date range : $query_date to $end_date ($groups_selected==0 && $campaigns_selected==0)\n"; $ASCII_text.=" Campaigns : ".preg_replace("/\|/", ", ", $campaign_string)."\n"; $ASCII_text.=" In-groups : ".preg_replace("/\|/", ", ", $group_string)."\n\n"; # $ASCII_text.=" Report type: $erlang_type\n\n"; - $HTML_text.=" Date range : $query_date to $end_date\n"; + $HTML_text.=" Date range : $query_date to $end_date ($groups_selected==0 && $campaigns_selected==0)\n"; $HTML_text.=" Campaigns : ".preg_replace("/\|/", ", ", $campaign_string)."\n"; $HTML_text.=" In-groups : ".preg_replace("/\|/", ", ", $group_string).""; # $HTML_text.=" Report type: $erlang_type\n\n"; diff --git a/www/vicidial/AST_quality_control_report.php b/www/vicidial/AST_quality_control_report.php index 77472301..f61549e4 100644 --- a/www/vicidial/AST_quality_control_report.php +++ b/www/vicidial/AST_quality_control_report.php @@ -7,6 +7,7 @@ # # changes: # 210306-1556 - First Build +# 210827-1818 - Fix for security issue # $admin_version = '2.14-1'; @@ -60,6 +61,8 @@ if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];} elseif (isset($_POST["SUBMIT"])) {$SUBMIT=$_POST["SUBMIT"];} if (isset($_GET["show_percentages"])) {$show_percentages=$_GET["show_percentages"];} elseif (isset($_POST["show_percentages"])) {$show_percentages=$_POST["show_percentages"];} +if (isset($_GET["search_archived_data"])) {$search_archived_data=$_GET["search_archived_data"];} + elseif (isset($_POST["search_archived_data"])) {$search_archived_data=$_POST["search_archived_data"];} if (isset($_GET["file_download"])) {$file_download=$_GET["file_download"];} elseif (isset($_POST["file_download"])) {$file_download=$_POST["file_download"];} @@ -298,13 +301,13 @@ $MT[0]=''; $NOW_DATE = date("Y-m-d"); $NOW_TIME = date("Y-m-d H:i:s"); $STARTtime = date("U"); -if (!isset($group)) {$group = array();} -if (!isset($statuses)) {$statuses = array();} -if (!isset($users)) {$users = array();} -if (!isset($user_groups)) {$user_groups = array();} -if (!isset($QCusers)) {$QCusers = array();} -if (!isset($QCstatuses)) {$QCstatuses = array();} -if (!isset($QCuser_groups)) {$QCuser_groups = array();} +if (!isset($group) || !is_array($group)) {$group = array();} +if (!isset($statuses) || !is_array($statuses)) {$statuses = array();} +if (!isset($users) || !is_array($users)) {$users = array();} +if (!isset($user_groups) || !is_array($user_groups)) {$user_groups = array();} +if (!isset($QCusers) || !is_array($QCusers)) {$QCusers = array();} +if (!isset($QCstatuses) || !is_array($QCstatuses)) {$QCstatuses = array();} +if (!isset($QCuser_groups) || !is_array($QCuser_groups)) {$QCuser_groups = array();} if (!isset($query_date)) {$query_date = $NOW_DATE;} if (!isset($end_date)) {$end_date = $NOW_DATE;} if (!isset($query_time)) {$query_time = "00:00:00";} @@ -316,6 +319,29 @@ if (!isset($end_time)) {$end_time = "23:59:59";} $all_QC_statuses=array("CLAIMED", "FINISHED"); $QC_statuses_to_print=count($all_QC_statuses); +$group=preg_replace('/[^-_0-9\p{L}]/u','',$group); +$campaign=preg_replace('/[^-_0-9\p{L}]/u','',$campaign); +$query_date = preg_replace('/[^-0-9]/','',$query_date); +$end_date = preg_replace('/[^-0-9]/','',$end_date); +$query_time=preg_replace("/[^0-9\:]/", "", $query_time); +$end_time=preg_replace("/[^0-9\:]/", "", $end_time); +$qc_finish_start_date = preg_replace('/[^-0-9]/','',$qc_finish_start_date); +$qc_finish_end_date = preg_replace('/[^-0-9]/','',$qc_finish_end_date); +$qc_finish_start_time=preg_replace("/[^0-9\:]/", "", $qc_finish_start_time); +$qc_finish_end_time=preg_replace("/[^0-9\:]/", "", $qc_finish_end_time); + +$users=preg_replace('/[^-_0-9\p{L}]/u','',$users); +$user_groups=preg_replace('/[^-_0-9\p{L}]/u','',$user_groups); +$statuses=preg_replace('/[^-_0-9\p{L}]/u','',$statuses); +$QCusers=preg_replace('/[^-_0-9\p{L}]/u','',$QCusers); +$QCuser_groups=preg_replace('/[^-_0-9\p{L}]/u','',$QCuser_groups); +$QCstatuses=preg_replace('/[^-_0-9\p{L}]/u','',$QCstatuses); +$DB = preg_replace('/[^0-9]/','',$DB); +$SUBMIT=preg_replace('/[^-_0-9\p{L}]/u','',$SUBMIT); +$show_percentages=preg_replace('/[^-_0-9\p{L}]/u','',$show_percentages); +$file_download = preg_replace('/[^0-9]/','',$file_download); + + $i=0; $campaign_string='|'; $campaigns_ct = count($group); diff --git a/www/vicidial/AST_rt_whiteboard_rpt.php b/www/vicidial/AST_rt_whiteboard_rpt.php index c7f13477..eac1968c 100644 --- a/www/vicidial/AST_rt_whiteboard_rpt.php +++ b/www/vicidial/AST_rt_whiteboard_rpt.php @@ -10,6 +10,7 @@ # 180507-2315 - Added new help display # 180512-0000 - Fixed slave server capability # 190927-1758 - Fixed PHP7 array issue +# 210827-1818 - Fix for security issue # $startMS = microtime(); @@ -55,6 +56,21 @@ if (isset($_GET["DB"])) {$DB=$_GET["DB"];} if (isset($_GET["report_display_type"])) {$report_display_type=$_GET["report_display_type"];} elseif (isset($_POST["report_display_type"])) {$report_display_type=$_POST["report_display_type"];} +$query_date = preg_replace('/[^-0-9]/','',$query_date); +$end_date = preg_replace('/[^-0-9]/','',$end_date); +$query_time=preg_replace("/[^0-9\:]/", "", $query_time); +$end_time=preg_replace("/[^0-9\:]/", "", $end_time); +$campaigns=preg_replace('/[^-_0-9\p{L}]/u','',$campaigns); +$users=preg_replace('/[^-_0-9\p{L}]/u','',$users); +$user_groups=preg_replace('/[^-_0-9\p{L}]/u','',$user_groups); +$groups=preg_replace('/[^-_0-9\p{L}]/u','',$groups); +$dids=preg_replace('/[^-_0-9\p{L}]/u','',$dids); +$file_download = preg_replace('/[^0-9]/','',$file_download); +$submit=preg_replace('/[^-_0-9\p{L}]/u','',$submit); +$SUBMIT=preg_replace('/[^-_0-9\p{L}]/u','',$SUBMIT); +$DB = preg_replace('/[^0-9]/','',$DB); +$report_display_type=preg_replace('/[^_\p{L}]/u','',$report_display_type); + if (!$query_date) {$query_date=date("Y-m-d");} if (!$end_date) {$end_date=date("Y-m-d");} if (!$query_time) {$query_time="08:00:00";} diff --git a/www/vicidial/AST_rt_whiteboard_rpt_mobile.php b/www/vicidial/AST_rt_whiteboard_rpt_mobile.php index 7fddf88f..a4dc6a08 100644 --- a/www/vicidial/AST_rt_whiteboard_rpt_mobile.php +++ b/www/vicidial/AST_rt_whiteboard_rpt_mobile.php @@ -7,6 +7,7 @@ # # 190227-1259 - Initial build # 200309-1819 - Modifications for display formatting +# 210827-1818 - Fix for security issue # $startMS = microtime(); @@ -52,6 +53,21 @@ if (isset($_GET["DB"])) {$DB=$_GET["DB"];} if (isset($_GET["report_display_type"])) {$report_display_type=$_GET["report_display_type"];} elseif (isset($_POST["report_display_type"])) {$report_display_type=$_POST["report_display_type"];} +$query_date = preg_replace('/[^-0-9]/','',$query_date); +$end_date = preg_replace('/[^-0-9]/','',$end_date); +$query_time=preg_replace("/[^0-9\:]/", "", $query_time); +$end_time=preg_replace("/[^0-9\:]/", "", $end_time); +$campaigns=preg_replace('/[^-_0-9\p{L}]/u','',$campaigns); +$users=preg_replace('/[^-_0-9\p{L}]/u','',$users); +$user_groups=preg_replace('/[^-_0-9\p{L}]/u','',$user_groups); +$groups=preg_replace('/[^-_0-9\p{L}]/u','',$groups); +$dids=preg_replace('/[^-_0-9\p{L}]/u','',$dids); +$file_download = preg_replace('/[^0-9]/','',$file_download); +$submit=preg_replace('/[^-_0-9\p{L}]/u','',$submit); +$SUBMIT=preg_replace('/[^-_0-9\p{L}]/u','',$SUBMIT); +$DB = preg_replace('/[^0-9]/','',$DB); +$report_display_type=preg_replace('/[^_\p{L}]/u','',$report_display_type); + if (!$query_date) {$query_date=date("Y-m-d");} if (!$end_date) {$end_date=date("Y-m-d");} if (!$query_time) {$query_time="08:00:00";} @@ -218,7 +234,7 @@ if ( (!preg_match('/\-\-ALL\-\-/i', $LOGadmin_viewable_call_times)) and (strlen( $NOW_DATE = date("Y-m-d"); $NOW_TIME = date("Y-m-d H:i:s"); $STARTtime = date("U"); -if (!isset($groups)) {$groups = array();} +if (!isset($groups) || !is_array($groups)) {$groups = array();} if (!isset($query_date)) {$query_date = $NOW_DATE;} if (!isset($end_date)) {$end_date = $NOW_DATE;} diff --git a/www/vicidial/agent_sales_report_mobile.php b/www/vicidial/agent_sales_report_mobile.php index b72b0feb..21370aa6 100644 --- a/www/vicidial/agent_sales_report_mobile.php +++ b/www/vicidial/agent_sales_report_mobile.php @@ -32,8 +32,6 @@ if (isset($_GET["call_status"])) {$call_status=$_GET["call_status"];} elseif (isset($_POST["call_status"])) {$call_status=$_POST["call_status"];} if (isset($_GET["user_group"])) {$user_group=$_GET["user_group"];} elseif (isset($_POST["user_group"])) {$user_group=$_POST["user_group"];} -if (isset($_GET["file_download"])) {$file_download=$_GET["file_download"];} - elseif (isset($_POST["file_download"])) {$file_download=$_POST["file_download"];} if (isset($_GET["DB"])) {$DB=$_GET["DB"];} elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];} @@ -50,6 +48,19 @@ if (isset($_GET["refresh_rate"])) {$refresh_rate=$_GET["refresh_rate"];} elseif (isset($_POST["refresh_rate"])) {$refresh_rate=$_POST["refresh_rate"];} +$DB = preg_replace('/[^0-9]/','',$DB); +$end_date_D = preg_replace('/[^-0-9]/','',$end_date_D); +$end_date_T = preg_replace('/[^0-9\:]/','',$end_date_T); +$query_date_D = preg_replace('/[^-0-9]/','',$query_date_D); +$query_date_T = preg_replace('/[^0-9\:]/','',$query_date_T); +$refresh_rate = preg_replace('/[^0-9]/','',$refresh_rate); +$top_agents = preg_replace('/[^0-9]/','',$top_agents); +$graph_type=preg_replace('/[^_0-9\p{L}]/u','',$graph_type); +$report_display_type=preg_replace('/[^_\p{L}]/u','',$report_display_type); +$sort_by=preg_replace('/[^\p{L}]/u','',$sort_by); +$SUBMIT=preg_replace('/[^\p{L}]/u','',$SUBMIT); + + $report_name = 'Agent Sales Report'; $db_source = 'M'; $JS_text.="