如何绕过HttpRequestValidationException只为一个请求值而不编码值

本文关键字:请求 一个 编码值 HttpRequestValidationException 何绕过 | 更新日期: 2023-09-27 18:14:15

规定:不能使用base64编码。我被告知,除非必要,否则不要增加负载,base64就会这样做。

首选:将单个页面的requestValidationMode设置为2.0,但我认为这是不可能的。

场景:用户浏览并选择图像。前端将使用FileReader.readAsDataUrl(f)抓取图像,然后base64解码它(留给我相当于FileReader.readAsBinaryString(f),但不兼容IE10),并通过AJAX将其发送到我的IHttpHandler。

目前,这将抛出HttpRequestValidationException,因为二进制数据包含可能有害的字符。这不是问题,因为我们的后端将验证数据。我如何修复/绕过这个期望仅对这个数据?

如何绕过HttpRequestValidationException只为一个请求值而不编码值

这需要一些挖掘,但这里是答案:

web。配置,添加:

<httpRuntime requestValidationMode="4.5" />

你可以使用HttpRequest。Unvalidated属性读取未验证的表单值:

var s = context.Request.Unvalidated.Form["forum_post"];

这是ASP中的新特性。. NET 4.5和称为延迟("lazy")请求验证。

开发人员经常要求有选择地转向的能力关闭对其应用程序的请求验证。例如,如果你的应用程序是论坛软件,可能要允许用户提交html格式的论坛帖子和评论,但仍然要确保请求验证正在检查其他所有内容。

ASP。. NET 4.5引入了两个特性,使您可以轻松地选择性地处理未经验证的输入:延迟("惰性")请求验证和访问未验证的请求数据。

对于一些人来说,你可能会遇到问题,我不能说我理解原因,除了通过将requestValidationMode更改为4.5,它会抛出System.StackOverflowException。为了在我的情况下解决这个问题,我只在处理程序上设置请求验证模式,就像在web.config中那样:

<location path="~/Handlers/MyHandler.ashx">
    <system.web>
        <httpRuntime requestValidationMode="4.5" />
    </system.web>
</location>
相关文章: