#!/usr/bin/env php ══════════════════════════════════════════════════════════════════════ NETGO NOC — REPORTE DE AUDITORÍA DE SEGURIDAD Generado: 21/04/2026 04:02:51 Directorio: /home/noc/public_html/netgo ══════════════════════════════════════════════════════════════════════ ── VERIFICACIONES DE CONFIGURACIÓN ───────────────────────────────── .htaccess existe: ❌ NO — Se recomienda crearlo expose_php: ⚠️ (Ocultar versión de PHP — actual: 1) display_errors: ⚠️ (No mostrar errores en pantalla — actual: vacío) allow_url_include: ⚠️ (Bloquear include remoto (RFI) — actual: vacío) allow_url_fopen: ⚠️ (Bloquear apertura de URLs remotas — actual: 1) session.cookie_httponly: ⚠️ (Cookies de sesión con HttpOnly — actual: vacío) ── ARCHIVOS CON VULNERABILIDADES CRÍTICAS ─────────────────────────── 🔴 Cuadrillas.php L204 ❌ SQL con variable PHP concatenada directo en oci_parse() Código: $stmt = oci_parse($conn, "SELECT NVL(MAX(ID), 0) AS MAXID FROM $tabla"); L226 ❌ SQL con variable PHP concatenada directo en oci_parse() Código: $drop = oci_parse($conn, "DROP SEQUENCE $seq_name"); 🔴 Realizar_NOTAA.php L144 ❌ Ejecución de comandos del sistema con variable de usuario Código: $response = curl_exec($ch); 🔴 Solicitar_Codigo_Tecnico.php L140 ❌ Ejecución de comandos del sistema con variable de usuario Código: $response = curl_exec($ch); 🔴 api/aceptar_falla.php L52 ❌ SQL DML con concatenación directa de variable Código: $sql_update = "UPDATE FALLAS SET ESTADO='EN_PROCESO', ESTADO_ANTERIOR='PENDIENTE' WHERE ID=" . $falla_id; 🔴 api/check_notificaciones.php L58 ❌ SQL DML con concatenación directa de variable Código: $sql_update = "UPDATE NOTIFICACIONES_FALLAS SET LEIDA=1 WHERE ID IN (" . $ids_str . ")"; 🔴 audit_security.php L20 ❌ SQL con variable PHP concatenada directo en oci_parse() Código: 'ejemplo' => 'oci_parse($conn, "SELECT * WHERE id = $id")', L35 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: 'ejemplo' => 'eval($_POST["cmd"])', L40 ❌ Ejecución de comandos del sistema con variable de usuario Código: 'ejemplo' => 'system($_GET["cmd"])', L45 ❌ LFI/RFI: include/require con variable de usuario Código: 'ejemplo' => 'include($_GET["pagina"])', L50 ❌ Open Redirect: redirección con variable de usuario sin validar Código: 'ejemplo' => 'header("Location: " . $_GET["url"])', L55 ❌ SQL DML con concatenación directa de variable Código: 'ejemplo' => '$sql = "DELETE FROM t WHERE id = " . $id', 🔴 dashboard_tecnico.php L44 ❌ SQL con variable PHP concatenada directo en oci_parse() Código: $stmt = oci_parse($conn, "UPDATE solicitudes SET visto_respuesta = 1 WHERE id IN ($ids)"); 🔴 db_abstract.php L160 ❌ SQL con variable PHP concatenada directo en oci_parse() Código: $stmt = oci_parse($conn, "SELECT {$sequence_name}.CURRVAL FROM DUAL"); 🔴 recuperar_breadlab.php L87 ❌ SQL con variable PHP concatenada directo en oci_parse() Código: $stmtU = oci_parse($conn, "UPDATE USUARIOS SET CONTRASENA=:h WHERE ID=$user_id"); 🔴 vendor/brick/math/src/BigInteger.php L1002 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: assert($bin !== false); 🔴 vendor/brick/math/src/BigNumber.php L67 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: assert($value instanceof static); L105 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: assert($numerator !== null); L106 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: assert($denominator !== null); 🔴 vendor/brick/math/src/Internal/Calculator/NativeCalculator.php L397 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: assert($carry === 0); 🔴 vendor/dompdf/dompdf/src/Adapter/CPDF.php L907 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: eval($callback); 🔴 vendor/dompdf/dompdf/src/Adapter/PDFLib.php L1326 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: eval($callback); 🔴 vendor/dompdf/dompdf/src/Helpers.php L1093 ❌ Ejecución de comandos del sistema con variable de usuario Código: $data = curl_exec($curl); 🔴 vendor/dompdf/dompdf/src/PhpEvaluator.php L52 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: eval($code); 🔴 vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php L44 ❌ Ejecución de comandos del sistema con variable de usuario Código: \curl_exec($easy->handle); 🔴 vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php L175 ❌ Ejecución de comandos del sistema con variable de usuario Código: while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM) { L188 ❌ Ejecución de comandos del sistema con variable de usuario Código: if (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM) { 🔴 vendor/minishlink/web-push/src/WebPush.php L245 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: \assert($notification instanceof Notification); 🔴 vendor/phpmailer/phpmailer/src/PHPMailer.php L876 ❌ Ejecución de comandos del sistema con variable de usuario Código: private function mailPassthru($to, $subject, $body, $header, $params) L1829 ❌ Ejecución de comandos del sistema con variable de usuario Código: $mail = @popen($sendmail, 'w'); L1855 ❌ Ejecución de comandos del sistema con variable de usuario Código: $mail = @popen($sendmail, 'w'); L2012 ❌ Ejecución de comandos del sistema con variable de usuario Código: $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params); L2026 ❌ Ejecución de comandos del sistema con variable de usuario Código: $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params); 🔴 vendor/phpoffice/phpword/src/PhpWord/Shared/PCLZip/pclzip.lib.php L2547 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);'); L2694 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: // eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);'); L3531 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); L3748 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); L3868 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); L3934 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); L3979 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); L4046 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); 🔴 vendor/web-token/jwt-library/KeyManagement/KeyConverter/KeyConverter.php L387 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: assert($key instanceof RSASSAPSSPrivateKey); 🔴 vendor/web-token/jwt-library/KeyManagement/UrlKeySetFactory.php L62 ❌ Ejecución de código arbitrario (eval/assert/preg_replace /e) Código: assert($this->client instanceof HttpClientInterface); ── ARCHIVOS CON ADVERTENCIAS MEDIAS ───────────────────────────────── 🟡 Actualizar_estado.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Agreg_Despacho_Rural.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Agregar_Sitios.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Agregar_Tecnico.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Cambio_Informacion.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Coordenadas_Noc.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Detalles_Cambio_Informacion.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Editar_Despacho_Rural.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Enviar_Cambio_Informacion.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Enviar_Reporte_Accidente.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Enviar_Solicitud_Plataforma.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Generar_Despacho_Rural.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Generar_Horario.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Manuales_procesos.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); L32 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: isset($_FILES['archivo']) && L38 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $archivo = $_FILES['archivo']; 🟡 Mejoras.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Plataformas_Externas.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Quejas.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_AU.php L7 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Codigo_Tecnico.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Custodia.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Custodiaprotec.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_NOTAESPECIAL.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_RDA.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_REQ.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_SDA.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_SITE.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_ADMI.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_BreadLab.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_Calidad.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_IT.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_Maple.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_O&MT1.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_O&MT2.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_OT.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_Plataforma.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_Proyectos.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_RF.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_Solicitud_RRHH.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Realizar_validacion.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Reportes_Netgo.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Responder_Solicitud_Plataforma.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); L39 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (isset($_FILES['archivo_respuesta']) && $_FILES['archivo_respuesta']['error'] === UPLOAD_ERR_OK) { L40 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $nombre_archivo = basename($_FILES['archivo_respuesta']['name']); L44 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (move_uploaded_file($_FILES['archivo_respuesta']['tmp_name'], $ruta_destino)) { 🟡 Responder_solicitud_cambio.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Solicitar_Programacion_MP.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); L90 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['tipo'], $_FILES['archivo'])) { L94 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $ext = strtolower(pathinfo($_FILES['archivo']['name'], PATHINFO_EXTENSION)); L99 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: } elseif ($_FILES['archivo']['error'] !== UPLOAD_ERR_OK) { L100 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $mensaje_error = "❌ Error al subir el archivo. Código: " . $_FILES['archivo']['error']; L104 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $nombre_orig = $_FILES['archivo']['name']; L109 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (move_uploaded_file($_FILES['archivo']['tmp_name'], $destino)) { 🟡 Solicitud_Acceso.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Solicitudes_Pendientes.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Solicitudes_RealizadasNoc.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 SubirReportes_Netgo.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); L23 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['archivo'])) { L25 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $archivo = $_FILES['archivo']; 🟡 Subir_programacion_MP.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); L62 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: } elseif (empty($_FILES['archivo_excel']['name']) || $_FILES['archivo_excel']['error'] !== UPLOAD_ERR_OK) { L65 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $xl = $_FILES['archivo_excel']; L82 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (!empty($_FILES['archivos_word']['name'][0])) { L83 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: foreach ($_FILES['archivos_word']['name'] as $i => $wname) { L84 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if ($_FILES['archivos_word']['error'][$i] !== UPLOAD_ERR_OK) continue; L90 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (move_uploaded_file($_FILES['archivos_word']['tmp_name'][$i], $wruta)) { 🟡 Subir_reporte_accidente.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); L19 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (isset($_FILES["archivo"]) && $_FILES["archivo"]["error"] === 0) { L20 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $archivo_tmp = $_FILES["archivo"]["tmp_name"]; L21 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $archivo_nombre = basename($_FILES["archivo"]["name"]); 🟡 Usuarios_contraseñas.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Validar_Personal.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); L92 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (isset($_FILES['imagenes']['name']) && is_array($_FILES['imagenes']['name'])) { L93 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $total = min(count($_FILES['imagenes']['name']), 20); L95 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if ($_FILES['imagenes']['error'][$i] !== UPLOAD_ERR_OK) continue; L96 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if ($_FILES['imagenes']['size'][$i] === 0) continue; L97 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $nombre_original = $_FILES['imagenes']['name'][$i]; L101 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (move_uploaded_file($_FILES['imagenes']['tmp_name'][$i], $destino)) { L111 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (isset($_FILES['pdfs']['name']) && is_array($_FILES['pdfs']['name'])) { L112 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $total = min(count($_FILES['pdfs']['name']), 5); L114 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if ($_FILES['pdfs']['error'][$i] !== UPLOAD_ERR_OK) continue; L115 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if ($_FILES['pdfs']['size'][$i] === 0) continue; L116 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $nombre_original = $_FILES['pdfs']['name'][$i]; L120 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (move_uploaded_file($_FILES['pdfs']['tmp_name'][$i], $destino)) { 🟡 Ver_Despachos_Rural.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Ver_Reporte_Accidente.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 Ver_solicitudes_u.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 accesos_mes.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 accidentes_reporte.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 acciones_tecnicos.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 agregar_vehiculos.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/asignar_falla.php L7 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/check_nuevos_avances.php L6 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/debug_imagenes.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/enviar_avance_completo.php L6 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); L79 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (!empty($_FILES['evidencias'])) { L88 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $files = $_FILES['evidencias']; 🟡 api/enviar_avance_noc.php L6 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/enviar_avance_rapido.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/enviar_avance_tecnico.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/enviar_imagen.php L7 ⚠️ error_reporting(E_ALL) activo — no mostrar errores en producción Código: error_reporting(E_ALL); L11 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); L68 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (!empty($_FILES['evidencias']['name'])) $file_key = 'evidencias'; L69 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: if (!empty($_FILES['evidencias[]']['name'])) $file_key = 'evidencias[]'; L78 ⚠️ Carga de archivos — verificar validación de extensión y tipo MIME Código: $f = $_FILES[$file_key]; 🟡 api/enviar_rda.php L7 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/exportar_historial.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/exportar_historial_excel.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/exportar_historial_pdf.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/generar_pdf_avances.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/generar_plantilla_whatsapp.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_asignaciones_tecnico.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_avances_falla.php L9 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_avances_noc.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_cuadrillas.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_falla_by_id.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_falla_detalles.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_fallas.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_fallas_rechazadas.php L2 ⚠️ error_reporting(E_ALL) activo — no mostrar errores en producción Código: error_reporting(E_ALL); L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_fallas_stats.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_fallos_resueltos_hoy.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_history.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_ruta_cuadrilla.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_site_by_id.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_sites.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/get_sites_tecnico.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/marcar_resuelta.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/reasignar_falla.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/rechazar_falla.php L2 ⚠️ error_reporting(E_ALL) activo — no mostrar errores en producción Código: error_reporting(E_ALL); L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/search_sites.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/solicitar_avance.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 api/update_cuadrilla_location.php L5 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 au_llegada_salida.php L7 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 boton_panico.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 boton_panico_tecnicos.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 breadlab_coord_ajax.php L7 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 breadlab_tickets_ajax.php L7 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 buscar_personal_vw.php L8 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 buscar_rir.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 buscar_sitenoc.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 buscar_sitios.php L19 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 buscar_sitios_coubicados.php L26 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 buscar_tecnicos.php L14 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 buscar_ticket_bodega.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 buscar_usuarios_tecnicos.php L9 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 buscar_vehiculos.php L8 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 buscar_vehiculos_solicitudes.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 busqueda_ajax.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 busqueda_realizadas_ajax.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 cambiar_estado_codigo.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 central_control.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 check_estado_panico_tecnicos.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 check_notifications.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 check_notifications_coordinador.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 check_nuevas_solicitudes.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 check_nuevos_tickets_guardia.php L6 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 configurar_biometria.php L7 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 consolidado_tecnicos.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 coordinador_breadlab.php L8 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 crear_horario_noc.php L2 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 crear_solicitud_personalizada.php L3 ⚠️ INFO: Usa sesiones — verificar session_regenerate_id() tras login Código: session_start(); 🟡 crear_usuario.php L11 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: // ── Helper CSRF ──────────────────────────────── L12 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: function csrf_token(): string { L13 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: if (empty($_SESSION['csrf_token'])) { L14 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); L16 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: return $_SESSION['csrf_token']; L18 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: function csrf_check(): void { L19 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: $token = $_POST['csrf_token'] ?? $_GET['csrf_token'] ?? ''; L20 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: if (!hash_equals($_SESSION['csrf_token'] ?? '', $token)) { L88 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: csrf_check(); L149 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: if (isset($_GET['toggle_activo']) && isset($_GET['csrf_token'])) { L150 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: csrf_check(); L192 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: csrf_check(); L473 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: L474 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: L599 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: $csrfToken = csrf_token(); L625 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: L635 ⚠️ INFO: Archivo menciona CSRF (verificar que esté implementado) Código: