Цифры для валидации форм Web от спама?

NetWood

Lotus team
17.04.2008
374
20
#1
В вебформе требуется проверять тестовое поле для защиты от спама. Обычно показывают картинку с цифрами.

Что-то похожее есть везде при регистрации, на форумах и пр.
На Notesnet.ru видел тоже. Вот любой форме на http://notesnet.ru/ например
внизу код подтверждения под картинкой...

Еще ветка моя здесь http://forum.sysfaq.ru/index.php?showtopic=4545
И варианты решения здесь http://codestore.net/apps/validation30.nsf/contact?OpenForm

Все же валидация по картинкам правильнее.
Может кто выручит готовым шаблоном с формой?
Есть ли у кого готовое или линк буржуйский на скриптец или собако формулу?
 
E
#5
NetWood

Обратите внимание на сюда использует reCaptcha
тут "поделка" (архив recaptcha.rar) по материалам статьи:
Посмотреть вложение recaptcha.rar

ПС. сорри, делал с "колен", поэтому в боевых условиях потестить не удалось... надеюсь кто поможет... :ph34r:
 

Вложения

NetWood

Lotus team
17.04.2008
374
20
#6
тут "поделка" (архив recaptcha.rar) по материалам статьи:
Посмотреть вложение 1577
Ок! Спасибо.

Предварительно упростил себе задачу. Сделал математическую капчу так (надо в поле ввести сумму цифр):
Брать вычисляемое значение из формы в WQS не катит, поскольку оно пересчитывается.
Поэтому в форме поставил доп. HTML стороку. Это нужно для того чтобы передать значение по WQS в агент и там обработать session.DocumentContext
<input name="DocUNID" type="hidden" value="<Вычисляемое значение=@DocumentUniqueID>">

n1 и n2 позиции цифр в капче. ставим по усмотрению. Это усложняет определение цифр.
Например, n1=1 n2=3
Вычисляемый текст в форме
-----------------------
rn:=@Trim(@ReplaceSubstring(@DocumentUniqueID;"A":"B":"C":"D":"E":"F":"0"; ""));
poz1:=@Right(@Left(rn;n1);1);
poz2:=@Right(@Left(rn;n2);1);
confirm1:=@TextToNumber(@Right(@Left(rn;@TextToNumber(poz1));1));
confirm2:=@TextToNumber(@Right(@Left(rn;@TextToNumber(poz2));1));
"Значение "+@Repeat("| ";confirm1)+" плюс "+@Repeat("| ";confirm2) + " = ?"
далее поле
confirm для ввода на форме

в агенте по WQS
-----------
Set db = session.CurrentDatabase
Set note = session.DocumentContext

''==== вычисляем капчу из сохраненного DocUNID
Dim array(1 To 7) As String
array(1) = "A"
array(2) = "B"
array(3) = "C"
array(4) = "D"
array(5) = "E"
array(6) = "F"
array(7) = "0"
Dim ret As Variant
ret = Replace(note.DocUNID(0),array, "")
Dim poz1 As String, poz2 As String , num1 As String, num2 As String , sum As String
poz1$ = Right$(Left$(ret, n1),1) ' позиция первой цифры
poz2$ = Right$(Left$(ret, n2),1) ' позиция второй цифры
num1$ = Right$(Left$(ret, Ccur(poz1$)),1) ' первая цифра
num2$ = Right$(Left$(ret, Ccur(poz2$)),1) ' вторая цифра
sum=Cstr(Ccur(num1$)+Ccur(num2$)) ' собственно капча
''=== конец капчи

If note.confirm (0) = sum Then
....
''-- отправить майл например
....
Else
''-- присвоить полю confirm = SPAMBOT
''-- в поле $$Return формы проанализировать confirm. Если не SPAMBOT - вывести док, иначе обратно форму.
''-- и далее прорезать другим агентом все новые доки со значением confirm=SPAMBOT

Можно не отрезать буквы от 32 unid, а преобразовывать в цифру. Выводить не только цифры для суммы, а палочки как у меня в примере или из штатного /icons/ мелкие картинки для подсчета. Умножать например. Поменять имя DocUNID на не поймешь какое. В общем простор для фантазии для очеловечивания задачи, а для робота непроходимый лес...