gpt4 book ai didi

c# - ASP.Net 验证区域性名称

转载 作者:太空狗 更新时间:2023-10-29 22:04:39 26 4
gpt4 key购买 nike

我们有一个使用 asp.net 2.0 文化的多语言网站。当前文化是通过重写为查询字符串的 url 设置的。 (~/es/blah.aspx 是 ~/blah.aspx 的西类牙语版本 - 重写为 ~/blah.aspx?lang=es)

测试文化的代码如下:

    System.Globalization.CultureInfo ci;
try
{
ci = new System.Globalization.CultureInfo(Request.QueryString["lang"] ?? string.Empty);
}
catch
{
ci = new System.Globalization.CultureInfo(string.Empty);
}

如果没有设置文化,则默认为英语 127。如果有文化,则该页面上的所有链接都会预先设置正确的文化名称。

一些蜘蛛如何以 ~/www.test.com/blah.aspx 的形式获得一些链接,并用 www.test.com 的文化来攻击我们的网站,并充斥我们的​​错误日志记录。

除了捕获异常之外,还有什么方法可以测试文化名称是否有效?

最佳答案

我想我可以快速测量一下,所以快速启动了一个控制台应用程序。

它基本上使用所有 3 种方法(构造函数、LINQ 和 foreach)在循环中从字符串中获取 CultureInfo 10000 次。为简洁起见,我删除了秒表和控制台输出。

string culture = "en-GB";
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
for (int i = 0; i < 10000; i++)
{
try
{
CultureInfo c = new CultureInfo(culture);
}
catch
{
}
}
for (int i = 0; i < 10000; i++)
{
CultureInfo c = cultures.FirstOrDefault((x) => x.Name == culture);
}
for (int i = 0; i < 10000; i++)
{
foreach (CultureInfo c in cultures)
{
if (c.Name == culture)
break;
}
}

结果如下……

Try Catch: 00:00:00.0023860
LINQ: 00:00:00.0542459
ForEach: 00:00:00.0238937

如果删除 cultures 变量并在每次迭代中调用它,那么 LINQ 和 ForEach 循环大约需要 2.5 秒。

因此,如果您希望获得大量有效输入而只有奇数个无效输入,则使用构造函数是有利的。但是,如果将输入从 en-GB 更改为 TEST,那么情况就会发生巨大变化。

Invalid Culture Try Catch: 00:00:39.7163513
Invalid Culture LINQ: 00:00:00.0791752
Invalid Culture ForEach: 00:00:00.0291480

显然我的测试应用程序不是真实世界的场景,但由于 OP 说这是基于每个请求调用的,我可以想象在大型 Web 应用程序中,这段代码可能会被调用很多次。它可能是拒绝或服务向量,通过向 Web 服务器发送垃圾邮件请求来占用所有 CPU,这些请求都具有无效的文化参数。

关于c# - ASP.Net 验证区域性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/480425/

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