2

我想在我的应用程序中添加一个额外的障碍,以防止通过 javascript 实现自动化,特别是当自动化请求通过任何流行浏览器的 XMLHttpRequest 完成时。

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

我想另一个相关的问题是,XMLHttpRequest 很难看起来是一个普通的人为驱动的请求吗?因为如果是这样,那么我想我是在做傻事。

更新:我可能对这个问题的表述过于狭隘。目标是检测:由其他人编写的代码,不是由普通浏览器提交的,可能是机器人,可能不是来自我的 Intranet 客户等。到目前为止,我想到了 XHR 和 .NET WebRequest 请求。

4

6 回答 6

4

不,没有办法做到这一点。许多流行的库(如 jquery)都放置了一个特殊的标头(jquery 的“x-requested-with”)来表明它是一个 ajax 调用,但这显然是客户端自愿的。

必须假设您收到的任何请求都可能是恶意的

于 2009-06-30T18:00:09.510 回答
4

您始终可以使用验证码来确保由人工负责提交请求。recaptcha.net 是免费的,有助于将书籍数字化。

编辑:

如果您知道要阻止的恶意行为类型,则可以开发简单的算法来检测该行为。当检测到该行为时,您可以使用验证码向客户提出质疑,以确保有人负责。这种方法开始成为普遍做法。看看这篇关于这个主题的帖子。

于 2009-06-30T18:20:42.690 回答
1

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

于 2009-07-17T13:38:55.537 回答
1

您可以使用请求质询令牌来实施策略,这与可能用于CSRF/XSRF保护的策略不同。另一种可能的选择可能是使用身份验证,但如果您有一个公共网站,这可能不是很友好。

于 2009-07-18T21:49:47.867 回答
1

无法确定请求是否是伪造的。使用 .NET HttpWebRequest 类,您可以完美地模拟来自浏览器的任何有效 HTTP 请求。但根据您的应用程序,您可以考虑以下其中一项:

  • 查看 HTTP 标头以找到最明显的尝试
  • 防止在短时间内来自同一 IP 地址的请求过多
  • 需要登录
  • 只允许某些 IP 地址范围
  • 验证码
  • 在提交之前运行一些 Javascript 代码,以使 .NET HttpWebRequest 更难破解(参见 Mark Ba​​rnard 的回答)

你必须找出人们为什么会尝试这样做,然后找到一种方法让他们非常不方便。可能以这样一种方式,您可以轻松地修改验证程序,以便他们必须一直跟上。

于 2009-07-18T13:18:58.163 回答
0

据我所知,XMLHttpRequest 的所有实现都在请求中添加了一个标头。

编辑:

抱歉,标题(至少在 PHP 下)是 'HTTP_X_REQUESTED_WITH'

于 2009-06-30T18:00:09.727 回答