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

Тема в разделе "Lotus - Программирование", создана пользователем NetWood, 17 апр 2008.

  1. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
    В вебформе требуется проверять тестовое поле для защиты от спама. Обычно показывают картинку с цифрами.

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

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

    Все же валидация по картинкам правильнее.
    Может кто выручит готовым шаблоном с формой?
    Есть ли у кого готовое или линк буржуйский на скриптец или собако формулу?
     
  2. Alexander (Criz)

    Alexander (Criz) Гость

    А подскажите как это в Лотус прикручивается?
     
  3. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
  4. EHT

    EHT Гость

    NetWood

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

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

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
    Ок! Спасибо.

    Предварительно упростил себе задачу. Сделал математическую капчу так (надо в поле ввести сумму цифр):
    Брать вычисляемое значение из формы в 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 на не поймешь какое. В общем простор для фантазии для очеловечивания задачи, а для робота непроходимый лес...
     
Загрузка...

Поделиться этой страницей