Delimitador


De Wikipedia, la enciclopedia libre
  (Redirigido desde Delimit )
Saltar a navegación Saltar a búsqueda
Una representación estilística de un fragmento de un archivo de texto con formato CSV . Las comas (que se muestran en rojo) se utilizan como delimitadores de campo.

Un delimitador es una secuencia de uno o más caracteres para especificar el límite entre regiones separadas e independientes en texto sin formato , expresiones matemáticas u otros flujos de datos . [1] [2] [3] Un ejemplo de delimitador es el carácter de coma , que actúa como un delimitador de campo en una secuencia de valores separados por comas . Otro ejemplo de un delimitador es el intervalo de tiempo utilizado para separar letras y palabras en la transmisión del código Morse .

En matemáticas , los delimitadores se utilizan a menudo para especificar el alcance de una operación y pueden aparecer como símbolos aislados (p. Ej., Dos puntos en " ") y como un par de símbolos de aspecto opuesto (p. Ej., Corchetes angulares en ). [1]

Los delimitadores representan uno de los diversos medios para especificar límites en un flujo de datos . La notación declarativa , por ejemplo, es un método alternativo que usa un campo de longitud al comienzo de un flujo de datos para especificar el número de caracteres que contiene el flujo de datos. [4]

Visión general

Los delimitadores pueden caracterizarse como delimitadores de campo y registro, o como delimitadores de corchetes.

Delimitadores de campo y registro

Los delimitadores de campo separan los campos de datos. Los delimitadores de registros separan grupos de campos. [5]

Por ejemplo, el formato de archivo CSV utiliza una coma como delimitador entre campos y un indicador de fin de línea como delimitador entre registros :

fname, lname, edad, salario
Nancy, davolio, 33, $ 30000
erin, borakova, 28, $ 25250
Tony, Rafael, 35, $ ​​28700

Esto especifica una tabla de base de datos de archivo plano simple utilizando el formato de archivo CSV.

Delimitadores de corchetes

Los delimitadores de corchetes, también denominados delimitadores de bloque, delimitadores de región o delimitadores equilibrados, marcan el inicio y el final de una región de texto. [6] [7]

Entre los ejemplos comunes de delimitadores de corchetes se incluyen: [8]

Convenciones

Históricamente, las plataformas informáticas han utilizado ciertos delimitadores por convención. [16] [17] Las siguientes tablas muestran algunos ejemplos para comparar.

Lenguajes de programación ( Ver también , Comparación de lenguajes de programación (sintaxis) ).

Delimitadores de campo y registro ( consulte también , ASCII , carácter de control ).

Colisión de delimitadores

La colisión de delimitadores es un problema que ocurre cuando un autor o programador introduce delimitadores en el texto sin tener la intención de que se interpreten como límites entre regiones separadas. [5] [19] En el caso de XML, por ejemplo, esto puede ocurrir siempre que un autor intente especificar un carácter de corchete angular .

En la mayoría de los tipos de archivos hay un delimitador de campo y un delimitador de registro, los cuales están sujetos a colisiones. En el caso de archivos de valores separados por comas , por ejemplo, la colisión de campos puede ocurrir siempre que un autor intente incluir una coma como parte de un valor de campo (p. Ej., Salario = "$ 30,000"), y la colisión de delimitadores de registros ocurriría siempre que un campo contenía varias líneas. Tanto el registro como la colisión del delimitador de campo se producen con frecuencia en archivos de texto.

En algunos contextos, un usuario malintencionado o un atacante puede intentar explotar este problema de forma intencionada. En consecuencia, la colisión de delimitadores puede ser la fuente de vulnerabilidades y exploits de seguridad . Los usuarios malintencionados pueden aprovechar la colisión de delimitadores en lenguajes como SQL y HTML para implementar ataques tan conocidos como inyección SQL y scripts entre sitios , respectivamente.

Soluciones

