.NET环境下get-info参数的作用及移除URL Rewrite规则咨询
我来帮你梳理清楚这些问题,都是.NET环境里常见的爬虫/恶意请求场景:
1.
?get-info=xxx这类参数是什么? 这类属于自定义查询参数,不是HTTP标准里的通用参数,大概率是发起请求的工具(恶意爬虫、扫描器)自己生成的标识。随机数字的设计,可能是为了让每个请求看起来“独特”,或者用来测试你的系统对不同参数值的响应差异。
2. 这类请求的可能目的
结合你说的大量请求+触发错误处理,大概率是恶意行为,常见目的有这些:
- 漏洞探测:爬虫通过修改参数值(随机数字),测试系统是否存在SQL注入、未授权访问、敏感信息泄露等漏洞——比如看不同数字是否返回不同内容,或者错误信息里是否暴露服务器路径、数据库细节。
- 资源消耗:大量重复请求会占用服务器CPU、带宽资源,拖慢正常用户的访问速度,甚至是轻度的DDoS攻击。
- 错误逻辑测试:既然这些请求会触发
Application_Error,爬虫可能在刻意制造错误,看看你的错误处理机制有没有漏洞(比如是否会泄露敏感配置)。 - 反爬规避:少数情况下,爬虫用随机参数假装是不同用户的请求,试图绕过基于URL的反爬规则,但这个场景里更偏向恶意扫描。
3. 能否通过URL Rewrite规则移除该参数?
完全可以!而且这是个高效的防护手段,既可以拦截请求,也可以清理无效参数。下面给你两种常用方案:
方案1:用IIS URL Rewrite直接移除参数(并重定向)
如果你的网站部署在IIS上,可以在web.config里添加URL Rewrite规则,直接移除get-info参数,同时返回301重定向告诉爬虫这类参数无效:
<system.webServer> <rewrite> <rules> <rule name="Block get-info Parameter" stopProcessing="true"> <match url="(.*)" /> <conditions> <!-- 匹配包含get-info参数的请求 --> <add input="{QUERY_STRING}" pattern="(^|&)get-info=[^&]*(&|$)" /> </conditions> <!-- 重定向到原路径,不携带无效参数 --> <action type="Redirect" url="{R:1}" appendQueryString="false" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer>
方案2:在Global.asax里直接拦截(更高效)
既然你已经在用Global.asax,其实可以在请求一开始就拦截这类请求,不用等到触发Application_Error,这样更节省资源:
protected void Application_BeginRequest(object sender, EventArgs e) { // 检查查询字符串中是否包含get-info参数 if (!string.IsNullOrEmpty(Request.QueryString["get-info"])) { // 返回403禁止访问,直接拒绝这类请求 Response.StatusCode = 403; Response.StatusDescription = "Forbidden"; Response.End(); } }
这个方法会在请求进入业务逻辑前就直接阻断,比URL Rewrite更直接,适合快速拦截恶意请求。
内容的提问来源于stack exchange,提问作者MiscellaneousUser
相关产品推荐
相关产品推荐

