diff --git a/.github/workflows/php-tests.yml b/.github/workflows/php-tests.yml index 8e60dfaa..cab9113e 100644 --- a/.github/workflows/php-tests.yml +++ b/.github/workflows/php-tests.yml @@ -394,95 +394,45 @@ jobs: run: | python -m pip install semgrep - - name: Semgrep Scan Controllers + - name: Semgrep Scan run: | - # Escanear específicamente los Controllers - echo "=== Iniciando Análisis de Controllers ===" - - # Crear directorio para resultados - mkdir -p scan_results - - # Escaneo general de seguridad - semgrep scan \ - --config "p/security-audit" \ - --config "p/owasp-top-ten" \ - --config "p/php" \ - --include "src/Controllers/*.php" \ - --json > scan_results/general_scan.json - - # Análisis por controller - for controller in ContactController ProductController SearchController UserController; do - echo "Analizando $controller..." - semgrep scan "src/Controllers/${controller}.php" \ - --config "p/php" \ - --config "p/security-audit" \ - --json > "scan_results/${controller}_analysis.json" - done - - # Procesar resultados - { - # Contar hallazgos por controller - echo "TOTAL_FINDINGS=$(jq '.results | length' scan_results/general_scan.json)" - - for controller in ContactController ProductController SearchController UserController; do - findings=$(jq '.results | length' "scan_results/${controller}_analysis.json") - echo "${controller}_FINDINGS=$findings" - - # Extraer detalles - echo "${controller}_DETAILS< scan_output_verbose.txt 2>&1 - # Extraer patrones de seguridad - echo "SECURITY_PATTERNS<> $GITHUB_ENV - - - name: Show Analysis Summary + - name: Process and Show Semgrep Results run: | - echo "=== Resumen del Análisis ===" - echo "Total Controllers: $TOTAL_CONTROLLERS" - echo "Total Hallazgos: $TOTAL_FINDINGS" - echo "Total Líneas: $TOTAL_LINES" + # Función para limpiar números + clean_number() { + echo "$1" | tr -dc '0-9' || echo '0' + } - echo "\n=== Hallazgos por Controller ===" - echo "ContactController: $ContactController_FINDINGS" - echo "ProductController: $ProductController_FINDINGS" - echo "SearchController: $SearchController_FINDINGS" - echo "UserController: $UserController_FINDINGS" + echo "=== MOSTRANDO DATOS OBTENIDOS ===" - echo "\n=== Patrones de Seguridad ===" - echo "$SECURITY_PATTERNS" + echo "--- Contenido del archivo scan_output_verbose.txt ---" + cat scan_output_verbose.txt - echo "\n=== Métricas de Código ===" - echo "$CODE_METRICS" + echo "\n--- Datos Extraídos ---" + echo "Reglas cargadas: $(grep "loaded rules:" scan_output_verbose.txt)" + echo "Archivos en scope: $(grep "files in scope:" scan_output_verbose.txt)" + echo "Hallazgos totales: $(grep "findings:" scan_output_verbose.txt)" + + echo "\n--- Datos por Lenguaje ---" + echo "PHP: $(grep -A 10 'Scan Status' scan_output_verbose.txt | grep 'php')" + echo "HTML: $(grep -A 10 'Scan Status' scan_output_verbose.txt | grep 'html')" + echo "JavaScript: $(grep -A 10 'Scan Status' scan_output_verbose.txt | grep 'javascript')" + echo "YAML: $(grep -A 10 'Scan Status' scan_output_verbose.txt | grep 'yaml')" + echo "JSON: $(grep -A 10 'Scan Status' scan_output_verbose.txt | grep 'json')" + echo "Dockerfile: $(grep -A 10 'Scan Status' scan_output_verbose.txt | grep 'dockerfile')" + + echo "\n--- Datos de Severidad ---" + echo "Alta: $(grep -A 5 'Findings by Severity' scan_output_verbose.txt | grep 'error')" + echo "Media: $(grep -A 5 'Findings by Severity' scan_output_verbose.txt | grep 'warning')" + echo "Baja: $(grep -A 5 'Findings by Severity' scan_output_verbose.txt | grep 'info')" + + echo "\n--- Reglas Ejecutadas ---" + echo "$(grep 'Rules run:' scan_output_verbose.txt)" + + echo "\n=== FIN DE LOS DATOS ===" - name: Create Semgrep HTML Report run: | @@ -491,7 +441,7 @@ jobs: - Análisis de Seguridad - Controllers + Análisis Semgrep
-