Debido a que la colisión del delimitador es un problema muy común, se han inventado varios métodos para evitarla. Algunos autores pueden intentar evitar el problema eligiendo un carácter delimitador (o una secuencia de caracteres) que probablemente no aparezca en el flujo de datos en sí. Este enfoque ad hoc puede ser adecuado, pero necesariamente depende de una suposición correcta de lo que aparecerá en el flujo de datos y no ofrece seguridad contra colisiones maliciosas. Por lo tanto, también se aplican otras convenciones más formales.

Texto delimitado por ASCII

Los conjuntos de caracteres ASCII y Unicode se diseñaron para resolver este problema proporcionando caracteres que no se imprimen y que pueden usarse como delimitadores. Estos son el rango de ASCII 28 a 31.

El uso del separador de unidades ASCII 31 como separador de campo y el separador de registros ASCII 30 resuelve el problema de los delimitadores de campos y registros que aparecen en un flujo de datos de texto. [20]

Personaje de escape

Un método para evitar la colisión de delimitadores es utilizar caracteres de escape . Desde el punto de vista del diseño del lenguaje, estos son adecuados, pero tienen inconvenientes:

  • el texto puede volverse ilegible cuando está lleno de numerosos caracteres de escape, un problema conocido como síndrome del palillo inclinado (debido al uso de \ to escape / en las expresiones regulares de Perl , lo que lleva a secuencias como "\ / \ /");
  • el texto se vuelve difícil de analizar a través de expresiones regulares
  • requieren un mecanismo para "escapar de las fugas" cuando no se pretende que sean personajes de escape; y
  • aunque son fáciles de escribir, pueden resultar crípticos para alguien que no esté familiarizado con el idioma. [21]
  • no protegen contra ataques de inyección [ cita requerida ]

Secuencia de escape

