¿Por qué es necesario involucrar la compilación en el proceso de inspección del código?

Este artículo se comparte desde la comunidad de la nube de Huawei  "¿Por qué es necesario involucrar la compilación en el proceso de inspección del código?" " , autor: gentle_zhou.

A medida que todo el mundo presta cada vez más atención a la seguridad del software, la protección de la seguridad del código fuente durante la etapa de codificación también es mencionada cada vez con más frecuencia por los equipos de I+D, pruebas, operación y mantenimiento y los desarrolladores individuales de empresas de todos los ámbitos de la vida, entre otros. donde sobresale especialmente la herramienta SAST de inspección de código estático.

El servicio de inspección de código SAST es una herramienta que puede verificar la calidad (incluido el estilo), la seguridad, las especificaciones y otros aspectos del código fuente. Puede detectar defectos y riesgos en el código. Como todos usan la herramienta en profundidad, muchos amigos se sienten confundidos durante el proceso de uso: ¿no aceptaron verificar solo el código fuente? ¿Por qué está involucrada la compilación? ¿Por qué la compilación tiene éxito en mi entorno local, pero cuando la coloco en el entorno de la nube dice que la compilación falló?

Este artículo intenta explicar los problemas anteriores uno por uno para que los amigos puedan comprender el proceso y los principios.

1. ¿No aceptaste verificar solo el código fuente? ¿Por qué está involucrada la compilación?

En términos generales, sí, la inspección de código estático SAST es una tecnología de prueba de seguridad de aplicaciones estáticas, que generalmente se realiza antes de que se compile el código; es decir, la herramienta SAST no fuerza la ejecución o ejecución del código antes de que pueda usarse. . Se dirige al código fuente en sí. Puede analizar la sintaxis, estructura, lógica, etc. del código.

Sin embargo, esto no significa que la herramienta SAST no tenga nada que ver con la compilación; de hecho, cuando sea necesario, la herramienta SAST también necesita usar herramientas de compilación y construcción para compilar el código y luego analizar el producto de compilación generado para analizar el semántica del código y lógica para tener una comprensión y análisis más profundos.

2. ¿Cuál es el proceso general de compilación?

Antes de hablar sobre el proceso de compilación, primero comprendamos algunos nombres propios.

AST, árbol de sintaxis abstracta, es una estructura de datos en forma de árbol que se utiliza para representar la estructura del código del programa y puede reflejar la sintaxis y la lógica del código. AST se puede utilizar en verificación de sintaxis, verificación de estilo de código, código formateado, resaltado de sintaxis, avisos de error, finalización automática, etc.

cke_114.png

IR, Representación Intermedia, es una estructura de datos utilizada para representar la semántica del código del programa y puede convertir códigos en diferentes lenguajes de programación en una forma común para facilitar el análisis y la optimización.

cke_115.png

CFG, Control Flow Graph, es una estructura de datos gráfica que se utiliza para representar el flujo de ejecución del código del programa. Puede dividir el código en bloques básicos y usar bordes para representar las relaciones de salto entre bloques básicos.

cke_116.png

Los tres sustantivos técnicos anteriores desempeñan un papel al permitir que las herramientas comprendan y procesen mejor la semántica y la lógica del código durante el proceso de inspección del código, lo que ayuda a mejorar la precisión del análisis.

Volvamos al punto, ¿qué procesos pasaremos durante el proceso de compilación de la herramienta de verificación de código SAST? En términos generales, el proceso de compilación completo pasará por: analizar el código fuente en busca de sintaxis, léxico y semántica, generar AST, luego convertir a IR, generar CFG, analizar y optimizar el flujo de datos y generar código de destino.

Por lo tanto, la inspección del código SAST no es completamente independiente de la compilación y, hasta cierto punto, debe depender de herramientas de compilación y construcción para ayudar a un análisis en profundidad.

