Не удается отключить ASP.Кнопка Net webforms с jQuery / reCAPTCHA

#jquery #css #asp.net #recaptcha

#jquery #css #asp.net #recaptcha

Вопрос:

Мой ASP.net сайт webforms безжалостно засыпается спамом.

Я разместил на сайте элемент управления Google reCAPTCHA V2, но я не могу заставить его работать, потому что кнопка отправки всегда включена. Вот мой код .ascx (это нижний колонтитул для регистрации на каждой странице):

 <script>
    $(document).ready(
        function () {
            $('#Button1').prop("disabled", true);
        }
    );
</script>

<script type="text/javascript">
    function recaptcha_callback() {
        $('#Button1').prop("disbled", false);
    }
</script>
 

Вот reCAPTCHA и кнопка:

 <div class="g-recaptcha" data-callback="recaptcha_callback" 
    data-sitekey="NOTPOSTKEYHERE"></div>

<asp:Button class="btn btn-primary" ID="Button1" runat="server"
    CausesValidation="False" Text="Go" OnClientClick="Confirm();" 
    OnClick="Button1_Click" />
 

jQuery, похоже, вообще ничего не делает. Я действительно просто хочу, чтобы отключить кнопку отправки, пока не будет проверен reCAPTCHA. Я совсем не уверен, что это победит спам-ботов, поскольку они каким-то образом проходят, что бы я ни делал. Я также добавил honeypot, но я даже не могу зайти так далеко, поскольку reCAPTCHA не включает и не отключает кнопку.

Я попытался добавить disabled=»disabled» в тег asp:Button, но он никогда не перезаписывается. Возможно, что класс .css в одном из окружающих div не позволит мне перезаписать свойство, но я не знаю, как использовать «! важно» с отключенным свойством.

Я также пытался сделать это в коде ascx.cs, но как только код попадает на серверную часть, форма была отправлена. Это нормально, но если пользователь отправляет без reCAPTCHA, я не знаю, настоящий это пользователь или нет.

Любая помощь приветствуется.

Комментарии:

1. «отключено» неправильно написано при обратном вызове.

2. Позвольте мне угадать: вы используете «главную страницу»? Если это так, идентификатор кнопки на стороне клиента не будет совпадать с идентификатором на стороне сервера. Вам нужно будет установить ClientIDMode свойство кнопки на Static .

3. Боже, это сработало, @RichardDeeming ! К сожалению, этого не произошло: ` document.getElementById(«Нижний колонтитул $Button1»).disabled = true; document.getElementById(«Footer_Button1»).disabled = true;`

4. Используйте опции «просмотр источника» или «проверка элемента» в вашем браузере, чтобы узнать, какой идентификатор на стороне клиента элемента управления, который вы пытаетесь изменить.

Ответ №1:

повторная загрузка CAPTCHA — это многоступенчатый процесс, и похоже, что вы реализуете только интерфейс. Как указывает @wazz, у вас также есть орфографическая ошибка во внешней реализации, но вы столкнетесь с проблемой без внутренней проверки того, что повторная КАПЧА действительно была решена.

Процесс проходит примерно так:

  1. Покажите повторную КАПЧУ, чтобы решить ее в вашем интерфейсе (флажок, визуальный вызов, что угодно …)
  2. Google присвоит вашему интерфейсу идентификатор для решения проблемы с повторной КАПЧЕЙ
  3. Идентификатор отправляется на серверную часть вместе с остальной частью формы
  4. Ваш серверный сервер запрашивает у Google проверку идентификатора
  5. Google говорит, было ли это хорошим решением или, скорее всего, ботом
  6. Вы решаете, что делать с результатом повторной КАПЧИ, в вашем случае удалите сообщение и обвините ошибку соединения или что-то в этом роде, чтобы создатель бота не получил слишком много подсказок

Для бесплатной версии это в значительной степени просто «это, вероятно, бот» или «это, вероятно, не бот». В enterprise edition вы можете установить re-CAPTCHA на место без необходимости установки флажка или визуального вызова, если вы хотите, чтобы все было невидимым и без проблем.

Вы можете бесплатно получать 1 млн повторных вызовов CAPTCHA Enterpise в месяц, что дает гораздо более детальную отдачу, и если вы не используете большую платформу, вы останетесь ниже порога. Это даст вероятность того, насколько бот похож на посетителя, по шкале от 0 до 1 (таким образом, 11 десятичных знаков), и общий код причины, почему он так думает. Может быть излишним для вашего использования, но вы можете делать такие вещи, как простои ботов или отправлять их на поддельные страницы, если оценка слишком низкая, или использовать функцию 2FA по электронной почте / sms и другие интересные функции, чтобы отпугивать ботов, позволяя законным посетителям.

Комментарии:

1. Спасибо! У меня действительно есть внутренний код, и я могу успешно работать с reCAPTCHA на серверной части. Проблема заключалась в опечатке (Javascript всегда завершается с ошибкой), а также в том, что главная страница вызывала неоднозначность с .ascx. Однако спасибо за объяснение, поскольку оно дает мне лучшее понимание.

Ответ №2:

Я думаю, что есть два возможных решения.

  1. Добавьте свойство ClientIDMode=»Static» в Button1. Это гарантирует, что идентификатор остается неизменным при отображении ASP.NET двигатель. Я думаю, что это хорошее решение, но вы должны убедиться, что идентификатор уникален. Поэтому выберите идентификатор, который нелегко повторно использовать в других пользовательских элементах управления.
  2. Создайте сценарии на стороне сервера. В вашем коде создайте скрипт следующим образом:

var str1 = $»$({Button1.ClientID}).prop(«отключено», true);»

Используйте ScriptManager.Зарегистрируйте clientscriptblock, чтобы отобразить этот скрипт.