六、扩展URL最大长度
ASP.NET 4引入了新的选择用于扩展应用程序URL的规模。早期版本的ASP.NET把URL路径的长度限制为最长260个字符(基于NTFS文件路径限制)。在ASP.NET 4中,您可以选择增加(或减少)这个数目以便更适合于你的应用程序,这是使用两个新的httpRuntime配置属性实现的。下面的例子显示了这些新的属性的使用。
为了使用更长或更短的路径(不包括协议、服务器名称和查询字符串的URL中的部分),你可以修改maxRequestPathLength属性的值。为了使用更长或更短的查询字符串,你可以修改maxQueryStringLength属性的值。
在ASP.NET 4中,您还可以配置由URL字符检查机制所使用的字符。当ASP.NET查找到一个URL路径中的无效字符时,它将拒绝该请求,并发出一个HTTP 400错误。在以前版本的ASP.NET中,URL字符检查仅限于一个固定的字符集。在ASP.NET 4,您可以自定义一个有效的字符集,这可以通过使用HttpRuntime配置元素中新的requestPathInvalidChars属性实现,如下面的示例所示:
默认情况下,requestPathInvalidChars属性定义7个无效的字符。(默认情况下,在分配给requestPathInvalidChars的字符串中,小于号(“<”),大于号(“<”)和符号&都被进行编码,因为文件Web.config是一个XML文件。)您可以根据需要自定义设置无效的字符。
【注意】ASP.NET 4始终会拒绝包含在0x00~0x1F范围的ASCII字符的URL路径,因为这些都是IETF的RFC 2396文件中所规定的无效的URL字符。在运行6.0或更高的IIS的Windows 版本中,Http.sys协议设备驱动程序会自动拒绝其中包含这些字符的URL。
七、可扩展请求校验
ASP.NET请求验证机制会搜索传入的HTTP请求数据中的通常用在跨站点脚本(XSS)攻击中的字符串。如果发现存在潜在的XSS字符串,请求验证将会标志出被怀疑的字符串并返回一个错误。内置的请求验证只有当发现最常见的跨站脚本攻击中使用的字符串时才返回一个错误。以前的XSS验证过于积极,从而导致许多的误判。不过,有时候用户的确可能会请求一个具有攻击意味的验证,但也有可能想有意放宽对特定的网页或特定类型请求的跨站脚本检查。
在ASP.NET 4中,对请求验证功能进行了扩展,以便您可以使用自定义的请求验证逻辑。为了扩展请求验证,你可以从新的System.Web.Util.RequestValidator类派生一个类,并配置应用程序(在Web.config文件的httpRuntime节中)以使用你的自定义类型。下面的示例显示了如何配置一个自定义的请求验证类:
注意,这个新的requestValidationType属性要求使用一个标准的.NET Framework类型标识符字符串来指定提供定制请求验证的类。对于每个请求,ASP.NET调用自定义类型来处理每一个传入的HTTP请求数据块。通过下面给出的例子中的自定义的请求验证类,传入的网址、所有的HTTP头部(包括cookie和自定义头部)和整个实体部分都可以被检查:
{
protected override bool IsValidRequestString(
HttpContext context, string value,
RequestValidationSource requestValidationSource,
string collectionKey,
out int validationFailureIndex)
{...}
}