2010-03-19 101 views
1

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

网站内容被提供给认证用户。会发生什么是我们的用户将他的凭据提交给我们的网站给第三方 - 它可以是另一个网站或移动应用程序 - 代表他执行请求。

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

我不想为了可用性的原因使用CAPTCHA。我可以用一些JavaScript来做到吗?

+0

你为什么要防止这种情况? – Kimvais 2010-03-19 10:29:48

+0

也许这是一个基于浏览器的游戏,他想防止漫游器? – 2010-03-19 10:34:22

+0

或“发送反馈”表单来获取垃圾邮件......在这两种情况下,都有一些强制更改密码的whitleblower应用程序会更好。 – Kimvais 2010-03-19 10:40:06

回答

7

您可以使用javascript来提升栏,但是任何浏览器都可以使用自动化系统。在最糟糕的情况下,他们可以自动化浏览器,但几乎肯定会有一些更简单的方法来模拟操作。

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

在什么弹簧想到条件(提高标准)(使用javascript):

  1. 更改了提交的位置去。
  2. 在提交时更改字段名称。
  3. 隐藏应该填写的字段。
  4. 在提交时加密/模糊表单内容。
  5. 将GET更改为POST。

另一个可用性问题是,任何禁用JavaScript的人都将无法使用该服务。这可能比验证码更能影响可用性。

+0

这就是我害怕听到 - 但谢谢 – 2010-03-19 14:48:29

0

只有一种方法可以做到这一点,分析供应商字符串寻找被承认的浏览器,但如果有人伪造供应商字符串,他们没有办法避免提交。 - 你会打破形式

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

用PHP,你可以尝试的本地函数get_browser

+1

这仍然可以被欺骗。 – 2010-03-19 10:33:35

+3

不,不是。你很可能会破坏与__all__浏览器的兼容性,你不需要_explicitely_ list在这里,绕过这个(比如'wget -U“Mozilla”')是非常简单的。综上所述; __这会比弊大于弊_ – Kimvais 2010-03-19 10:35:26

+0

我已经说过它可以被欺骗,我想最佳的解决方案应该是使用一个适当的htaccess配置文件来禁止那些似乎不合法的IMO。 – markcial 2010-03-19 10:39:27

1

有检测HTTP代理没有可靠的方法:

要如果导航仪是基于JavaScript的Mozilla浏览器知道任何情况下的某些浏览器 - 除非您可以强制用户使用非常有限的一组浏览器(但这可能会被再次欺骗)。

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

相关问题