
Comprendiendo el Problema
La inyección SOQL es una vulnerabilidad de seguridad. Permite a un atacante inyectar código SOQL malicioso. Esto puede comprometer la integridad de los datos.
Primero, necesitamos entender como ocurre. Un atacante manipula las entradas de la aplicación. Estas entradas son usadas para construir consultas SOQL. Si no se valida la entrada, se puede inyectar código malicioso.
Finalmente, examinaremos un ejemplo común. Una búsqueda basada en la entrada del usuario. Esta entrada se usa directamente en una consulta SOQL.
Must Read
Dividiendo el Problema
Dividiremos el problema en tres partes. Uno, identificar puntos de entrada de datos. Dos, sanitizar las entradas. Tres, usar SOQL seguro.
Los puntos de entrada son campos donde el usuario ingresa datos. Esto incluye campos de texto, listas desplegables y otros controles de formulario. Se debe analizar cada punto de entrada.
Sanitizar las entradas implica limpiar los datos ingresados. Esto remueve caracteres especiales. También valida el tipo de dato.
El uso de SOQL seguro es fundamental. Esto implica usar enlaces SOQL. También usar la API de SOQL de forma correcta.

Identificando Puntos de Entrada
Identificamos todos los lugares donde el usuario ingresa datos. Esto incluye formularios, campos de búsqueda y APIs. Cada punto de entrada representa un riesgo potencial.
Analizamos el código. Buscamos variables que reciben datos del usuario. Estas variables se utilizan en consultas SOQL.
Documentamos cada punto de entrada. Indicamos el tipo de dato esperado. También identificamos el propósito de la entrada.
Sanitizando las Entradas
Sanitizamos los datos del usuario. Esto previene la inyección de código malicioso. Usamos funciones de limpieza para cada tipo de dato.

Para cadenas, escapamos los caracteres especiales. Esto incluye comillas simples y dobles. Usamos funciones específicas de Apex para el escape.
Para números, validamos que sea un número. Podemos usar expresiones regulares. También podemos usar funciones de conversión de tipo.
Para fechas, validamos el formato. Convertimos la fecha a un formato estándar. Esto previene errores y manipulación.
Usando SOQL Seguro
Usamos enlaces SOQL. Estos enlazan variables a la consulta. Esto previene la inyección de código malicioso.

No concatenamos cadenas directamente en la consulta. Usamos el operador : para enlazar las variables. Esto es crucial para la seguridad.
Ejemplo: String accountName = '%'+ userInput +'%'; String query = 'SELECT Id, Name FROM Account WHERE Name LIKE :accountName';
Usamos la API de SOQL de forma correcta. Evitamos construcciones dinámicas peligrosas. Usamos las clases y métodos provistos por Salesforce.
Evitamos el uso de Database.query() con cadenas construidas dinámicamente. Usamos enlaces en su lugar. Esta función puede ser vulnerable si no se usa correctamente.

Combinando Resultados
Identificamos todos los puntos de entrada. Sanitizamos los datos en cada punto. Usamos SOQL seguro en todas las consultas.
Probamos la aplicación. Intentamos inyectar código malicioso. Verificamos que la sanitización funcione.
Monitoreamos la aplicación. Buscamos patrones sospechosos. Usamos las herramientas de seguridad de Salesforce.
La combinación de estos pasos proporciona una defensa sólida. Previene ataques de inyección SOQL. Protege los datos de la organización.
Recuerda, la seguridad es un proceso continuo. Revisamos el código periódicamente. Actualizamos las medidas de seguridad según sea necesario.