La RFC 3986 URI: Sintaxis Genérico especificación de las listas de un punto y coma como reservados (sub-delim) carácter:

reserved    = gen-delims /sub-delims

gen-delims  = ":" /"/" /"?" /"#" /"[" /"]" /"@"

sub-delims  = "!" /"$" /"&" /"'" /"(" /")"
              /"*" /"+" /"," /";" /"="

¿Qué es la reserva de la finalidad de las «;» el punto y coma en la Uri? Para el caso, ¿cuál es el propósito de los otros sub-delims (yo sólo soy consciente de los efectos de «&», » + » y «=»)?

InformationsquelleAutor Nicole | 2010-01-29

6 Comentarios

  1. 35

    Hay una explicación al final de la sección 3.3.

    Aparte de dot-segmentos en
    jerárquica de caminos, un segmento de la ruta es
    considera opaco por el genérico
    la sintaxis. URI de la producción de aplicaciones
    a menudo el uso de los caracteres reservados
    permite en un segmento para delimitar
    esquema específico o
    eliminar-controlador específico
    subcomponentes. Por ejemplo, la
    punto y coma («;») y de igual («=»)
    caracteres reservados a menudo son utilizados
    para delimitar los parámetros y
    los valores aplicables a ese segmento.
    La coma («,») es de carácter reservado
    a menudo se utiliza para fines similares.
    Por ejemplo, una URI productor podría
    el uso de un segmento tales como «nombre;v=1.1»
    para indicar una referencia a la versión 1.1
    de «nombre», mientras que otro podría
    el uso de un segmento tales como «nombre,1.1» a
    indicar la misma. Los tipos de parámetros
    puede ser definido por el plan específico
    la semántica, pero en la mayoría de los casos la
    la sintaxis de un parámetro es específico para
    la aplicación de la URI
    eliminar algoritmo.

    En otras palabras, que está reservado para que la gente que quiere una lista delimitada por comas de algo en la dirección URL puede utilizar de forma segura ; como un delimitador incluso si las partes contienen ;, siempre y cuando el contenido por ciento codificado. En otras palabras, usted puede hacer esto:

    foo;bar;baz%3bqux
    

    y lo interpretan como tres partes: foo, bar, baz;qux. Si semi-colon no eran un carácter reservado, el ; y %3bsería equivalente, por lo que la URI sería interpretado erróneamente como cuatro partes: foo, bar, baz, qux.

    • En resumen, reservado, pero para nada en particular. La usamos para codificar información en Descanso consultas.
    • Gracias por el ejemplo, que realmente ayuda.
    • Puede alguien comparta un ejemplo de esto en el mundo real de los servicios web?
    • Algún significado especial para el ; en las Url de HTTP?
  2. 7

    La intención es más claro si se va a volver a las versiones anteriores de la especificación:

      path_segments = segment *( "/" segment )
      segment       = *pchar *( ";" param ) 
    

    Cada segmento de la ruta puede incluir una
    secuencia de parámetros, indicado por el punto y coma «;» carácter».

    Creo que tiene sus orígenes en FTP URIs.

  3. 5

    Sección 3.3 cubre este – es un cuerpo opaco delimitador de un URI productoras de aplicación puede utilizar si es conveniente:

    Aparte de dot-segmentos en
    jerárquica de caminos, un segmento de la ruta es
    considera opaco por el genérico
    la sintaxis. URI de la producción de aplicaciones
    a menudo el uso de los caracteres reservados
    permite en un segmento para delimitar
    esquema específico o
    eliminar-controlador específico
    subcomponentes. Por ejemplo, la
    punto y coma («;») y de igual («=»)
    caracteres reservados se utilizan a menudo para
    delimitar los parámetros y
    los valores aplicables a ese segmento. El
    la coma («,») es de carácter reservado
    a menudo se utiliza para fines similares. Para
    ejemplo, una URI productor puede utilizar un
    segmento tales como «nombre;v=1.1» a
    indicar una referencia a la versión 1.1 de
    «nombre», mientras que otro puede usar un
    segmento tales como «nombre,1.1» para indicar
    la misma. Los tipos de parámetro puede ser
    definido por el esquema específico de la semántica,
    pero en la mayoría de los casos la sintaxis de un
    parámetro es específico para el
    la aplicación de la URI
    eliminar algoritmo.

  4. 4

    Hay algunas convenciones en torno a su uso actual que son interesantes. Estos hablan de cuándo usar un punto y coma o coma. Del libro «RESTful Web Services»:

    El uso de los caracteres de puntuación para separar múltiples piezas de datos en el mismo nivel de jerarquía. El uso de las comas cuando el orden de los elementos de la materia, … el Uso de punto y coma cuando el orden no importa.

  5. 2

    Desde 2014 segmentos de la ruta se sabe que contribuyen a Refleja Archivo de Descarga de los ataques. Supongamos que tenemos un vulnerables de la API que refleja lo enviamos a ella (la URL real al parecer, ahora fijo):

    https://google.com/s?q=rfd%22||calc||
    
    {"results":["q", "rfd\"||calc||","I love rfd"]}
    

    Ahora, esto es inofensivo en un navegador como es JSON por lo que no va a ser prestados, pero el navegador que más bien va a ofrecer la descarga de la respuesta como un archivo. Ahora aquí está la ruta de los segmentos venido a ayudar (para el atacante):

    https://google.com/s;/setup.bat;?q=rfd%22||calc||
    

    Todo lo que hay entre un punto y coma (;/setup.bat;) será no enviadas a la web de servicios, pero en lugar de eso, el navegador lo interpreta como el nombre de archivo… para guardar la respuesta de API. Ahora, un archivo llamado setup.bat será descargado y ejecutado sin preguntar acerca de los peligros de ejecución de archivos descargados de Internet (porque contiene la palabra "setup" en su nombre). El contenido se interpretará como archivo por lotes de Windows, y el calc.exe comando será ejecutado.

    Prevención:

    • sanee su API de entrada (en este caso se debe permitir sólo caracteres alfanuméricos); escape no es suficiente
    • agregar Content-Disposition: attachment; filename="whatever.txt" en la Api que no va a ser prestados; Google faltaba el filename parte que hizo el ataque más fácil
    • agregar X-Content-Type-Options: nosniff la cabecera de la API de respuestas
  6. 0

    He encontrado los siguientes casos de uso:

    Su caracter final del HTML entidad:

    https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

    Para utilizar una de estas referencias de entidades de caracteres en HTML o XML
    documento, escriba el signo » & » seguido por el nombre de la entidad y un
    punto y coma, por ejemplo, & por el carácter ampersand («&»).

    Apache Tomcat 7 (o nuevas versiones?!) nosotros como path parameter:

    https://superevr.com/blog/2011/three-semicolon-vulnerabilities

    Apache Tomcat es un ejemplo de un servidor web que soporta «Ruta de acceso
    Parámetros». Un parámetro path es contenido extra después de un nombre de archivo,
    separados por un punto y coma. Cualquier contenido después de un punto y coma ¿
    no afectará a la página de destino de un navegador web. Esto significa que
    http://example.com/index.jsp;derp aún regresar índice.jsp, y no
    algunos de error de la página.

    Esquema de URI se divide por la MIME y datos:

    https://en.wikipedia.org/wiki/Data_URI_scheme

    Puede contener un carácter opcional de parámetros, separados de la
    parte precedente por un punto y coma (;) .

    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
    AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
    9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
    

    Y hubo un error en iis 5 y IIS6 para eludir la carga de archivo de restricciones:

    https://www.owasp.org/index.php/Unrestricted_File_Upload

    Listas negras de las Extensiones de Archivo de Esta protección puede ser evitada por: …
    mediante la adición de un carácter de punto y coma después de la prohibición de extensión y
    antes de la permitida (por ejemplo, «archivo.asp;.jpg»)

    Conclusión:

    No utilice punto y coma en las direcciones Url o que accidentalmente podrían producir un HTML entidad o esquema de URI.

Dejar respuesta

Please enter your comment!
Please enter your name here