¿Qué hace Microsoft.Security.Application.Encoder.UrlPathEncode?

c# html-agility-pack

Pregunta

Encontré un ejemplo brillante de un desinfectante HTML usando HTMLAgilityPack. En el código, se utiliza la clase Microsoft.Security.Application.Encoder :

// AntiXss
a.Value = Microsoft.Security.Application.Encoder.UrlPathEncode(a.Value);

No puedo encontrar el ensamblaje que contiene esta clase, preferiría no tener otra dependencia en mi proyecto y el desinfectante funciona sin esta línea. Sin embargo, la eliminación de esta llamada puede dejar una violación de seguridad en el código.

Para decidir a favor o en contra de usar este ensamblaje, me gustaría saber: ¿qué hace realmente este método?

Respuesta aceptada

Puedes echar un vistazo al código fuente.

Desde el código fuente del método.

/// <summary>
/// URL-encodes the path section of a URL string and returns the encoded string.
/// </summary>
/// <param name="input">The text to URL path encode</param>
/// <returns>The URL path encoded text.</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage(
    "Microsoft.Design",
    "CA1055:UriReturnValuesShouldNotBeStrings",
    Justification = "This does not return a full URL so the return type can be a string.")]
public static string UrlPathEncode(string input)
{
    if (string.IsNullOrEmpty(input)) 
    { 
        return input; 
    } 

    // DevDiv #211105: We should make the UrlPathEncode method encode only the path portion of URLs. 
    string schemeAndAuthority; 
    string path; 
    string queryAndFragment; 
    bool validUrl = UriUtil.TrySplitUriForPathEncode(input, out schemeAndAuthority, out path, out queryAndFragment);

    if (!validUrl) 
    { 
        // treat as a relative URL, so we might still need to chop off the query / fragment components 
        schemeAndAuthority = null; 
        UriUtil.ExtractQueryAndFragment(input, out path, out queryAndFragment); 
    } 

    return schemeAndAuthority + HtmlParameterEncoder.UrlPathEncode(path, Encoding.UTF8) + queryAndFragment; 
}

Tendrá que profundizar más para llegar a todas las partes móviles en la codificación del uri. Por lo general, recomendaría buscar en las pruebas unitarias para ver qué se espera del componente, pero a primera vista no hay pruebas en la clase Encoder :(



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué