我正在维护一个使用 Umbraco CMS 7.15.7 的旧版 .NET 4.7.2 MVC 应用程序。我们开始收到在 Azure Application Insights 中注册的失败请求,并显示以下消息
A potentially dangerous Request.Path value was detected from the client (:).
我已经看到它与诸如此类的请求有关(以下是通常出现在 Application Insights 日志中的示例请求,我刚刚更改了真实的网站域):
timestamp [UTC]
2021-09-28T21:50:31.1808953Z
name
GET /companies/ https:/www.sample-site.com/companies/sample-company
url
https://www.sample-site.com/companies/ https:/www.sample-site.com/companies/sample-company
success
False
resultCode
400
duration
0.1136
performanceBucket
<250ms
itemType
request
customDimensions
{"_MS.ProcessedByMetricExtractors":"(Name:'Requests', Ver:'1.1')"}
operation_Name
GET /companies/ https:/www.sample-site.com/companies/sample-company
client_Type
PC
client_IP
0.0.0.0
sdkVersion
web:2.9.0-23612
我意识到问题(:) 是因为url
最终name
以某种方式“加倍”(https://www.sample-site.com/companies/ https:/www.sample-site.com/companies/sample-company
)。我的目标不是允许这样的请求,而是找到它们的原因。
以下是我对可能导致此问题的原因的结论:
- 失败的请求似乎定期发生,并且批量发生 - 每 5-10 小时。一个产品页面永远不会在批量中被调用两次。这让我相信它们可能是由机器人引起的,但是这种模式并不总是很清楚——两个请求之间会有几分钟的间隔。
- 这些请求似乎主要发生在 Umbraco 中某个节点(在本例中为
companies
节点)下的产品页面。但是,在 Umbraco 中该节点下的某些产品页面没有出现。 - 失败的请求包含只有一个“/”的 https:/,这很奇怪,似乎这部分在某些时候被连接起来
- 节点下的少数成功请求
companies
始终具有 301 状态代码,这使我相信该问题可能与某处的重定向规则损坏有关 canonicalUrl
在我们为某些产品页面(主要是产品页面节点的属性)更改 Umbraco 中的一些内容后,错误开始发生。但是话又说回来,有些产品页面确实填写了属性,但没有遇到问题。- 我永远无法将这些请求与 Application Insights 中的用户或会话相关联
我知道这可能过于具体而无法调试,并且这可能是由几乎任何事情引起的 - 但我确实有一种感觉,它与 Umbraco 有某种关系,所以有人在 Umbraco 方面有经验并且知道该name
属性最终如何成为生成的GET /companies/ https:/www.sample-site.com/companies/sample-company
可能会导致我找到一些线索?
作为附加信息,以下是对 Umbraco 中同一节点下的产品页面的成功执行请求:
timestamp [UTC]
2021-09-29T07:27:54.2739984Z
name
GET /companies/second-company
url
https://www.sample-site.com/companies/second-company
success
True
resultCode
301
duration
6.4651000000000005
performanceBucket
<250ms
itemType
request
customDimensions
{"_MS.ProcessedByMetricExtractors":"(Name:'Requests', Ver:'1.1')"}
operation_Name
GET /companies/second-company
client_Type
PC
client_IP
0.0.0.0
sdkVersion
web:2.9.0-23612