ChatGPT解决这个技术问题 Extra ChatGPT

获取“从客户端(&)检测到潜在危险的 Request.Path 值”

我有一个遗留代码问题,要求我支持随机 URL,就好像它们是对主页的请求一样。某些 URL 中包含会生成错误“从客户端 (&) 检测到潜在危险的 Request.Path 值”的字符。该站点使用 ASP.Net MVC 3(C#)编写,并在 IIS 7.5 上运行。

这是一个示例网址...

http://mywebsite.example/Test123/This_&_That

以下是我如何设置包罗万象的路线(我还有其他路线可以捕获特定页面)...

routes.MapRoute(
    "Default", // Route name
    "{garb1}/{garb2}", // URL with parameters
    new { controller = "Website", action = "Home", garb1 = UrlParameter.Optional, garb2 = UrlParameter.Optional } // Parameter defaults
);

我已将以下内容添加到我的 web.config 文件中...

<configuration>
    <system.web>
        <pages validateRequest="false" />
        <httpRuntime requestValidationMode="2.0" />
    </system.web>
<configuration>

我还在应该捕获 url 的操作中添加了 ValidateInput 属性...

public class WebsiteController : Controller
{
    [ValidateInput(false)]
    public ActionResult Home()
    {
        return View();
    }
}

但我仍然收到错误消息。任何想法为什么?我错过了什么?现在我只是在我的本地开发服务器上运行(我还没有在生产中尝试过这些修复)。

有一个设置允许某些字符,我会在回到计算机后很快检查......但是你能对你的 URL 进行 urlencode 吗?
我不知道该网站出于什么原因在内部尝试重定向,该重定向正在创建一个类似“localhost/://localhost/myWebsiteName”的 URL,这给了我同样的错误。我不知道为什么 ASP.net 管道认为它是一个危险的请求 URL。
就我而言,我在 URL 中遗漏了一个斜杠。首先要做的是检查 URL 中的拼写错误。

A
Alexander Prokofyev

虽然您可以在配置文件中尝试这些设置

<system.web>
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
    <pages validateRequest="false" />
</system.web>

我会避免在 URL 路径中使用像“&”这样的字符,用下划线替换它们。


看来 requestPathInvalidCharacters="" 成功了。谢谢。我绝对同意你不应该在路径中使用 & ,不幸的是我们多年来一直允许它,所以我们需要继续支持它。
这不是安全问题吗?
@MariusStanescu - 这本质上不是安全问题;这取决于你用它做什么。如果输入被获取并转义并包含在输出中,那就没问题了。如果它没有逃脱,那么您可能会受到攻击。
此解决方案可能会出现此错误: HTTP 错误 500.19 - 内部服务器错误 无法访问请求的页面,因为该页面的相关配置数据无效。
使用此答案时,我还收到错误 500。这是由于已经有 标记,因此存在重复冲突。解决之后,这个答案对我来说也很好。
r
reza.cse08

我遇到过这种类型的错误。从剃须刀调用函数。

public ActionResult EditorAjax(int id, int? jobId, string type = ""){}

通过更改线路解决了这个问题

<a href="/ScreeningQuestion/EditorAjax/5&jobId=2&type=additional" /> 

<a href="/ScreeningQuestion/EditorAjax/?id=5&jobId=2&type=additional" />

我的 route.config 在哪里

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "RPMS.Controllers" } // Parameter defaults
        );

EditorAjaxApIController(与视图控制器相比)吗?我两者都有,ApiController 很好地接受 URL 参数,因为默认值可能允许它,因为这是一种常见用法。我现在只有一个问题,我想将 URL 参数添加到视图控制器。
P
Pavan

如果您只想在 mvc 中为少数文本框允许 Html 标签

你可以做一件事

在控制器中

 [ValidateInput(false)]
public ActionResult CreateNewHtml()  //view
{
    return View();
}
[ValidateInput(false)]
[HttpPost]
public ActionResult CreateNewHtml(cbs obj)//view cbs is database class
{
    repo.AddHtml(obj);
    return View();
}

OP 明确谈到了他需要支持的 URL(不是文本框内容),也没有提到 HTML - 所以你的答案确实不适用于给定的问题。
它不适用于这个问题,但我赞成,因为我不知道这是一个选项。谢谢@Pavan
J
Josh P

当我们试图弄清楚为什么我们的 Silverlight ArcGIS 地图查看器没有加载地图时,我们在 Fiddler 中遇到了同样的错误。在我们的例子中,这是代码中 URL 的拼写错误。出于某种原因,那里有一个等号。
http:=//someurltosome/awesome/place
而不是
http://someurltosome/awesome/place

去掉那个等号后,它工作得很好(当然)。


B
Balamurugan

检查以下行是否存在于您的 web.config 文件中

<system.web> <httpRuntime requestPathInvalidCharacters="" /> </system.web>


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