不增加maxQueryStringLength的原因?

时间:2013-08-12 09:49:17

标签: asp.net-mvc asp.net-mvc-3

每隔一段时间我就会进入一个需要从我的java脚本客户端向我的应用程序(运行IIS 7)发送相当大的ajax GET请求的位置。如果URL超过2048个字符,则默认情况下会出现异常。解决此问题的简单方法是使用web.config增加maxQueryStringLength

我的问题是,是否有任何充分的理由说明为什么你不应该走这条道路,如果它实际上被认为是黑客攻击?我已经阅读了一些关于限制地址字段中字符数的不同浏览器的内容,但是如果你只使用ajax,这可能不是一个值得考虑的问题吗?

我知道在许多情况下,当您想要在请求中传递大量数据时,您应该考虑使用POST,但有时候这不是一个选项。例如,当您的URL返回文件供用户下载时。

我不得不增加maxQueryStringLength的一个具体示例是:用户请求地图中受多边形限制的某些位置。如果要在URL中发送此多边形,则很容易超过最大URL长度。

3 个答案:

答案 0 :(得分:2)

除此之外,这是一项安全措施......

另一点是,并非所有客户端(即浏览器)都支持2048以上的长度。

有关详细说明,请参阅https://stackoverflow.com/a/417184/847363

如果您处于Intranet情况并且可以控制客户端(浏览器+版本)和服务器那么它可能没问题......对于“在野外”的应用程序,我强烈建议使用POST代替

答案 1 :(得分:1)

maxQueryStringLength(可能)被用作防范DDoS /缓冲区耗尽攻击的安全措施。

答案 2 :(得分:1)

我不知道这会如何立即在安全方面妥协。 2047为什么要安全,2049是不安全的? IIS和ASP.NET当然被编程为不会超出其内存缓冲区,因为这将是一个安全问题。托管代码也不受缓冲区溢出的影响。

由于大多数应用程序不需要如此大的URL,因此我认为2048是明智的默认值。

你可以增加限制而不会产生任何后果。