在ASP.NET中嗅探XMLHttpRequest(浏览器嗅探AJAX请求)的可靠方法?
我想在我的应用程序中添加一个额外的障碍,以防止通过javascript实现自动化,特别是当自动请求通过任何流行浏览器的XMLHttpRequest完成时。在ASP.NET中嗅探XMLHttpRequest(浏览器嗅探AJAX请求)的可靠方法?
我可以在ASP.NET中使用的XMLHttpRequest是否有可靠的迹象?
我想其他相关的问题是,难道XMLHttpRequest似乎是一个普通的人为驱动的请求?因为如果是这样,那么我想我就是傻瓜差事。
更新:我可能会太狭隘地措辞这个问题。目标是检测:由其他人编写的代码,不是由普通浏览器提交的代码,可能是机器人,可能不是来自我的内部网用户,等等。到目前为止,XHR和.NET WebRequest请求都浮现在脑海。
你总是可以使用CAPTCHA,以确保人类负责提交请求。 recapt casset是免费的,有助于数字化书籍。
编辑:
如果你知道你正在试图阻止什么类型的恶意行为,你可以开发用于检测行为简单的算法。当检测到这种行为时,您可以使用CAPTCHA向客户提出质疑,以确保人员负责。这种方法已经开始成为惯例。在这个主题上看看post。
不,没有办法做到这一点。很多像jquery这样的流行库都提供了一个特殊的头文件(用于jquery的“x-requested-with”)来表明它是ajax调用,但这显然是客户端自愿的。
你必须假设你收到任何请求,可能是恶意的不幸
据我所知,XMLHttpRequest的所有实现一个头添加到请求。
编辑:
对不起,标题(至少在PHP)是“HTTP_X_REQUESTED_WITH”
你可以执行一些偷偷摸摸的事情,但不幸的是它不会阻止每个人。例如,您可以在加载页面时运行的开始/登录页面上放置一些JavaScript。此JavaScript会导致重定向,并可能会写入发送回服务器的加密cookie值。使用XMLHttpRequest(或其他)显然只是返回内容并且不执行任何JavaScript,因此您可以将这些请求过滤掉,因为它们没有由脚本设置的cookie值。在JavaScript上运行一些混淆会更好。
无法确定请求是否伪造。使用.NET HttpWebRequest类,您可以完美地模拟来自浏览器的任何有效的HTTP请求。但是,这取决于你的应用程序,你可以考虑下列之一:
- 看HTTP头,找到最明目张胆的企图
- 防止来自同一IP地址的过多请求在很短的时间内
- 需要登录
- 只允许某些IP地址范围
- 验证码
- 运行一些JavaScript代码之前提交,使一个黑客使用.NET HttpWebRequest的困难(见标记Barnard的答案)
你必须找出为什么人们会试图做到这一点,然后找到一种方法使他们很不方便。可能以这种方式,您可以轻松修改验证程序,以便他们必须始终保持。
这不是默认添加的,它是由客户端库自愿添加的 – 2009-06-30 18:01:33
但是,如果设置了该标头,那么它肯定是一个XMLHttpRequest。 – Thomas 2009-06-30 18:06:01