Las secuencias de escape son similares a los caracteres de escape, excepto que generalmente consisten en algún tipo de mnemotécnico en lugar de un solo carácter. Un uso es en cadenas literales que incluyen un carácter de comilla doble ("). Por ejemplo, en Perl , el código:

print  "Nancy dijo \ x22Hello World! \ x22 a la multitud". ;  ### usa \ x22

produce la misma salida que:

imprimir  "Nancy dijo \" ¡Hola mundo! \ "a la multitud". ;  ### usa escape char

Una desventaja de las secuencias de escape, cuando es utilizado por la gente, es la necesidad de memorizar los códigos que representan los caracteres individuales (véase también: referencia a entidad de caracteres , referencia de carácter numérico ).

Delimitadores de comillas dobles

A diferencia de las secuencias de escape y los caracteres de escape, los delimitadores duales proporcionan otra forma de evitar la colisión de delimitadores. Algunos lenguajes, por ejemplo, permiten el uso de comillas simples (') o comillas dobles (") para especificar una cadena literal. Por ejemplo, en Perl :

print  'Nancy dijo "¡Hola mundo!" a la multitud. ;

produce la salida deseada sin requerir escapes. Sin embargo, este enfoque solo funciona cuando la cadena no contiene ambos tipos de comillas.

Relleno de delimitadores de comillas

A diferencia de las secuencias de escape y los caracteres de escape, los delimitadores de relleno proporcionan otra forma de evitar la colisión de delimitadores. Visual Basic , por ejemplo, usa comillas dobles como delimitadores. Esto es similar a escapar del delimitador.

imprimir  "Nancy dijo" "¡Hola mundo!" "a la multitud".

produce la salida deseada sin requerir escapes. Sin embargo, al igual que el escape normal, puede resultar confuso cuando se utilizan muchas comillas. El código para imprimir el código fuente anterior se vería más confuso:

print  "print" "Nancy dijo" "" "¡Hola mundo!" "" "a la multitud." ""

Delimitadores de cotización alternativos configurables

A diferencia de los delimitadores duales, los delimitadores múltiples son incluso más flexibles para evitar la colisión de delimitadores. [8] : 63 </ref>

Por ejemplo, en Perl :

print  qq ^ Nancy no quiere decir "¡Hola mundo!" más. ^ ; print  qq @ Nancy no quiere decir "¡Hola mundo!" más. @ ; print  qq (Nancy ya no quiere decir "¡Hola mundo!") ;

todos producen el resultado deseado mediante el uso de operadores de comillas , que permiten que cualquier carácter conveniente actúe como delimitador. Aunque este método es más flexible, pocos idiomas lo admiten. Perl y Ruby son dos que sí lo hacen. [8] : 62 </ref> [22]

Límite de contenido

Un límite de contenido es un tipo especial de delimitador diseñado específicamente para resistir la colisión de delimitadores. Funciona al permitir que el autor especifique una secuencia de caracteres que está garantizado para indicar siempre un límite entre las partes en un mensaje de varias partes, sin otra interpretación posible. [23]

El delimitador se genera con frecuencia a partir de una secuencia aleatoria de caracteres que es estadísticamente improbable que ocurra en el contenido. Esto puede ir seguido de una marca de identificación, como un UUID , una marca de tiempo o alguna otra marca distintiva. Alternativamente, el contenido se puede escanear para garantizar que no aparezca un delimitador en el texto. Esto puede permitir que el delimitador sea más corto o más simple y aumentar la legibilidad humana del documento. ( Ver , por ejemplo , MIME , aquí documentos ).

Espacio en blanco o sangría

Algunos lenguajes de programación y de computadora permiten el uso de delimitadores de espacios en blanco o sangrías como un medio para especificar límites entre regiones independientes en el texto. [24]

Sintaxis de expresiones regulares

Al especificar una expresión regular , también se pueden usar delimitadores alternativos para simplificar la sintaxis de las operaciones de coincidencia y sustitución en Perl . [25]

Por ejemplo, se puede especificar una operación de coincidencia simple en Perl con la siguiente sintaxis:

$ string1  =  'Nancy dijo "¡Hola mundo!" a la multitud. ;  # especificar una cadena de destino print  $ cadena1  = ~  m / [aeiou] + / ;  # coincidir con una o más vocales

La sintaxis es lo suficientemente flexible como para especificar operaciones de coincidencia con delimitadores alternativos, lo que facilita evitar la colisión de delimitadores:

$ string1  =  'Nancy dijo que "http: //Hello/World.htm" no es una dirección válida.' ;  # cadena de destino imprimir  $ cadena1  = ~  m @ http: // @ ;  # coincidir usando un delimitador de expresión regular alternativo print  $ string1  = ~  m {http: //} ;  # igual que el anterior, pero diferente delimitador print  $ string1  = ~  m! http: //! ;  # igual que el delimitador anterior, pero diferente.

Aquí documento

Un documento Here permite la inclusión de contenido arbitrario al describir una secuencia final especial. Muchos lenguajes admiten esto, incluidos PHP , scripts bash , ruby y perl . Un documento aquí comienza describiendo cuál será la secuencia final y continúa hasta que esa secuencia se ve al comienzo de una nueva línea. [26]

Aquí hay un ejemplo en perl:

imprimir  << ENDOFHEREDOC ; Es muy difícil codificar una cadena con "ciertos caracteres".Las líneas nuevas, las comas y otros caracteres pueden provocar colisiones de delimitadores. ENDOFHEREDOC

Este código se imprimiría:

Es muy difícil codificar una cadena con "ciertos caracteres".
Las líneas nuevas, las comas y otros caracteres pueden provocar colisiones de delimitadores.

Al usar una secuencia final especial, se permiten todo tipo de caracteres en la cadena.

Armadura ASCII

Aunque se utiliza principalmente como un mecanismo para la codificación de texto de datos binarios, el blindaje ASCII es una técnica de programación y administración de sistemas que también ayuda a evitar la colisión de delimitadores en algunas circunstancias. [27] [28] Esta técnica se contrasta con los otros enfoques descritos anteriormente porque es más complicada y, por lo tanto, no es adecuada para aplicaciones pequeñas y formatos simples de almacenamiento de datos. La técnica emplea un esquema de codificación especial, como base64 , para garantizar que el delimitador u otros caracteres significativos no aparezcan en los datos transmitidos. El propósito es evitar el escape de varias capas , es decir, para comillas dobles .

Esta técnica se utiliza, por ejemplo, en Microsoft 's ASP.NET tecnología de desarrollo web, y está estrechamente asociado con el componente 'VIEWSTATE' de ese sistema. [29]

Ejemplo

El siguiente ejemplo simplificado demuestra cómo funciona esta técnica en la práctica.

El primer fragmento de código muestra una etiqueta HTML simple en la que el valor VIEWSTATE contiene caracteres que son incompatibles con los delimitadores de la etiqueta HTML en sí:

<input  type = "hidden"  name = "__VIEWSTATE"  value = "BookTitle: Nancy ya no dice" ¡Hola  mundo! "  ."  />

Este primer fragmento de código no está bien formado y, por lo tanto, no funcionaría correctamente en un sistema implementado en el "mundo real".

Para almacenar texto arbitrario en un atributo HTML , se pueden utilizar entidades HTML . En este caso "& quot;" sustituye a la comilla doble:

<input  type = "hidden"  name = "__VIEWSTATE"  value = "BookTitle: Nancy ya no dice & quot; ¡Hola mundo! & quot ;."  />

Alternativamente, se podría usar cualquier codificación que no incluya caracteres que tengan un significado especial en el contexto, como base64:

<input  type = "hidden"  name = "__VIEWSTATE"  value = "Qm9va1RpdGxlOk5hbmN5IGRvZXNuJ3Qgc2F5ICJIZWxsbyBXb3JsZCEiIGFueW1vcmUu"  />

O codificación porcentual :

<input  type = "hidden"  name = "__VIEWSTATE"  value = "BookTitle: Nancy% 20doesn% 27t% 20say% 20% 22Hello% 20World!% 22% 20anymore."  />

Esto evita la colisión del delimitador y garantiza que no aparecerán caracteres incompatibles dentro del código HTML, independientemente de los caracteres que aparezcan en el texto original (decodificado). [29]

Ver también

  • CDATA
  • Separador decimal
  • Valores separados por delimitadores
  • Secuencia de escape
  • Literal de cadena
  • Valores separados por tabuladores

Referencias

  1. ^ a b "Compendio de símbolos matemáticos: delimitadores" . Bóveda de matemáticas . 2020-03-01 . Consultado el 9 de agosto de 2020 .
  2. ^ "Definición: delimitador" . Estándar federal 1037C - Telecomunicaciones: Glosario de términos de telecomunicaciones . Archivado desde el original el 5 de marzo de 2013 . Consultado el 25 de noviembre de 2019 .
  3. ^ "¿Qué es un delimitador?" . www.computerhope.com . Consultado el 9 de agosto de 2020 .
  4. ^ Rohl, Jeffrey S. (1973). Programación en Fortran . Oxford Oxfordshire: Prensa de la Universidad de Oxford. ISBN 978-0-7190-0555-8. describiendo el método en notación Hollerith bajo el lenguaje de programación Fortran.
  5. ↑ a b de Moor, Georges J. (1993). Avances en la estandarización de la informática sanitaria . IOS Press. ISBN 90-5199-114-2.pag. 141
  6. ^ Friedl, Jeffrey EF (2002). Dominar las expresiones regulares: técnicas poderosas para Perl y otras herramientas . O'Reilly. ISBN 0-596-00289-0.pag. 319
  7. ^ Scott, Michael Lee (1999). Pragmática del lenguaje de programación . Morgan Kaufmann. ISBN 1-55860-442-1.
  8. ^ a b c Pared, Larry ; Orwant, Jon (julio de 2000). Programación de Perl (Tercera ed.). O'Reilly. ISBN 0-596-00027-8.
  9. ^ Kaufmann, Matt (2000). Razonamiento asistido por computadora: un enfoque . Saltador. ISBN 0-7923-7744-3.pag. 3
  10. ^ Meyer, Mark (2005). Exploraciones en Ciencias de la Computación . Oxford Oxfordshire: Prensa de la Universidad de Oxford. ISBN 978-0-7637-3832-7. hace referencia a los lenguajes de programación de estilo C que destacan entre llaves y punto y coma.
  11. ^ Dilligan, Robert (1998). Computación en la era de la Web . Oxford Oxfordshire: Prensa de la Universidad de Oxford. ISBN 978-0-306-45972-6.Describe la sintaxis y los delimitadores utilizados en HTML.
  12. ↑ a b Schwartz, Randal (2005). Aprendiendo Perl . Oxford Oxfordshire: Prensa de la Universidad de Oxford. ISBN 978-0-596-10105-3.Describe cadenas literales .
  13. ^ Watt, Andrew (2003). Sams Teach Yourself Xml en 10 minutos . Oxford Oxfordshire: Prensa de la Universidad de Oxford. ISBN 978-0-672-32471-0.Describe la instrucción de procesamiento XML. pag. 21.
  14. ^ Cabrera, Harold (2002). C # para programadores de Java . Oxford Oxfordshire: Prensa de la Universidad de Oxford. ISBN 978-1-931836-54-8.Describe comentarios de una sola línea y de varias líneas. pag. 72.
  15. ^ "Documentación de la plantilla Smarty" . Consultado el 12 de marzo de 2010 . Consulte, por ejemplo, la documentación del sistema de plantillas Smarty, "escapar delimitadores de plantilla".
  16. ^ "El conjunto de caracteres de control para ISO 646" (PDF) . Organización Internacional de Normalización. 1 de diciembre de 1975.
  17. ^ "Conjunto de caracteres gráficos ASCII" (PDF) . Organización Internacional de Normalización. 1 de diciembre de 1975.
  18. ^ Lewine, Donald (1991). Guía del programador de Posix . Oxford Oxfordshire: Prensa de la Universidad de Oxford. ISBN 978-0-937175-73-6. Describe el uso de control-zp 156,
  19. ^ Friedl, Jeffrey (2006). Dominar las expresiones regulares . Oxford Oxfordshire: Prensa de la Universidad de Oxford. ISBN 978-0-596-52812-6.describir soluciones para problemas de delimitadores embebidos p. 472.
  20. ^ Discusión sobre texto delimitado por ASCII frente a CSV y delimitado por tabulaciones
  21. ^ Kahrel, Peter (2006). Automatización de InDesign con expresiones regulares . O'Reilly. ISBN 0-596-52937-6.pag. 11
  22. ^ Yukihiro, Matsumoto (2001). Ruby en pocas palabras . O'Reilly. ISBN 0-596-00214-9.En Ruby, estos se indican como cadenas delimitadas en general . pag. 11
  23. ^ Tecnologías de Javvin, Incorporated (2005). Manual de protocolos de red . ISBN de Javvin Technologies Inc. 0-9740945-2-8.pag. 26
  24. ^ 200, Cicling (2001). Lingüística computacional y procesamiento inteligente de textos . Oxford Oxfordshire: Prensa de la Universidad de Oxford. ISBN 978-3-540-41687-6.CS1 maint: nombres numéricos: lista de autores ( enlace ) Describe los delimitadores de espacios en blanco. pag. 258.
  25. ^ Friedl, Jeffrey (2006). Dominar las expresiones regulares . Oxford Oxfordshire: Prensa de la Universidad de Oxford. ISBN 978-0-596-52812-6. página 472.
  26. ^ Operadores de Perl y precedencia
  27. ^ Rhee, hombre (2003). Seguridad en Internet: principios, algoritmos y protocolos criptográficos . John Wiley e hijos. ISBN 0-470-85285-2.(un ejemplo de uso de blindaje ASCII en aplicaciones de cifrado)
  28. ^ Bruto, Christian (2005). Código abierto para administradores de Windows . Charles River Media. ISBN 1-58450-347-5.(un ejemplo de uso de blindaje ASCII en aplicaciones de cifrado)
  29. ↑ a b Kalani, Amit (2004). Desarrollar e implementar aplicaciones web con Visual C #. NET y Visual Studio. NET . What. ISBN 0-7897-2901-6.(describe el uso de la codificación Base64 y VIEWSTATE dentro del código fuente HTML)

enlaces externos

  • Metaformatos de archivos de datos de The Art of Unix Programming por Eric Steven Raymond
  • Qué es el delimitador de Margaret Rouse.
Obtenido de " https://en.wikipedia.org/w/index.php?title=Delimiter&oldid=1026009713 "