有没有办法确定到达处理程序的请求(假设处理程序响应获取和发布)是由真正的浏览器还是由编程客户端执行的?
我已经知道欺骗 User Agent 和 Referrer 之类的东西很容易,但是还有其他更难欺骗的标头吗?也许在.net 的 HttpWebRequest 之类的类中不常见的标头?
我看到的另一条路径可能是使用加密视图状态向浏览器发送一个值,该值在服务器端得到验证,尽管不能简单地从先前的响应中抓取该值并作为 post 参数添加到下一个请求?
任何帮助将不胜感激,干杯,
最常见的方法是使用验证码。当然,验证码有其自身的问题(用户并不真正关心它们),但它们确实使以编程方式发布数据变得更加困难。尽管您可以强制他们在交付内容之前解决验证码,但对 GET 并没有真正的帮助。
没有简单的方法来区分,因为最终,从程序上看,帖子在服务器上看起来与用户从浏览器中发布的帖子相同。
As mentioned, captcha's can be used to control posting but are not perfect (as it is very hard but not impossible for a computer to solve them). They also can annoy users.
Another route is only allowing authenticated users to post, but this can also still be done programatically.
If you want to get a good feel for how people are going to try to abuse your site, then you may want to look at http://seleniumhq.org/
This is very similar to the famous Halting Problem in computer science. See some more on the proof, and Alan Turing here: http://webcache.googleusercontent.com/search?q=cache:HZ7CMq6XAGwJ:www-inst.eecs.berkeley.edu/~cs70/fa06/lectures/computability/lec30.ps+alan+turing+infinite+loop+compiler&cd=1&hl=en&ct=clnk&gl=us
有很多方法可以做到这一点,比如动态生成的 XHR 请求只能通过人工任务完成。
这是一篇关于 NP-Hard 问题的精彩文章。我可以在这里看到一个巨大的可能性: http ://www.i-programmer.info/news/112-theory/3896-classic-nintendo-games-are-np-hard.html
一种方法:您可以使用一些棘手的 JS 来处理点击时的标记。因此,您的服务器在后端渲染阶段向页面上的元素发出令牌 ID。将这些记录在数据库或数据文件中。然后,当用户点击并提交时,您可以比较通过 onclick() 函数发送的 id。有很多方法可以解决这个问题,但是您可以应用一些启发式方法来确定帖子是否太快而无法成为人类,也就是说,即使他们编写了劫持令牌 ID 并自动提交的脚本,您也可以检查点击事件之间的时间自动显示。最近注册了推特账号?他们使用被动人体检测,虽然不是 100% 万无一失,但它更慢且更难破解。许多(如果不是全部)垃圾邮件帐户必须由人工打开。
另一种方式:http ://areyouahuman.com/
只要您使用加密方法来验证人性,而没有糟糕的 CAPTCHA 是可能的。我的意思是,也不要忽略您的标题。这些是免费的方式。
关键是要有足够的复杂性来解决一个 NP-Complete 问题,就解决问题总数的方法数量而言是非同寻常的。http://en.wikipedia.org/wiki/NP-complete
当人工智能可以自行解决多个复杂的人类问题的那一天到来时,除了请求篡改之外,我们还有其他事情要担心。
另一家进行有趣研究的公司是http://www.vouchsafe.com/play-games,他们实际上使用旨在欺骗 RTT 的游戏来训练 RTT 如何更容易被人类解决!