3. ¿Por qué la compilación se realiza correctamente en mi entorno local pero falla cuando la coloco en el entorno de la nube?

En este punto, creo que la mayoría de los amigos entenderán que la operación de compilación se usa en la herramienta SAST, pero creo que todavía habrá escenas de escaneo fallido durante el uso. La más típica debe ser el problema en el subtítulo: ¿Por qué? ¿Mi compilación local tiene éxito, pero cuando la comprobo en el entorno de la nube, dice que la compilación falló?

En concreto, existen aproximadamente las siguientes razones:

  • Lo más común es que en el entorno local el proyecto haga referencia a algunas dependencias privadas o configuraciones almacenadas localmente. En el entorno de la nube, durante el proceso de compilación de SAST, estas dependencias o configuraciones no se pueden encontrar y la compilación falla.
  • El proyecto del usuario en sí no es un proyecto compilado o, aunque el proyecto es un proyecto compilado, no está configurado correctamente en el proyecto. Por ejemplo, un problema que se encuentra a menudo es que los usuarios simplemente se hacen cargo de un proyecto y obtienen la información de que es un proyecto compilado, pero en realidad el proyecto no contiene el archivo de configuración principal, por ejemplo, el archivo de configuración principal pom.xml es falta en el proyecto maven.
  • Los parámetros de compilación de verificación en la herramienta SAST en la nube no están seleccionados correctamente. Por ejemplo, el proyecto del usuario es un proyecto Maven, pero el usuario piensa erróneamente que es un proyecto Gradle y selecciona Gradle como herramienta de compilación en la nube. Para otro ejemplo, en el proyecto C#, para el proyecto de compilación msbuild, se seleccionó la versión incorrecta de .net framework (se seleccionó 3.5 en lugar de 4.8).
  • Hay algunos errores gramaticales o errores tipográficos (como errores ortográficos, puntos y coma faltantes, discrepancias de tipos, etc.) en el código del proyecto del usuario. En el entorno local, la ayuda del IDE los corrige automáticamente o el compilador local no los verifica. La herramienta SAST en la nube utiliza un compilador más estricto o de nivel superior, lo que provoca que la compilación falle.
  • Hay algunas características de lenguaje especiales o azúcar de sintaxis en el proyecto del usuario, como expresiones Lambda, listas por comprensión, etc. El compilador local admite estas características, mientras que la herramienta SAST en la nube utiliza un compilador que no admite estas características o una versión de idioma inferior. Provoca que la compilación falle.

Por supuesto, diferentes herramientas SAST utilizan diferentes métodos y tecnologías de escaneo, por lo que también tienen diferentes métodos de compilación y distintos grados de dependencia del entorno de compilación.

Referencias

1. https://en.wikipedia.org/wiki/Abstract_syntax_tree

2. https://www.twilio.com/blog/abstract-syntax-trees

3. https://www.cs.princeton.edu/courses/archive/spr03/cs320/notes/IR-trans1.pdf

4、https://gcc.gnu.org/onlinedocs/gccint/Control-Flow.html#: ~:text=Un gráfico de flujo de control (CFG) es un dato y el comportamiento de una función que se está compilando.

5, https://www.csl.cornell.edu/ ~zhiruz/5997/pdf/lecture04.pdf

 

Haga clic para seguir y conocer las nuevas tecnologías de Huawei Cloud lo antes posible ~

 

Multado con 200 yuanes y más de 1 millón de yuanes confiscados You Yuxi: La importancia de los documentos chinos de alta calidad El servidor de migración de núcleo duro de Musk Solon para JDK 21, ¡los hilos virtuales son increíbles! ! ! El control de congestión de TCP salva Internet Flutter para OpenHarmony está aquí El período LTS del kernel de Linux se restaurará de 6 años a 2 años Go 1.22 solucionará el error de la variable del bucle for Svelte construyó una "nueva rueda" - runas Google celebra su 25 aniversario
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/10114610
Recomendado
Clasificación