Использовать атрибут данных для действия формы?

У меня есть клиент, который действительно ненавидит капчу, но она необходима, иначе будет слишком много спама. У меня был человек, который порекомендовал следующее:

Имейте свою веб-форму и только действие формы в теге данных (html5), а затем по завершении формы и отправке формы обрабатывайте действия, в которых действует действие. Никакое действие формы, ни один бот не может заполнить его и отправить, и никаких изменений в как ваша форма выглядит или работает.

Если у меня есть форма, которая выглядит так:

<form action="/FormProcessv2.aspx?WebFormID=10090&amp;OID={module_oid}&amp;OTYPE={module_otype}&amp;EID={module_eid}&amp;CID={module_cid}" enctype="multipart/form-data" onsubmit="return checkWholeForm15174(this)" method="post" name="catwebformform15174">

Как мне изменить URL-адрес действия, чтобы использовать атрибут данных? Потребуется ли для этого JS? Как работает идея?

Примечание. Я искал в Google и не смог найти никакой информации об использовании атрибута данных и действия. Также я использую jQuery 2.0.3 на сайте.

Любое руководство приветствуется.


person L84    schedule 13.01.2014    source источник
comment
Да, для этого потребуется Javascript. Но я не удивлюсь, если боты достаточно умны, чтобы с этим справиться.   -  person Andrew Barber    schedule 13.01.2014
comment
@AndrewBarber - я действительно обнаружил, что многие боты не выполняют javascript, так как это замедляет их сканирование страницы. У вас есть пример того, как это будет работать, или вы можете указать мне место с информацией? Кроме того, если я смогу заставить это работать, я проверю его и посмотрю, как идет отправка спама, и смогу сообщить об этом как редактирование или комментарий.   -  person L84    schedule 13.01.2014
comment
Эта идея звучит полусырой. Я не уверен, как скрытие действия в атрибуте данных, а затем замена его при отправке формы вообще обходит бота. Большинство ботов, вероятно, попытаются отправить форму сами, а также просто вызовут тот же код, что и ваша форма при отправке, что также разблокирует ваше скрытое действие.   -  person erikrunia    schedule 13.01.2014
comment
@AndrewBarber - В качестве обновления количество спам-рассылок сократилось с 50-100 в день до 0! Хотя я знаю, что это не полное доказательство, оно помогло предотвратить спам на моем сайте. знак равно   -  person L84    schedule 15.01.2014
comment
Прохладно; кажется, оно того стоило!   -  person Andrew Barber    schedule 15.01.2014


Ответы (1)


Как это будет работать при отправке формы (вызывайте этот swapAction, когда ваш текущий checkWholeForm15174 проверяет)

function SwapAction() {
    var dataAttr = $('#myFormName').data();

    $('#myFormName').get(0).setAttribute('action', dataAttr.action);
}

предполагая, что ваша форма была изменена, чтобы выглядеть так:

<form action="" data-action="/FormProcessv2.aspx?WebFormID=10090&amp;OID={module_oid}&amp;OTYPE={module_otype}&amp;EID={module_eid}&amp;CID={module_cid}"  enctype="multipart/form-data" onsubmit="return checkWholeForm15174(this)" method="post" name="catwebformform15174">
person erikrunia    schedule 13.01.2014
comment
В качестве альтернативы вы можете написать это так: $('#myFormName')[0].action = dataAttr.action; - person probablyup; 13.01.2014
comment
yessiree, вытащил немного более старого кода из более старого поста SO, мне кажется... :-) - person erikrunia; 13.01.2014
comment
Спасибо вам за помощь. Я использовал метод @ultraviol3tlux для скрипта. Также мой спам пошел к нулю! Хотя я знаю, что это не полное доказательство того, что оно работает. Еще раз спасибо за помощь. - person L84; 15.01.2014