gpt4 book ai didi

c# - System.Web.Security.AntiXss.AntiXssEncoder.MarkAsSafe 和 LowerCodeCharts.None 中的错误?

转载 作者:行者123 更新时间:2023-11-30 17:45:21 24 4
gpt4 key购买 nike

我做了一个Microsoft Connect bug submission ,我在提交中链接了这个问题。


我正在使用 System.Web.Security.AntiXss.AntiXssEncoder.MarkAsSafe 来测试一些东西,我发现了这个。

这段代码,看起来很合适:

protected void Application_Start(object sender, EventArgs e)
{
System.Web.Security.AntiXss.AntiXssEncoder.MarkAsSafe
(
LowerCodeCharts.None,
LowerMidCodeCharts.None,
MidCodeCharts.None,
UpperMidCodeCharts.None,
UpperCodeCharts.None
);

/*2 randoms characters from each pdf linked below */
System.Diagnostics.Debug.WriteLine(
System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode(
"%* ܼ aW ?? ?? ??", false));

System.Diagnostics.Debug.WriteLine(
System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode(
"%* ܼ aW ?? ?? ??", true));
}

没有按应有的方式工作。上面的字符串没有被编码。

好像还是用LowerCodeCharts.Default,忽略我的LowerCodeCharts.None,用的是这些(我找到了各个字符集的列表here) .

BasicLatin , C1ControlsAndLatin1Supplement , LatinExtendedA , LatinExtendedB , IpaExtensions , SpacingModifierLetters , CombiningDiacriticalMarks


所以在使用 ILSpy 查看 System.Web.Security.AntiXss.UnicodeCharacterEncoder 之后

我找到了这段代码;

public static void MarkAsSafe(....)
{

if (lowerCodeCharts == UnicodeCharacterEncoder.currentLowerCodeChartSettings &&
lowerMidCodeCharts == UnicodeCharacterEncoder.currentLowerMidCodeChartSettings &&
midCodeCharts == UnicodeCharacterEncoder.currentMidCodeChartSettings &&
upperMidCodeCharts == UnicodeCharacterEncoder.currentUpperMidCodeChartSettings &&
upperCodeCharts == UnicodeCharacterEncoder.currentUpperCodeChartSettings)
{
return;
}

/*actual code that does something*/
}

我查看了 ILSpy,所有这些的默认值为 None

这使我第一次尝试 MarkAsSafe 无效

当我打电话时,有或没有我的 None

System.Diagnostics.Debug.WriteLine(
System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode(
"%* ܼ aW ?? ?? ??", false));

通过查看 ILSpy 中的 System.Web.Security.AntiXss.UnicodeCharacterEncoder,它通过了

private static void InitialiseSafeList()
{
/*some code */
if (UnicodeCharacterEncoder.characterValues == null)
{
UnicodeCharacterEncoder.InitialiseSafeList();
}
/*some code */
}

因为此时 UnicodeCharacterEncoder.characterValues 为 null,所以我在 Visual Studio 中使用 Watch Window 验证了这一点。 UnicodeCharacterEncoder.InitialiseSafeList 方法如这一行

SafeList.PunchUnicodeThrough(ref UnicodeCharacterEncoder.characterValues, 
LowerCodeCharts.Default,
LowerMidCodeCharts.None,
MidCodeCharts.None,
UpperMidCodeCharts.None,
UpperCodeCharts.None);

因此,为了使其真正成为 None,我尝试调用 MarkAsSafe 两次,一次使用假值以确保它不会使它无效,然后使用 ALL None< 调用它

System.Web.Security.AntiXss.AntiXssEncoder.MarkAsSafe
(
LowerCodeCharts.None,
LowerMidCodeCharts.None,
MidCodeCharts.Arrows, /* FAKE VALUE to trigger the proper code */
UpperMidCodeCharts.None,
UpperCodeCharts.None);

System.Web.Security.AntiXss.AntiXssEncoder.MarkAsSafe
(
LowerCodeCharts.None, /* NOW THIS WORK */
LowerMidCodeCharts.None,
MidCodeCharts.None,
UpperMidCodeCharts.None,
UpperCodeCharts.None);

现在我实际上得到了一个编码字符串

&#37;&#42;&#220;&#188;&#261;&#372;&#419;&#508;&#612;&#681;&#742;&#767;

但无法重置内部数组 UnicodeCharacterEncoder.characterValues 因此在我的示例中,因为我使用了 MidCodeCharts.Arrows,它们现在被视为安全的。无法将其改回不安全状态。


为了好玩,我想找到一种方法让它按应有的方式工作,这让它工作

请注意,此代码不可用于生产。请!!

var assembly = Assembly.GetAssembly(typeof(System.Web.Security.AntiXss.AntiXssEncoder));
var type = assembly.GetType("System.Web.Security.AntiXss.UnicodeCharacterEncoder");
var field = type.GetField("currentLowerCodeChartSettings", BindingFlags.Static | BindingFlags.NonPublic);
field.SetValue(null, -1);


System.Web.Security.AntiXss.AntiXssEncoder.MarkAsSafe
(
System.Web.Security.AntiXss.LowerCodeCharts.None,
System.Web.Security.AntiXss.LowerMidCodeCharts.None,
System.Web.Security.AntiXss.MidCodeCharts.None,
System.Web.Security.AntiXss.UpperMidCodeCharts.None,
System.Web.Security.AntiXss.UpperCodeCharts.None
);

请注意,此代码不可用于生产。请!!


所以我的问题是,对于库的当前实现,是否有另一种方法可以将所有编码标记为不安全?

最佳答案

它在一月份被确认为一个错误,它只是 got closed as won't fix .

看来,如果您遇到此错误,则必须在我的问题中使用不推荐代码。

此外,如果您必须在运行时多次更改编码,则需要找到一种手动重置内部数组的方法。否则编码将包括任何先前的“MarkAsSafe”调用。这可以通过操纵不推荐的私有(private)/内部变量来完成。

关于c# - System.Web.Security.AntiXss.AntiXssEncoder.MarkAsSafe 和 LowerCodeCharts.None 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27708382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com