【发布时间】:2020-11-03 08:21:18
【问题描述】:
我在下面有一个 URL 请求:
https://myapp.com/funnyproject/tools/getLayers.ashx?search=true
我可以通过直接在地址栏中输入它来调用它,也可以通过客户端的ajax请求来完成:
$.ajax({
url: "tools/getLayers.ashx?search=true",
headers: { "cache-control": "no-cache" },
cache: false,
success: function (data) {
//do something
}
});
所以这里的问题是我如何知道它来自哪里?
我尝试使用 HttpContext.Current.Request.UrlReferrer 属性,但这没有帮助。
请给点建议!
【问题讨论】:
-
你想做什么?您可以检查 ajax 请求的请求标头
X-Requested-With是否存在。但是如果用户决定,可以在发送请求之前删除该标头。如果您担心其他网站向您的网站发送请求,请查看CORS。 -
我试图拒绝从地址栏直接访问处理程序 (ashx)。我的网络应用程序只允许来自 Ajax 的调用。为此,我需要检测哪个来自地址栏,哪个来自 Ajax。
-
这样的限制实际上是不可能的。但是你可以通过上面的标题检查让诚实的人保持诚实。
-
你应该了解用户代理的概念。 Chrome 和此类浏览器是一类用户代理,有无头、命令行和许多其他类型的用户代理,它们可以与 http(s) 通信,它们可以发送与另一种用户代理发送的请求相同的请求,因为它们都谈论相同的协议,这对您的服务器来说很重要。不要在不切实际的限制上浪费时间。
标签: c# asp.net .net vb.net web