它依赖于浏览器吗?另外,不同的网络堆栈对从请求中获得的数据量有不同的限制吗?
不同的网络栈支持不同长度的http请求。根据我的经验,早期的Safari堆栈只支持4000个字符,因此由于USER-STATE的原因,很难处理ASP.net页面。这甚至适用于POST,因此您必须检查浏览器并查看堆栈限制是什么。我认为即使在较新的浏览器上也可能达到极限。我不记得了,但其中一个(我想是IE6)有16位的限制,32,768之类的。
RFC 2616(超文本传输协议- HTTP/1.1)声明查询字符串的长度没有限制(章节3.2.1)。RFC 3986(统一资源标识符- URI)也表示没有限制,但表示由于DNS限制,主机名限制为255个字符(第2.3.3节)。
虽然规范没有规定任何最大长度,但实际的限制是由web浏览器和服务器软件施加的。根据研究,不幸的是,在其原来的网站上不再可用(它导致一个可疑的贷款网站),但仍然可以在Boutell.com的互联网档案上找到:
推荐的安全性和性能最大:2048个字符
虽然RFC 2616没有正式规定限制,但许多安全协议和建议都声明服务器上的maxQueryStrings应该设置为1024的最大字符限制。而整个URL,包括查询字符串,应该设置为最大2048个字符。这是为了防范web服务器上的慢HTTP请求DDOS/DOS攻击漏洞。这通常会在Qualys Web应用程序扫描程序和其他安全扫描程序上显示为一个漏洞。
请参阅下面使用Web.config的Windows IIS服务器示例代码:
<system.webServer> <security> <requestFiltering> <requestLimits maxQueryString="1024" maxUrl="2048"> <headerLimits> <add header="Content-type" sizeLimit="100" /> </headerLimits> </requestLimits> </requestFiltering> </security> </system.webServer>
这也可以在使用machine.config的服务器级别上工作。
这只是针对基于windows操作系统的服务器,我不确定apache或其他服务器上是否有类似的问题。
注意:限制查询字符串和URL长度可能不能完全防止慢HTTP请求DDOS攻击,但这是可以采取的一个步骤。
添加注释中要求的引用: # EYZ0 < / p >