如何阻止非浏览器客户端提交请求?

时间:2010-03-19 10:23:13

标签: javascript security forms

我想阻止非浏览器客户端访问某些页面/成功发出请求。

网站内容将提供给经过身份验证的用户。所发生的情况是,我们的用户将我的网站凭据提供给第三方 - 可以是另一个网站或移动应用程序 - 代表他执行请求。

假设有一个用户填写并发送消息的表单。我是否可以保护此表单,以便处理提交的服务器可以判断用户是否直接从浏览器提交了该表单?

出于可用性原因,我不想使用CAPTCHA。我可以用一些javascript做到吗?

3 个答案:

答案 0 :(得分:7)

你可以使用javascript来提高标准,但是浏览器可以做任何事情,自动化系统可以做到。在最糟糕的情况下,他们可以自动化浏览器,但几乎可以肯定有一些更简单的方法来模拟操作。

在任何情况下,他们都可以记录浏览器使用代理发送的请求,并计算出javascript所做的任何技巧。

关于想到的东西(提高标准)(使用javascript):

  1. 更改提交的位置。
  2. 在提交时更改字段名称。
  3. 隐藏看似应该填写的字段。
  4. 在提交时加密/混淆表单内容。
  5. 将GET更改为POST。
  6. 另一个可用性问题是,任何禁用了javascript的人都将无法使用该服务。这可能比CAPTCHA更能影响可用性。

答案 1 :(得分:1)

没有可靠的方法来检测HTTP代理 - 您将在任何情况下打破某些浏览器的表单 - 除非您可以强制用户使用非常有限的一组浏览器(但这样可以再次欺骗。)

IMO,试图限制可用于访问表单的软件,你应该确保有一个真正的人控制该软件。不幸的是,除非所有客户都能访问生物识别扫描仪,否则没有比验证码更好的方法。

答案 2 :(得分:0)

只有一种方法可以做到这一点,分析供应商字符串寻找允许的浏览器,但如果有人伪造供应商字符串,则无法远离提交。

要知道导航器是否是基于javascript的mozilla:

var isMoz = window.navigator.userAgent.match(/^Mozilla/)?true:false;

使用php,您可以尝试本机函数get_browser