2009-06-30 129 views
2

我想在我的应用程序中添加一个额外的障碍,以防止通过javascript实现自动化,特别是当自动请求通过任何流行浏览器的XMLHttpRequest完成时。在ASP.NET中嗅探XMLHttpRequest(浏览器嗅探AJAX请求)的可靠方法?

我可以在ASP.NET中使用的XMLHttpRequest是否有可靠的迹象?

我想其他相关的问题是,难道XMLHttpRequest似乎是一个普通的人为驱动的请求?因为如果是这样,那么我想我就是傻瓜差事。

更新:我可能会太狭隘地措辞这个问题。目标是检测:由其他人编写的代码,不是由普通浏览器提交的代码,可能是机器人,可能不是来自我的内部网用户,等等。到目前为止,XHR和.NET WebRequest请求都浮现在脑海。

回答

4

你总是可以使用CAPTCHA,以确保人类负责提交请求。 recapt casset是免费的,有助于数字化书籍。

编辑:

如果你知道你正在试图阻止什么类型的恶意行为,你可以开发用于检测行为简单的算法。当检测到这种行为时,您可以使用CAPTCHA向客户提出质疑,以确保人员负责。这种方法已经开始成为惯例。在这个主题上看看post

4

不,没有办法做到这一点。很多像jquery这样的流行库都提供了一个特殊的头文件(用于jquery的“x-requested-with”)来表明它是ajax调用,但这显然是客户端自愿的。

必须假设你收到任何请求,可能是恶意的不幸

0

据我所知,XMLHttpRequest的所有实现一个头添加到请求。

编辑:

对不起,标题(至少在PHP)是“HTTP_X_REQUESTED_WITH”

+0

这不是默认添加的,它是由客户端库自愿添加的 – 2009-06-30 18:01:33

+1

但是,如果设置了该标头,那么它肯定是一个XMLHttpRequest。 – Thomas 2009-06-30 18:06:01

1

你可以执行一些偷偷摸摸的事情,但不幸的是它不会阻止每个人。例如,您可以在加载页面时运行的开始/登录页面上放置一些JavaScript。此JavaScript会导致重定向,并可能会写入发送回服务器的加密cookie值。使用XMLHttpRequest(或其他)显然只是返回内容并且不执行任何JavaScript,因此您可以将这些请求过滤掉,因为它们没有由脚本设置的cookie值。在JavaScript上运行一些混淆会更好。

1

无法确定请求是否伪造。使用.NET HttpWebRequest类,您可以完美地模拟来自浏览器的任何有效的HTTP请求。但是,这取决于你的应用程序,你可以考虑下列之一:

  • 看HTTP头,找到最明目张胆的企图
  • 防止来自同一IP地址的过多请求在很短的时间内
  • 需要登录
  • 只允许某些IP地址范围
  • 验证码
  • 运行一些JavaScript代码之前提交,使一个黑客使用.NET HttpWebRequest的困难(见标记Barnard的答案)

你必须找出为什么人们会试图做到这一点,然后找到一种方法使他们很不方便。可能以这种方式,您可以轻松修改验证程序,以便他们必须始终保持。

1

您可以使用request challenge tokens实施策略,与用于CSRF/XSRF保护的策略不同。另一种可能的选择可能是使用身份验证,但如果你有公共网站,这可能不是很友好。