Обфусцирующий AJAX POST - PullRequest
       13

Обфусцирующий AJAX POST

1 голос
/ 21 февраля 2011

Эй, ребята, я делаю вызов AJAX POST - но с FireBug вы можете видеть все детали (позволяя людям обходить форму).

Какие-нибудь советы по обфускации этого POST (или что-то в этом роде)?

Мой вызов ajax:

$.ajax({
        type: "POST",
        url: "php/query.php",
        cache: false,
        data: "action=getWordsByLetter&l="+letter,
        success: function(data){
            dataArray = data.split('|');
            $('#words').html('');
            for(var i = 0; i < (dataArray.length - 1); i++) {
                $('#words').append('<li class="w">'+dataArray[i]+'</li>');
            }
        }
    });

Я бы предпочел написать код сам, а не в зависимости от плагина:)

Ответы [ 3 ]

7 голосов
/ 21 февраля 2011

Первое: reCaptcha

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

Я не знаю осценарий, который вы решаете, но это сделает более или менее невозможным создание программных POST.

Второй: библиотека на стороне клиента

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

Третье: динамическое именование полей

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

  1. Серверная сторона создает форму и задает какое-то динамическое имя для вашего поля
  2. Сохраняет имя для последующего использования или шифрует егосервер и сохранить крипту в скрытом поле в виде
  3. Сервер возвращает данные
  4. Если имя поля совпадает с ранее созданным именем (либо на стороне сервера, либо в скрытом имени), выследует обработать его, иначе просто проигнорируйте запрос.

Четвертое: изменение структуры DOM

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

Стандартные вещи

  1. Сделать процесс медленным для ботовно для людей это будет работать нормально (задержка в 5 с не должна быть заметна для людей)
  2. ограничение IP - вы можете разрешить только один запрос в x минут из одного и того же места - это сильно зависит от характера вашегоФорма
  3. Шаблон Honeypot , который обычно отфильтровывает ботов от людей.
2 голосов
/ 21 февраля 2011

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

Защитите серверную часть: имейте минимальную длину слова и защиту от наводнений (принимайте X запросов от клиента в течение Y секунд) и убедитесь, что люди не могут получить доступ к любым данным, к которым у них не должно быть доступа, просто спросив за это.

0 голосов
/ 21 февраля 2011

На самом деле, я думаю, что вы должны сделать свое серверное приложение, чтобы на самом деле не имело значения, если люди обойдут реальную форму.

  • Ввод неправильный или вредоносный? Отклонить запрос.
  • Форма представлена ​​много раз ботами? Добавить защиту ботов в виде капчи или других методов проверки человеком, лимитов наводнений и т. Д.
  • Форма является частью безопасности? Добавьте подписывание запросов, как если бы вы использовали (публичный) API веб-сервиса (OAuth приходит на ум)

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

Запутывание - это безопасность через мрак, а не гарантия того, что ничто не будет злоупотреблено. Фактически, в этом случае это может даже сделать ваше приложение на порядок более сложным. Чтобы быть эффективными, он должен «рандомизировать» ключи и значения, отправленные на ваш сервер, и в этом случае сам сервер должен знать, какой запутанный ключ соответствует какому значению. На самом деле, я думаю, что вы ищете не обфускации, а шифрование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...