我应该如何处理浏览我网站中仅适用于AJAX的网页的用户?我应该使用GET吗?

时间:2013-05-10 14:30:30

标签: c# ajax post get webmatrix

有人询问有关何时使用POST以及何时在AJAX请求中使用GET的性质的类似问题

这里: What are the advantages of using a GET request over a POST request?

,此处: GET vs. POST ajax requests: When and how to use either?

但是,我想说清楚这不是我要问的。我获得了幂等性,敏感数据,浏览器能够在发生错误时再次尝试的能力,以及浏览器能够缓存查询字符串数据的能力。

我的真实情况是,我希望阻止我的用户只能输入我的“Compute.cshtml”文件的URL(即我的jQuery $.ajax函数发布到的服务器上的文件)。

我在WebMatrix C#.net网页环境中,我试图在文件名前加下划线(_),但显然AJAX请求符合此下划线设计的相同标准为了防止显示,它当然会打破请求。

所以如果我使用POST,我可以简单地使用这个逻辑:

if (!IsPost)  //if this is not a post...
{
    Response.Redirect("~/") //...redirect back to home page.
}

如果我使用GET,我想我可以发送其他数据,如包含值"AccessGranted"的字符串,并在另一侧检查它是否等于此值,如果没有则重定向,但这可能很容易通过在地址栏中键入来复制(不是数据在另一侧是敏感的,但是......)。

无论如何,我想我问是否可以总是使用POST来处理这个逻辑,或者处理我的情况的适当方法是在WebMatrix C#.net web-pages中使用GET或POST与AJAX环境。

3 个答案:

答案 0 :(得分:2)

我的建议是,不要试图阻止他们。这是无害的。

  • 你不会直接链接到它,所以它不会真的出现。 (出于Google的考虑,您可能希望robots.txt排除整个/ api目录。)
  • 无论如何都是他们可以访问的数据(否则你需要服务器端修剪),所以你不能暴露任何危险或敏感的东西。
  • 当你链接到(缓存,语义等)时,将GET用于GET类请求的优点很多

那么通过直接浏览器输入可以访问该URL的危害是什么?他们也可以直接POST,如果他们足够狡猾,可以使用Fiddler“compose”。通过url访问GET对于调试非常有用。

编辑:有关详细信息,请参阅http://www.robotstxt.org/orig.html等网站,但是从您的网络服务目录中排除搜索引擎的名为/ api的robots.txt将如下所示:

User-agent: *
Disallow: /api/

答案 1 :(得分:1)

IsPost类似,您可以使用IsAjax来确定请求是否是由大多数浏览器中的XmlHttpRequest对象启动的。

if(!IsAjax){
   Response.Redirect("~/WhatDoYouThinkYoureDoing.cshtml");
} 

它检查请求以查看它是否具有值为X-Requested-With的{​​{1}}标头,或者如果Request对象中有一个项目,其中XmlHttpRequest键具有值X-Requested-With

答案 2 :(得分:0)

检测直接AJAX调用的一种方法是检查是否存在 http_referer 标头。直接键入的网址不会生成引荐来源,但您仍然无法将通话与简单的锚链接区分开来。

(请记住,某些浏览器不会为XHR请求生成标头。)