Análisis de Seguridad - Controllers

- +

Análisis de Seguridad con Semgrep

+

Resumen General

-
Total Controllers
-
$TOTAL_CONTROLLERS
-
Archivos analizados
+
Total de Reglas
+
$TOTAL_RULES
+
Reglas disponibles
-
Total Hallazgos
-
$TOTAL_FINDINGS
-
Issues encontrados
+
Reglas Ejecutadas
+
$RULES_RUN
+
De $TOTAL_RULES reglas totales
-
Líneas de Código
-
$TOTAL_LINES
-
En Controllers
+
Total de Archivos
+
$TOTAL_FILES
+
Archivos analizados
-
- -

Análisis por Controller

- -
-

ContactController ($CONTACT_FINDINGS hallazgos)

-
- $CONTACT_DETAILS +
+
Total de Hallazgos
+
$TOTAL_FINDINGS
+
Problemas detectados
-
-

ProductController ($PRODUCT_FINDINGS hallazgos)

-
- $PRODUCT_DETAILS +

Severidades

+
+
+
Alta Severidad
+
$HIGH_SEVERITY
+
Requieren atención inmediata
-
- -
-

SearchController ($SEARCH_FINDINGS hallazgos)

-
- $SEARCH_DETAILS +
+
Media Severidad
+
$MEDIUM_SEVERITY
+
Problemas importantes
+
+
+
Baja Severidad
+
$LOW_SEVERITY
+
Sugerencias de mejora
-
-

UserController ($USER_FINDINGS hallazgos)

-
- $USER_DETAILS +

Archivos por Lenguaje

+
+
+
PHP
+
$PHP_FILES
+
Archivos analizados
+
+
+
HTML
+
$HTML_FILES
+
Archivos analizados
+
+
+
JavaScript
+
$JS_FILES
+
Archivos analizados
+
+
+
YAML
+
$YAML_FILES
+
Archivos analizados
+
+
+
JSON
+
$JSON_FILES
+
Archivos analizados
+
+
+
Dockerfile
+
$DOCKERFILE_FILES
+
Archivos analizados
-

Patrones de Seguridad Detectados

-
-
-
-
Password Hashing
-
$PASSWORD_HASH_COUNT
-
Implementaciones seguras
-
-
-
Prepared Statements
-
$PREPARED_STMT_COUNT
-
Protección SQL Injection
-
-
-
Error Logging
-
$ERROR_LOG_COUNT
-
Puntos de logging
-
-
-
Input Validation
-
$INPUT_VALIDATION_COUNT
-
Validaciones
+

Hallazgos Detallados

+
+
+
+ Alta + $RULE_ID
-
-
Session Management
-
$SESSION_MGMT_COUNT
-
Usos de sesión
+
$FILE_PATH:$LINE_NUMBER
+
$MESSAGE
+
+
$CODE_SNIPPET
+ +
-

Métricas de Código

-
-
$CODE_METRICS
+

Archivos Omitidos

+
+

Errores de Parsing

+
$PARSE_ERROR_FILES
+ +

Archivos Grandes (>1MB)

+
$LARGE_FILES
+ +

Archivos Ignorados

+
$IGNORED_FILES
@@ -667,8 +737,7 @@ jobs: " > public/semgrep/index.html - name: Install Snyk - run: | - python -m pip install snyk + run: npm install -g snyk - name: Run Snyk Analysis env: