Tema representativo de entrevista

¿Cómo prevenir problemas de seguridad relacionados con texto bidireccional de Unicode y caracteres confusibles?

GeneralDifícil
Equipo editorial de Offer.ccPublicado Actualizado

Pregunta

Una revisión de código, un nombre de usuario o la visualización de un dominio contienen texto Unicode que se ve igual pero es diferente en el almacenamiento. Explica el algoritmo bidireccional y la detección de confusibles, y luego diseña un flujo de mitigación auditable.

Prompt y contexto

Una herramienta de revisión de código, un sistema de cuentas o la visualización de un dominio reciben caracteres visualmente similares, o controles bidireccionales que alteran el orden de lectura. Explica la diferencia entre el orden lógico y el de visualización, distingue la detección de confusibles de la aplicación de políticas, y diseña un flujo que preserve el texto multilingüe legítimo.

Qué evalúa el entrevistador

  • Si entiendes que el algoritmo bidireccional de Unicode cambia el orden de presentación mientras que el orden lógico de los puntos de código se mantiene intacto.
  • Si puedes distinguir entre anulaciones (overrides), aislamientos (isolates), escrituras mixtas y detección de confusibles.
  • Si sabes que el esqueleto (skeleton) de UTS #39 es un valor intermedio que no debe mostrarse ni reutilizarse entre distintas versiones de Unicode.
  • Si la validación de entrada, la presentación, la auditoría, la comparación de autorización y las actualizaciones se diseñan como responsabilidades separadas.

Preguntas de clarificación para hacer

Primero identifica si el campo es código fuente, un identificador de inicio de sesión, un dominio internacionalizado, texto de búsqueda o prosa ordinaria. Confirma las escrituras permitidas, los idiomas de destino y el soporte de visualización. Luego pregunta si un hallazgo bloquea, requiere revisión, genera una advertencia o solo se registra en logs. Confirma la versión de los datos de Unicode, la retención del texto original y la tasa aceptable de falsos positivos.

Respuesta de 30 segundos

El texto Unicode tiene un orden lógico y un orden de visualización. UAX #9 reordena la presentación a partir de propiedades direccionales, pero los controles bidi no modifican la comparación, el parseo ni el análisis numérico. La política de seguridad debe restringir los controles peligrosos y utilizar UTS #39 para comprobaciones de escritura y de confusibles. Un esqueleto es una clave de comparación intermedia versionada, no texto para mostrar. Conserva el original, adjunta diagnósticos versionados, bloquea o revisa identificadores de alto riesgo, y utiliza las reglas de comparación exacta del protocolo del campo para la autorización.

Análisis detallado paso a paso

1. Separar el orden lógico del orden de visualización

Cuando el árabe o el hebreo se mezclan con dígitos, UAX #9 calcula el orden de visualización a partir de tipos direccionales fuertes, débiles y neutros. Las anulaciones como RLO y LRO fuerzan la dirección, mientras que los aislamientos limitan cómo un segmento interno afecta a su entorno. La renderización no reescribe la secuencia de puntos de código en memoria y no debe convertirse en una regla de parseo o comparación.

2. Identificar el riesgo de controles bidi y escrituras mixtas

Los identificadores estructurados como código fuente, nombres de archivo y nombres de cuenta rara vez necesitan controles direccionales arbitrarios. La capa de entrada puede rechazar o marcar caracteres Bidi_Control; la capa de visualización puede mostrar escapes o límites explícitos. La política de escrituras mixtas debe seguir el conjunto de idiomas permitido por el negocio, no tratar cada carácter que no sea ASCII como malicioso.

3. Aplicar detección de confusibles versionada

UTS #39 proporciona datos de confusibles y mecanismos de esqueletos para comprobaciones de confusibilidad visual. La confusibilidad depende de las fuentes, las escrituras y el contexto; no es una relación de equivalencia absoluta. Almacena el original, la versión de Unicode, el análisis de escritura y el hallazgo. Recalcula después de las actualizaciones de datos y revisa las nuevas colisiones, mientras que la autorización continúa utilizando la regla de comparación exacta del protocolo.

Respuesta de ejemplo de alta calidad

Comenzaría clasificando el riesgo del campo. Para identificadores estructurados como código fuente, nombres de usuario y dominios, conservaría el original y restringiría las escrituras y los controles direccionales; la prosa multilingüe ordinaria debería mantener su disposición bidireccional legítima. UAX #9 determina el orden de visualización, mientras que los controles bidi no deben alterar el parseo, la comparación ni el análisis numérico, por lo que una herramienta de auditoría debería mostrar tanto el orden lógico de los puntos de código como la salida renderizada. La detección combinaría los niveles de restricción de UTS #39, las reglas de escritura mixta y los datos de confusibles. Un esqueleto es una clave intermedia para una sola versión de datos de Unicode: no es texto para mostrar ni un identificador permanente entre versiones. RLO, una mezcla inusual de escrituras o una colisión con un identificador de alto riesgo existente deberían bloquear o requerir revisión; la prosa ordinaria puede generar una advertencia. La comparación y la autorización deben usar las reglas de normalización, mayúsculas/minúsculas y codificación del protocolo del campo en lugar de la similitud visual. En una actualización de datos de Unicode, recalcula los hallazgos en lote y revisa las colisiones para que el cambio sea rastreable y reversible.

Errores comunes

  • Tratar el orden de visualización como el orden de la cadena almacenada.
  • Afirmar que eliminar todos los caracteres de derecha a izquierda resuelve el problema, rompiendo texto legítimo en árabe o hebreo.
  • Tratar un esqueleto como un hash estable, un valor de visualización o un campo de protocolo entre versiones.
  • Comprobar únicamente ASCII e ignorar fuentes, escrituras, marcas de combinación y contexto.
  • Usar la similitud visual para autorización, firmas o unicidad en lugar de la regla de comparación exacta del campo.

Preguntas de seguimiento y respuestas

¿Por qué no eliminar los controles bidi de todas las entradas?

Pueden facilitar el engaño, pero los documentos y el diseño legítimos pueden requerir controles direccionales. Elige bloquear, escapar, aislar o advertir según el riesgo del campo y la plataforma de destino, y conserva evidencia auditable.

¿Puede un esqueleto convertirse directamente en el nombre de usuario?

No. Es una forma de detección intermedia y cambia con los datos de Unicode. Conserva el original y la clave de comparación definida por el protocolo; usa el esqueleto para el diagnóstico de colisiones o la revisión.

¿Cómo reducir los falsos positivos en datos multilingües?

Define conjuntos permitidos de idiomas y escrituras, y luego combina datos de idioma de CLDR, el contexto del campo y la revisión humana. Emite advertencias en prosa ordinaria, mientras aplicas restricciones más estrictas a identificadores de inicio de sesión, dominios e identificadores de código.

Fuentes públicas

Preguntas relacionadas