Я могу считать данные Капчи с JavaScript безопасным способом?

Мы используем управление Капчой в форме регистрации, что мы делаем полную клиентскую проверку для всех полей в JavaScript (JQuery) около проверки сервера..
Я попробовал много путей, но все запишут значение Капчи в JavaScript, к которому может получить доступ любой :(
Я ищу, если там какой-либо путь, которые позволяют мне, проверяют значение Капчи в стороне клиента с помощью JQuery безопасным способом, или это не может быть сделано?

7
задан Amr Badawy 6 June 2010 в 06:58
поделиться

3 ответа

Это невозможно.

Как вы знаете, Javascript является клиентским, и любой клиентский код следует рассматривать как потенциально скомпрометированный, поскольку вы не можете его контролировать.

В лучшем случае вы можете прибегнуть к отправке соленого хэша значения вместе с солью, но даже это само по себе может быть использовано для проверки значений предположения перед фактической отправкой.

Все остальное зависит от обращений к серверу.


В соответствии с запросом комментария, вот общая идея:

Во-первых, на сервере вычислите случайную строку, которая будет использоваться в качестве соли. Это должно быть примерно уникальным для каждого запроса. Эта строка предназначена для предотвращения атак радужных таблиц .

Теперь, сохраняя эту строку отдельно, но также создайте другую строку, которая представляет собой конкатенацию случайной строки и ответа Captcha. Из этой новой объединенной строки вы генерируете ее хэш (например, SHA-1).

using System.Web.Security;
...
string hashVal = FormsAuthentication.HashPasswordForStoringInConfigFile(combined, "SHA1");

И случайная строка, и хеш-значение должны быть размещены на странице, чтобы javascript мог их прочитать.

На стороне клиента, когда пользователь отвечает на Captcha, возьмите случайную строку и объедините ее с ответом (идея здесь?). Взяв эту строку, вы можете использовать что-то вроде плагина JQuery SHA-1 для ее хеширования и сравнения с предварительно вычисленным хешем, который вы отправили.

hashVal = $ .sha1 (CombinedString)

Если совпадает, это (почти) наверняка правильный ответ. Если нет, то это 100% неправильный ответ.

8
ответ дан 7 December 2019 в 03:11
поделиться

Мое решение )) Каждый раз, когда страница показывает капчу пользователю, вы можете динамически генерировать обфусцированные JavaScript функции(я думаю лучше всего 5 или 10). Например, одна функция (или 3)) может установить cookies с заранее сгенерированным хэшем (сервер возвращает его) (от реального значения капчи), другие функции должны реализовать алгоритм на стороне сервера для проверки значения, которое ввел пользователь. Я могу сказать, что это работает на 100%, потому что очень сложно парсить динамически javascript + мы устанавливаем cookies пользователя на стороне клиента (Ботам очень сложно узнать, где и как вы устанавливаете и проверяете cookies), используя JavaScript.

0
ответ дан 7 December 2019 в 03:11
поделиться

вы можете использовать ajax для отправки текущего значения на сервер, который ответит истина или ложь.это помешало бы вам сделать настоящий пост, а также не дать значение catpcha в html.

1
ответ дан 7 December 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: