Was macht Microsoft.Security.Application.Encoder.UrlPathEncode?

c# html-agility-pack

Frage

Ich habe ein brillantes Beispiel für einen HTML-Desinfektor mit HTMLAgilityPack gefunden. Im Code wird die Microsoft.Security.Application.Encoder Klasse verwendet:

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

Ich kann die Assembly, die diese Klasse enthält, nicht finden. Ich würde lieber keine andere Abhängigkeit in meinem Projekt haben, und der Desinfektor funktioniert ohne diese Zeile. Das Entfernen dieses Aufrufs kann jedoch zu einer Sicherheitsverletzung im Code führen.

Um sich für oder gegen den Einsatz dieser Baugruppe zu entscheiden, würde ich gerne wissen: Was macht diese Methode eigentlich?

Akzeptierte Antwort

Sie können sich den Quellcode ansehen

Aus dem Quellcode für die Methode

/// <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; 
}

Sie müssen tiefer graben, um zu allen beweglichen Teilen zu gelangen, die die URI codieren. Normalerweise würde ich empfehlen, in die Komponententests zu schauen, um zu sehen, was von der Komponente erwartet wird, aber es gibt keine Tests auf der Encoder Klasse auf den ersten Blick :(




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum