问题标签 [request-validation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1117 浏览

asp.net-mvc-4 - 如何在 MVC4 中进入和调试 .NET 请求验证

如果这是可能的,请有人告诉我如何在 .NET 中设置请求验证断点或查看它引发的错误?

请求验证是在我的一个视图的 AJAX 请求期间发生的,但我无法查看正在传回的错误(它正在发生,正如我尝试发布 HTML 和 javascript 时所预期的那样)但我喜欢能够挖掘一下并查看正在生成的消息。

谢谢

0 投票
4 回答
46521 浏览

asp.net-mvc - 登录请求验证令牌问题

我一直在浏览一个开发项目的错误日志,发现以下错误(更改名称以保护有罪的无辜者)-

提供的防伪令牌用于用户“”,但当前用户是“管理员”。

这不是一个特别难以重现的问题-

  1. 在登录页面打开应用程序
  2. 在登录之前,在同一台计算机上的同一浏览器中打开第二个窗口或选项卡到登录页面
  3. 在第一个窗口中登录(或者实际上是第二个,顺序无关紧要)
  4. 尝试在剩余的登录窗口中登录

堆栈跟踪是-

System.Web.Mvc.HttpAntiForgeryException (0x80004005):提供的防伪令牌用于用户“”,但当前用户是“管理员”。在 System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate(HttpContextBase httpContext) 在 System.Web.Helpers.AntiForgeryWorker.Validate(HttpContextBase httpContext, IIdentity identity, AntiForgeryToken sessionToken, AntiForgeryToken fieldToken) 在 System.Web.Helpers.AntiForgery。 Validate() 在 System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext) 在 System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 过滤器, ActionDescriptor actionDescriptor) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker。 <>c__DisplayClass25.

登录方法签名是-

这与互联网“ASP.NET MVC 4 Web 应用程序”模板项目中的方法签名完全相同,这表明微软要么认为 ValidateAntiForgeryToken 是必要的/最佳实践,要么只是在此处添加了该属性,因为它已被使用其他地方。

显然,我无法此方法中处理该问题,因为它没有达到,ValidateAntiForgeryToken 是一个预请求过滤器,它在请求到达控制器之前阻止它。

我可以在提交表单之前检查用户是否通过 Ajax 进行了身份验证,如果是,则尝试重定向到他们,或者只是删除该属性。

问题是这样的-我知道令牌的设计目的是在用户已经针对您的站点进行身份验证时阻止来自另一个站点 (CSRF) 的请求,因此在此基础上从定义将使用的表单中删除它是一个问题未经身份验证的用户

据推测,此实例中的属性旨在减轻恶意行为者为您的应用程序提供虚假登录表单的风险(尽管在抛出异常时可能用户已经输入了他或她将被记录的详细信息 - 但它可能会提醒他们一些事情是错的)。否则,从外部站点向表单提交不正确的凭据肯定会导致与站点本身完全相同的结果吗?我不依赖客户端验证/清理来清理潜在的不安全输入。

其他开发人员是否遇到过这个问题(或者我们是否有非常有创意的用户),如果是这样,您是如何解决/缓解它的?

更新:这个问题在 MVC5 中仍然存在,完全是故意的,现在出现错误消息“提供的防伪令牌是针对与当前用户不同的基于声明的用户。” 使用默认模板和身份提供程序时。Microsoft Developer Evangelist 和 Troy 的 PluralSight 同事 Adam Tuliper 在登录页面上的 Anti forgery token 上提供了一个相关的问题和有趣的答案,建议只需删除该令牌。

0 投票
1 回答
1493 浏览

asp.net - 如何在 Global.asax.cs 文件的 Application_BeginRequest 事件中验证 Request.RawUrl?

一些机器人正在请求在我的 asp.net 应用程序www.example.com/test-</p><p>they-are-angry...中创建的 URL。A potentially dangerous exception

我需要验证文件的HttpContext.Current.Request.RawUrl事件Application_BeginRequestGlobal.asax.cs如果它无效,我将重定向到另一个错误页面。

如果 Request.RawUrl 无效,我不想设置validateRequest="false"requestValidationMode="2.0"但想重定向到特定错误页面。

如何做到这一点?是否有任何 Asp.Net 预定义的方法来验证此 URL?

非常感谢任何帮助!

0 投票
4 回答
4682 浏览

asp.net - 抛出请求验证异常时如何显示自定义错误页面?

我们为 ASP.NET 引发的异常配置了如下自定义错误页面:

设置redirectMode="ResponseRewrite"很重要,因为它确保 URL 不会改变(我相信 ASP.NET 执行 aServer.Transfer而不是Response.Redirect)。

不幸的是,这不适用于请求验证错误。例如,如果我导航到/some/page/<script>ASP.NET 的请求验证启动并HttpException抛出 a ,则启用自定义错误。但是,我没有显示我的自定义错误页面,而是收到以下消息:

“/”应用程序中的服务器错误。

运行时错误

描述:处理您的请求时发生异常。此外,在执行第一个异常的自定义错误页面时发生了另一个异常。请求已终止。

为什么 ASP.NET 在这种情况下无法显示我的自定义错误页面?错误页面中没有代码,只有 HTML,所以我知道错误页面本身没有抛出任何异常。

此外,如果我自己发现错误Application_Error并发出Server.Transfer它可以正常工作,所以我很好奇 ASP.NET 在幕后做了什么。

如果我们要自己处理,还有比这更好的解决方案吗?

0 投票
1 回答
2381 浏览

asp.net-mvc-3 - MVC 3 - 未提供所需的防伪令牌或无效 - Safari IOS

我在asp MVC 3中有这个表格

而这个动作

在IOS上的Safari上,这总是给我

所需的防伪令牌未提供或无效

这是浏览器的用户代理

Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53

我查看了 cookie,请求验证令牌的设置为 2001 年 1 月 1 日。

有任何想法吗?谢谢

0 投票
0 回答
995 浏览

javascript - 请求验证 ASP.NET MVC

我整天都在搜索,我对阻止脚本在我的 MVC 应用程序中提交感到非常困惑。我发现的大部分内容都是告诉我如何禁用请求验证,这不是我想要的。

在 Views 文件夹的 web.config 中,它声明

在视图页面中启用请求验证将导致在控制器已处理输入之后进行验证。默认情况下,MVC 在控制器处理输入之前执行请求验证。要更改此行为,请将 ValidateInputAttribute 应用于控制器或操作。

这听起来像是我的 MVC 应用程序在我尝试提交脚本标签时应该抛出“检测到潜在危险的 Request.Form 值”错误,但我仍然能够提交如下内容:

</input><script>alert("hello world");</script>

当我加载页面时,脚本已添加到我得到一个 JS 警报框。

为什么我可以提交有潜在危险的脚本?我错过了什么?

0 投票
3 回答
10138 浏览

c# - 控制级别 ValidateRequestMode 无效

我正在使用 ASP.NET WebForms (.NET 4.5) 并有一个“内容块”控件,可以在多个页面上重复使用。我尝试将控件的 ValidateRequestMode 甚至单个元素设置为“已禁用”,但是来自 web.config 的请求验证仍然可以防止不安全的输入。

有没有办法解决这个问题或者我做错了什么?

例子:

0 投票
1 回答
2635 浏览

asp.net - 请求参数中的潜在危险字符(不是 Request.Path!)

关于这个主题有很多问题,但我没有找到适合我们特殊情况的问题......

我们有一个高效的站点正在运行,并且偶尔(每天大约 5 到 10 次)我们会收到有关潜在危险 Request.Path 值的错误通知。这里奇怪的是,实际的“危险”字符不在请求路径中,而是在参数中。

在查看请求对象时,我们会得到如下值:

ASP.NET 在参数中抱怨?

但从我的角度来看,一切似乎都很好(这些确实是有效的 url,如果我在浏览器中输入它们,它们确实可以工作)。

我们还在跟踪客户端 IP 和客户端用户代理,它们主要与一些爬虫有关。是否有可能,他们正在构建一个触发这些错误的错误请求?

0 投票
2 回答
1567 浏览

model-binding - 南希和请求验证

我在南希有示例应用程序,但请求验证有问题。

我正在使用带有 BindAndValidate 扩展的 FluentValidator。所以例如我有模型:

和模块:

还有一个问题,如果客户端应用程序调用带有参数 Name:"foo, Age:"some-string" 的模块,那么 Nancy 会抛出异常:

这里是否有任何参数异常的解决方法(“属性年龄的格式不正确”)?

谢谢

0 投票
1 回答
149 浏览

asp.net - 请求验证关闭在 MVC 页面上不起作用

我的 Web 应用程序包含 WebForm 页面和 MVC 视图。

在我的根 web.config 我有以下代码

<httpRuntime requestValidationMode="2.0" />

在我的 Views 文件夹的 web.config 中,我有这段代码

然后在我的 web 表单页面上关闭验证,但不是我的 MVC 视图。我想为每个页面打开请求验证,因此在控制器级别执行此操作对我来说不是解决方案。

任何想法为什么这不适用于我的 MVC 视图?我在网上唯一能找到的是将验证模式设置为 2.0 并将 validateRequest 设置为 false,我已经这样做了。