¡Bienvenido al tutorial Java de escaneo de código! Este tutorial lo llevará a través de cómo configurar GitHub Advanced Security: Code Scanning e interpretar los resultados que puede encontrar. El siguiente repositorio contiene vulnerabilidad de inyección SQL para fines de demostración.
El escaneo de código es una característica que utiliza para analizar el código en un repositorio de GitHub para encontrar vulnerabilidades de seguridad y errores de codificación. Cualquier problema identificado por el análisis se muestra en GitHub.
Puede usar Code Scanning con CodeQL, un motor de análisis de código semántico. CodeQL trata el código como datos, lo que le permite encontrar posibles vulnerabilidades en su código con mayor confianza que los analizadores estáticos tradicionales.
Este tutorial con análisis de código de uso con escaneo de código para buscar vulnerabilidades dentro de su código.
Comience creando un nuevo repositorio a partir de una bifurcación (pública) o clonando el repositorio.

Donde crear el repositorio bifurcado, asegúrese de
Haga clic en la pestaña Security .

Haga clic Set up code scanning .

Haga clic en la Setup this workflow mediante el análisis CodeQL.

Esto creará un archivo de flujo de trabajo de GitHub Actions con CodeQL ya configurado. Dado que Java es un lenguaje compilado, deberá configurar la construcción en pasos posteriores. Consulte la documentación si desea configurar el análisis CodeQL con un sistema CI de terceros en lugar de usar acciones de GitHub.
El archivo de flujo de trabajo de acciones contiene varias secciones diferentes que incluyen:

Haga clic en Start Commit -> Commit this file para comprometer los cambios a la rama principal .
Hay una serie de eventos que pueden desencadenar un flujo de trabajo de acciones de GitHub. En este ejemplo, el flujo de trabajo se activará en

Configurar el nuevo flujo de trabajo CodeQL y comprometerlo a la rama principal en el paso anterior activará el escaneo.
Haga clic en la pestaña Actions -> CodeQL
Haga clic en la ejecución de flujo de trabajo específico. Puede ver el progreso del flujo de trabajo ejecutado hasta que se complete el análisis.

Una vez que se haya completado el flujo de trabajo, haga clic en la pestaña Security -> Code Scanning Alerts . Debe visible una alerta de seguridad "consultada a partir de fuentes controladas por el usuario".
Al hacer clic en la alerta de seguridad proporcionará detalles sobre la alerta de seguridad que incluye:

Haga clic en Show more para ver una desciatura completa de la alerta, incluidos ejemplos y enlaces a información adicional.


El análisis CodeQL puede rastrear la ruta del flujo de datos de fuente a otro y le brinda la capacidad de ver la traversal de la ruta dentro de la alerta.
Haga clic en show paths para ver la ruta de flujo de datos que resultó en esta alerta.


Para corregir esta alerta específica, deberemos garantizar que los parámetros utilizados en la consulta SQL se validen y desinfecten.
Haga clic en la pestaña Code y edite el archivo IndexController.java en la carpeta de Controllers , reemplace el contenido con el archivo fixme .

Haga clic en Create a new branch for this commit and start a pull request , nombre la fix-sql-injection y cree la solicitud de extracción.
En la solicitud de extracción, notará que el análisis CodeQL ha comenzado como una verificación de estado. Espere hasta que se complete.

Después de que el flujo de trabajo se haya completado, haga clic en Details por los Code Scanning Results / CodeQL .

Observe que el escaneo de código ha detectado que esta solicitud de extracción solucionará la vulnerabilidad de inyección SQL que se detectó antes.

Fusionar la solicitud de extracción. Una vez que se haya fusionado la solicitud de extracción, otro flujo de trabajo comenzará para escanear el repositorio de cualquier vulnerabia.
Una vez que se haya completado el flujo de trabajo final, navegue de regreso a la pestaña Security y haga clic Closed . Observe que la consulta construida a partir de la alerta de seguridad de fuentes controladas por el usuario ahora aparece como un problema cerrado.

Haga clic en la alerta de seguridad y observe que detalla cuándo se hizo la solución, por quién y la confirmación específica. Esto proporciona una trazabilidad total para detallar cuándo y cómo se solucionó una alerta de seguridad y exactamente qué se cambió para remediar el problema.

Ahora que tenemos el análisis CodeQL de configuración y tenemos una alerta de seguridad, podemos intentar introducir una alerta en una solicitud de extracción.
Cree una nueva solicitud de extracción con la rama base como su rama main y la rama Compare como la rama new-feature .

Asegúrese de que la rama base esté configurada en su propia rama main de repositorios versus la rama main del repositorio original.
Una vez que se haya creado la solicitud de extracción, notará que el análisis CodeQL ha comenzado como una verificación de estado. Espere hasta que se complete.
Una vez que se haya completado el flujo de trabajo, la verificación de estado de Code Scanning Results / CodeQL habrá fallado. Observe que el escaneo de código ha detectado que esta solicitud de extracción introduce una nueva alerta de seguridad.

Directamente en la solicitud de extracción, notará que el bote de escaneo de código GitHub ha dejado una revisión de la solicitud de extracción con los detalles de alerta de seguridad. Esto ayudará a los desarrolladores a identificar rápidamente los problemas de seguridad introducidos en sus solicitudes de extracción.

Esto también permite la colaboración entre desarrolladores y equipos de seguridad para discutir la alerta de seguridad y cómo remediarla.

Haga clic en Show more details mediante la nueva Code Scanning Alert para saltar a la pestaña Security y ver los detalles de la alerta de seguridad.

Observe que la alerta de seguridad se encontró In pull request y no en la rama main (producción).
¿Listo para hablar sobre funciones de seguridad avanzadas para Github Enterprise? ¡Póngase en contacto con las ventas para más información!
Consulte la página de funciones de seguridad de GitHub para obtener más características de seguridad integradas en GitHub.
Consulte la documentación de escaneo de código para obtener opciones de configuración adicionales y detalles técnicos.