English 中文(简体)
直接将 POST 复制到服务器还是填入 HTML 表格? [已关闭]
原标题:Do spambots directly POST to server or fill out HTML forms? [closed]

我研究使用Captcha(或Recaptcha)的替代方式,

我认为Captcha对UX有负面影响。 我正在研究使用隐藏的字段,但显然这些字段完全无效(参见:http://radio.javaranch.com/davo/2008/10/15/1240063498569.html )。

对该条的评论指出:

As someone that writes CAPTCHA crackers as part of my job (no, not for spamming), I can assure you that a hidden field would in no way trip me up. As another poster mentioned, I check the over the wire traffic, and don t pay much attention to what happens to be in the HTML of the form.

这让我相信,突如其来的POST公司直接向服务器提出要求,而不是要求填写表格和填写表格。

如果是这样的话, 如果我创建了一个隐藏的、只读的字段, 我预先用在会话中储存的散列来储存这个字段。 当用户提交表格时, 我可以比较这些数值。 这是用来避免乱七八糟的, 还是我监督的?

如果从未要求过表格,我当然不会在会话中找到任何储存的散列,因此可能无视请求。

最佳回答

添加与服务器端会话变量相关的挑战的另一个字段是一个好办法;这需要在垃圾邮件机器人一边做出更大的努力,即它们必须装载和剖析表格,填写表格并提出另一项请求(按照必要的 cookie 发送)。

您也可以考虑添加 JavaScript 来修改给定的挑战, 并以某种方式修改它。 攻击者随后需要先找出您的代码, 然后才能自动复制它 。 变换可能是简单的 rot13 或更复杂的 < code> xor 操作 。 诸如 < code> md5 、 < code> sha1 等事物是既定的算法, 所以这些算法很难选择; 它必须是自定义 。

当然,如果攻击者被绑在攻击你的网站上,你无法做多少事情来防止垃圾邮件的出现;这是丑陋的真相。例如,他们可以运行Selenium ,并绕过你精心建立的所有JavaScript保护。

问题回答

不幸的是,我怀疑您已经有专门针对您的网站的垃圾邮件了。 如果您手动实施了登录和注册, 突发事件就不太可能在不具体针对您的表格的情况下就能够签名。

其它解决方案是好的,尽管它们会有所帮助,但它们都无法防止哪怕是适度确定的垃圾堆。 大量跳跃作为浏览器插件运作,因此相信一个跳跃能够评价 JavaScript 或者一开始就不愿要求表格的可能性非常长。 至少,注册的 CAPTCHA(也许每个邮箱,或者不管你的网站做什么,直到账户被手动批准)很可能是强制性的。

我知道你不想影响用户的经验,但垃圾邮件和账户对UX的危害远大于CAPTCHAs。 咬住子弹,尽一切可能减缓垃圾邮件,否则你的用户会到别处寻找。

诚然,CAPTCHA并不是完全的解决方案 — — 现有软件比人类更能(在某些情况下)更精确地解决这些解决方案。 它们与丰富的早餐谷类一样,只是整个早餐的一部分 — — 正常人不会用SPAM开始休假。 )

管理新用户可能会证明非常有用。

如果有人攻击你的网站,这很容易被绕开:

  1. Request page with form and filled in session value
  2. Fill out the form and submit.

我要说,这几乎不是保护。

不幸的是,我对机器人的现状及其工作方式并不十分熟悉,所以这只是我对围绕这一实施开展工作是多么容易的意见。

不同的跳跃使用不同的方式。

But most flexible spam bots: 1. request page with form 2. read what fields it contains 3. send POST request with found fields with some filled values

您不能确定, 所有机器人都能找到, 并保存您的“ 格式会话” 输入 。 您不能确定所有的机器人都能使用 javascript( 另一种保护方式 - 在 js 上添加要求的字段) 。 但是机器人会有很大的不同 。





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...