我收到了相当自我解释的错误:
从客户端(*)检测到潜在危险的Request.Path值.
问题是由*请求URL引起的:
https://stackoverflow.com/Search/test*/0/1/10/1
Run Code Online (Sandbox Code Playgroud)
此网址用于填充搜索页面,其中"test*"是搜索字词,其余网址与各种其他过滤条件相关.
是否有一种简单的方法可以在URL中允许这些特殊字符?我试过修改web.config,但无济于事.
我应该手动编码/解码特殊字符吗?或者有这样做的最佳实践,我想避免使用查询字符串. - 但它可能是一种选择.
应用程序本身是一个c# asp.netwebforms应用程序,它使用路由生成上面的漂亮URL.
我有一个MVC路由,它让我在运行IIS的登台服务器上下地狱.我在本地运行Visual Studio 2010的开发服务器.
这是一个实际在我的开发箱上工作的示例网址:
Root/CPUBoards/Full+Size
Results
Server Error404 - File or directory not found.
The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.
Run Code Online (Sandbox Code Playgroud)
这是我看到的完整行为.
本地主机:
Root/CPUBoards/Full Size - Resolves
Root/CPUBoards/Full%20Size - Resolves
Root/CPUBoards/Full+Size - Resolves
Run Code Online (Sandbox Code Playgroud)
使用IIS 7.0临时服务器:
Root/CPUBoards/Full Size - Resolves
Root/CPUBoards/Full%20Size - Resolves
Root/CPUBoards/Full+Size - 404 Not Found Error.
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我需要使用编码版本有几个原因...不会浪费你的时间.
HttpUtility.UrlEncode("Full Size")返回带有加号的版本... Full + Size.这适用于我的开发箱,但不适用于登台服务器.我宁愿让它在服务器上工作,因为我已经测试了所有其他工作并在本地工作,但我不知道从哪里开始查看服务器配置以使其行为方式相同.
谢谢!
我有一个MVC.NET应用程序,其中一个路由如下:
routes.MapRoute("member", "member/{id}/{*name}", new { controller = "member", action = "Details", id = "" }, new { id = @"\d+" });
因此,链接可以是这样的:http:// domain/member/123/any_kind_of_username
这通常工作正常,但如果路径包含非法字符(例如双qoute:http:// domain/member/123/my_ "user"_name),我会收到"System.ArgumentException:路径中的非法字符".
经过大量谷歌搜索后,最好的建议似乎是确保网址不包含任何此类字符.不幸的是,在这种情况下,这是我无法控制的.
有办法解决这个问题吗?
我正在ASP.net中实现URL重写,我的URL导致我的问题世界.
URL是从部门和类别的数据库生成的.我希望员工能够使用适当的特殊字符向数据库添加项目,而不会破坏站点.
我在构造URL之前编码数据.
有几个问题......
我确实有两个关于这个主题的其他相关帖子,当时我只看到小问题不是上游的大问题.我发现了一些解决"错误请求"问题的注册表技巧,但我将部署到共享托管环境,使其无用.我也知道这是一个解决某些安全问题的方法,因此我不想在不知道我正在打开哪些蠕虫的情况下绕过它.
而不是试图强制.net传递原始URL,或覆盖IIS设置,我想首先制作真正安全的URL.
我会注意到我已经尝试过AntiXss.URLEncode,HttpUtility.URLEncode,URI.EscapeDataString.我甚至尝试过像双URLEncodng这样的蠢事.是否有一个实用程序可以满足我的需求,或者我真的需要自己动手.我甚至考虑做一些Hacky,比如用一个不寻常的字符串替换%.最终结果应至少是可读的,这首先是使用URL重写的重点.
很抱歉很长的帖子 - 我只是想确保我已经包含了所有必要的细节.我似乎无法找到任何相关信息,这似乎是一个常见的问题 - 所以也许我错过了一些大事.感谢您的帮助,以及对长篇解释的耐心!
为清晰起见编辑:
当我说从数据库构建网址时,我的意思是目录结构是从我的数据库中的部门和类别构建的.
一些示例URLS -
Mystore/Refrigeration/Bar + Fridge.aspx
Mystore/Cooking + Equipment.aspx
Mystore/Kitchen/Cutting + Boards.asxpx
当我使用像"Beverage&Bar"或"Pastry/Decorating"这样的部门来构建我的URL时会出现问题.尽管首先编码,但这些都会导致上述问题.
我的处理程序已经实现并且工作正常,除了特殊的字符编码问题.
我在MVC 4 .NET应用程序中有一个控制器,它接收一个字符串作为URL的参数.这来自重定向到控制器的aspx页面Route.config.
如果我在客户端中为参数发送此值: fwdgerhb+bhrth+ftrgbhrt
我在服务器上获得以下值: fwdgerhb bhrth ftrgbhrt
服务器将URL参数值解释为编码的URL并替换+为.但它没有经过URL编码.对于特殊字符的其他组合,如果它们出现在参数值中,则会发生这种情况.
IIS服务器中是否有配置参数将服务器配置为不尝试对此值进行URL解码?
示例请求:
mypage.aspx?value=cat+dog (NOT ENCODED)
Run Code Online (Sandbox Code Playgroud)
路线配置
static void RegisterRoutes(RouteCollection routes)
{
routes.MapRouteLowercase(
name: "MyRouter",
url: "mypage.aspx",
defaults: new { controller = "My", action = "DoLog" }
);
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public class MyController : Controller
{
[AllowAnonymous]
public ActionResult DoLog(string value)
{
//Here value has "cat dog"
}
}
Run Code Online (Sandbox Code Playgroud) c# ×3
asp.net ×2
iis ×2
routing ×2
url ×2
url-encoding ×2
arguments ×1
asp.net-mvc ×1
parameters ×1
webforms ×1