客户端需要传递给服务器的参数之一是文件路径,例如path/to/data
。
显然,我不能直接发送它,因为MVC4控制器使用正斜杠来分隔它的参数。我虽然我会安全地转移文件路径 - 例如。 path%2Fto%2Fdata
,将其传输到服务器,然后在服务器上取消它。
但这不起作用 - MVC4无法识别路线。 MVC4是否会超越%2f或其他什么?
更新
从浏览器中的响应来看,似乎MVC4在检查文件路径之前没有检查它以获取URL中的各个字段。
如果我然后进行双重逃脱,它会报告......
The request filtering module is configured to deny a request that contains a double escape sequence
稍微阅读一下后,我尝试将建议添加到部件中的web.config ...
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
然后它报告......
A potentially dangerous Request.Path value was detected from the client (%).
答案 0 :(得分:0)
使用通配符
routes.MapRoute("Path",
"{*path}",
new {
controller = "Content",
action = "Index",
path = UrlParameter.Optional }
);
或者在url编码的查询字符串参数
中答案 1 :(得分:0)
似乎MVC4正在解码文件路径,然后才检查它以获取URL中的各个字段。所以你需要对其进行dbl编码。也...
在Web.config中添加/替换..
..在system.web部分
<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
<pages validateRequest="false">
...并在system.webserver部分添加...
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>