You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC查询字符串中"javascript"是否为保留字?ASP.NET路由安全疑问

问题解答
  • 这些词汇不属于.NET路由的保留字,你遇到的是ASP.NET默认的**请求验证(Request Validation)**安全机制在触发,而非路由规则限制。

原因说明

旧版ASP.NET(如Web Forms、早期MVC框架)默认启用请求验证,目的是防范XSS跨站脚本攻击。它会自动解析并检查请求的所有部分(包括查询字符串、表单数据等),一旦检测到<script>标签、javascript:伪协议这类可能用于注入攻击的内容,就会直接抛出HttpRequestValidationException,导致请求崩溃——这就是你看到的"只要检测到'javascript'或'script'字样就会崩溃"的原因。

你提到已经用encodeURIComponent编码了查询字符串,但ASP.NET的请求验证会先对URL解码再做检查,所以编码后的内容依然会被识别出来。

可行的解决办法

  1. 临时关闭局部请求验证(仅在确认输入完全可控、无安全风险时使用):

    • Web Forms页面:在页面顶部指令中添加ValidateRequest="false",示例:
      <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="YourPage.aspx.cs" Inherits="YourApp.YourPage" ValidateRequest="false" %>
      
    • MVC控制器/Action:添加[ValidateInput(false)]特性,同时若使用.NET 4.0及以上版本,需要在web.config的httpRuntime节点中设置requestValidationMode="2.0":
      <system.web>
        <httpRuntime requestValidationMode="2.0" />
      </system.web>
      
      [ValidateInput(false)]
      public ActionResult YourAction(string yourParam)
      {
          // 处理逻辑
      }
      
  2. 更安全的替代方案:

    • 避免将包含HTML/JS的内容通过查询字符串传递,改用POST请求提交数据;
    • 对输入内容做严格的清洗,移除或转义所有危险的HTML标签和脚本关键字后再传递;
    • 自定义请求验证规则,仅允许业务所需的安全内容,而非完全关闭验证。

内容的提问来源于stack exchange,提问作者Mike Gmez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:25:24