Microsoft.Security.Application.Encoder.UrlPathEncode有什么作用?

c# html-agility-pack

我找到一个使用HTMLAgilityPack的HTML清理程序的精彩示例 。在代码中,使用Microsoft.Security.Application.Encoder类:

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

我找不到包含这个类的程序集,我宁愿在我的项目中没有另一个依赖项,并且清理程序在没有这一行的情况下工作。但是,删除此调用可能会在代码中留下安全漏洞。

为了决定是否反对使用这个程序集,我想知道: 这个方法实际上做了什么?

一般承认的答案

您可以查看源代码

从方法的源代码

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

在编码uri时,您将不得不深入挖掘所有移动部件。通常我会建议查看单元测试以查看组件的预期,但乍看之下没有对Encoder类进行测试:(



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因